Skip to content

Commit d7e0400

Browse files
committed
Merge remote-tracking branch 'origin/structure_dict_extension' into structure_dict_extension
2 parents 7b6838d + fa41572 commit d7e0400

18 files changed

+629
-614
lines changed

pandapower/build_branch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1547,7 +1547,7 @@ def _calculate_3w_tap_changers(t3, t2, sides):
15471547
if var in t3:
15481548
tap_arrays[var][side][tap_mask] = t3[var].values[tap_mask]
15491549
else:
1550-
tap_arrays[var][side][tap_mask] = np.array([float("nan")]*len(tap_mask))
1550+
tap_arrays[var][side][tap_mask] = np.full(sum(tap_mask), float('nan'), dtype=float)
15511551

15521552
# t3 trafos with tap changer at terminals
15531553
tap_arrays["tap_side"][side][tap_mask] = "hv" if side == "hv" else "lv"

pandapower/build_gen.py

Lines changed: 500 additions & 500 deletions
Large diffs are not rendered by default.

pandapower/create/_utils.py

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import logging
99
import warnings
10-
from typing import Iterable
10+
from typing import Iterable, Any
1111

1212
import pandas as pd
1313
from numpy import nan, isnan, arange, isin, any as np_any, all as np_all, float64, intersect1d, unique as uni, c_
@@ -232,39 +232,38 @@ def _try_astype(df, column, dtyp):
232232
pass
233233

234234

235-
def _set_value_if_not_nan(net, index, value, column, element_type, dtype=float64, default_val=nan):
235+
def _set_value_if_not_nan(
236+
net: pandapowerNet,
237+
index: int,
238+
value: Any,
239+
column: str,
240+
element_type: str,
241+
default_val=pd.NA
242+
):
236243
"""Sets the given value to the dataframe net[element_type]. If the value is nan, default_val
237244
is assumed if this is not nan.
238245
If the value is not nan and the column does not exist already, the column is created and filled
239246
by default_val.
240247
241-
Parameters
242-
----------
243-
net : pp.pandapowerNet
244-
pp net
245-
index : int
246-
index of the element to get a value
247-
value : Any
248-
value to be set
249-
column : str
250-
name of column
251-
element_type : str
252-
element_type type, e.g. "gen"
253-
dtype : Any, optional
254-
e.g. float64, "Int64", bool_, ..., by default float64
255-
default_val : Any, optional
256-
default value to be set if the column exists and value is nan and if the column does not
257-
exist and the value is not nan, by default nan
258-
259-
See Also
260-
--------
261-
_add_to_entries_if_not_nan
248+
Parameters:
249+
net: the pandapower net
250+
index: index of the element to get a value
251+
value: value to be set
252+
column: name of column
253+
element_type: element_type type, e.g. "gen"
254+
default_val: default value to be set if the column exists and value is nan and if the column does not
255+
exist and the value is not nan, by default nan
256+
257+
See Also:
258+
_add_to_entries_if_not_nan
262259
"""
263260
column_exists = column in net[element_type].columns
264261
dtype = get_structure_dict(required_only=False)[element_type][column]
262+
if dtype == "float":
263+
default_val = float("nan")
265264
if _not_nan(value):
266265
if not column_exists:
267-
net[element_type].loc[:, column] = pd.Series(data=default_val, index=net[element_type].index)
266+
net[element_type][column] = pd.Series(data=default_val, index=net[element_type].index)
268267
_try_astype(net[element_type], column, dtype)
269268
net[element_type].at[index, column] = value
270269
elif column_exists:
@@ -273,7 +272,16 @@ def _set_value_if_not_nan(net, index, value, column, element_type, dtype=float64
273272
_try_astype(net[element_type], column, dtype)
274273

275274

276-
def _add_to_entries_if_not_nan(net, element_type, entries, index, column, values, dtype=float64, default_val=nan):
275+
def _add_to_entries_if_not_nan(
276+
net: pandapowerNet,
277+
element_type,
278+
entries,
279+
index: int,
280+
column,
281+
values,
282+
dtype=None,
283+
default_val=pd.NA
284+
):
277285
"""
278286
279287
See Also
@@ -353,8 +361,8 @@ def _set_entries(net, table, index, preserve_dtypes=True, entries: dict | None =
353361
if dtype == bool and net[table][col].isna().any(): # default value for bool entries # TODO: check if wanted behaviour
354362
net[table][col] = net[table][col].astype(pd.BooleanDtype()).fillna(False)
355363
net[table][col] = net[table][col].astype(dtype)
356-
except KeyError:
357-
pass
364+
except KeyError as e:
365+
logger.error(f"column {col} has no dtype in network structure")
358366

359367
# and preserve dtypes
360368
if preserve_dtypes:

pandapower/create/ext_grid_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def create_ext_grid(
133133
_set_value_if_not_nan(net, index, max_p_mw, "max_p_mw", "ext_grid")
134134
_set_value_if_not_nan(net, index, min_q_mvar, "min_q_mvar", "ext_grid")
135135
_set_value_if_not_nan(net, index, max_q_mvar, "max_q_mvar", "ext_grid")
136-
_set_value_if_not_nan(net, index, controllable, "controllable", "ext_grid", dtype=bool_, default_val=False)
136+
_set_value_if_not_nan(net, index, controllable, "controllable", "ext_grid", default_val=False)
137137
# others
138138
_set_value_if_not_nan(net, index, x0x_max, "x0x_max", "ext_grid")
139139
_set_value_if_not_nan(net, index, r0x0_max, "r0x0_max", "ext_grid")

pandapower/create/line_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def create_line(
171171
if "type" in lineparam:
172172
entries["type"] = lineparam["type"]
173173

174-
# if net.line column already has alpha, add it from std_type
174+
# only add alpha from std_type if any line already has an alpha # TODO inconsistent behavior: Document this CLEARLY!
175175
if "alpha" in net.line.columns and "alpha" in lineparam:
176176
entries["alpha"] = lineparam["alpha"]
177177

pandapower/create/load_create.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import logging
99
from typing import Iterable, Sequence
1010

11+
import pandas as pd
1112
from numpy import nan, bool_
1213
import numpy.typing as npt
1314

@@ -47,7 +48,7 @@ def create_load(
4748
min_p_mw: float = nan,
4849
max_q_mvar: float = nan,
4950
min_q_mvar: float = nan,
50-
controllable: bool | float = nan,
51+
controllable: bool = False,
5152
**kwargs,
5253
) -> Int:
5354
"""
@@ -141,6 +142,7 @@ def create_load(
141142
"sn_mva": sn_mva,
142143
"in_service": in_service,
143144
"type": type,
145+
"controllable": controllable,
144146
**kwargs,
145147
}
146148
_set_entries(net, "load", index, True, entries=entries)
@@ -149,7 +151,6 @@ def create_load(
149151
_set_value_if_not_nan(net, index, max_p_mw, "max_p_mw", "load")
150152
_set_value_if_not_nan(net, index, min_q_mvar, "min_q_mvar", "load")
151153
_set_value_if_not_nan(net, index, max_q_mvar, "max_q_mvar", "load")
152-
_set_value_if_not_nan(net, index, controllable, "controllable", "load", dtype=bool_, default_val=False)
153154

154155
return index
155156

@@ -173,7 +174,7 @@ def create_loads(
173174
min_p_mw: float | Iterable[float] = nan,
174175
max_q_mvar: float | Iterable[float] = nan,
175176
min_q_mvar: float | Iterable[float] = nan,
176-
controllable: bool | Iterable[bool] | float = nan,
177+
controllable: bool | Iterable[bool] = False,
177178
**kwargs,
178179
) -> npt.NDArray[Int]:
179180
"""
@@ -277,11 +278,10 @@ def create_loads(
277278
_add_to_entries_if_not_nan(net, "load", entries, index, "min_q_mvar", min_q_mvar)
278279
_add_to_entries_if_not_nan(net, "load", entries, index, "max_q_mvar", max_q_mvar)
279280
_add_to_entries_if_not_nan(
280-
net, "load", entries, index, "controllable", controllable, dtype=bool_, default_val=False
281+
net, "load", entries, index, "controllable", controllable, default_val=False
281282
)
282-
defaults_to_fill = [("controllable", False)]
283283

284-
_set_multiple_entries(net, "load", index, defaults_to_fill=defaults_to_fill, entries=entries)
284+
_set_multiple_entries(net, "load", index, entries=entries)
285285

286286
return index
287287

pandapower/create/sgen_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ def create_sgen(
190190
_set_value_if_not_nan(net, index, rx, "rx", "sgen") # rx is always required
191191
_set_value_if_not_nan(net, index, kappa, "kappa", "sgen")
192192
_set_value_if_not_nan(
193-
net, index, generator_type, "generator_type", "sgen", dtype="str", default_val="current_source"
193+
net, index, generator_type, "generator_type", "sgen", default_val="current_source"
194194
)
195195
if pd.isna(generator_type) or generator_type == "current_source":
196196
_set_value_if_not_nan(net, index, k, "k", "sgen")

pandapower/create/shunt_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def create_shunt(
107107
}
108108
_set_entries(net, "shunt", index, entries=entries)
109109

110-
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "shunt", dtype="Int64")
110+
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "shunt")
111111

112112
return index
113113

pandapower/create/storage_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def create_storage(
143143
_set_value_if_not_nan(net, index, max_p_mw, "max_p_mw", "storage")
144144
_set_value_if_not_nan(net, index, min_q_mvar, "min_q_mvar", "storage")
145145
_set_value_if_not_nan(net, index, max_q_mvar, "max_q_mvar", "storage")
146-
_set_value_if_not_nan(net, index, controllable, "controllable", "storage", dtype=bool_, default_val=False)
146+
_set_value_if_not_nan(net, index, controllable, "controllable", "storage", default_val=False)
147147

148148
return index
149149

pandapower/create/trafo_create.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,9 @@ def create_transformer(
202202
)
203203

204204
_set_value_if_not_nan(net, index, max_loading_percent, "max_loading_percent", "trafo")
205-
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo", dtype="Int64")
205+
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo")
206206
_set_value_if_not_nan(net, index, tap_dependency_table, "tap_dependency_table", "trafo")
207-
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo", dtype=object, default_val=None)
207+
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo", default_val=None)
208208
_set_value_if_not_nan(net, index, pt_percent, "pt_percent", "trafo")
209209
_set_value_if_not_nan(net, index, xn_ohm, "xn_ohm", "trafo")
210210

@@ -523,20 +523,20 @@ def create_transformer_from_parameters(
523523
entries.update(kwargs)
524524
_set_entries(net, "trafo", index, entries=entries)
525525

526-
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo", dtype="Int64")
527-
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo", dtype=object, default_val=None)
526+
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo")
527+
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo", default_val=None)
528528
_set_value_if_not_nan(net, index, tap_dependency_table, "tap_dependency_table", "trafo")
529529

530-
_set_value_if_not_nan(net, index, tap2_side, "tap2_side", "trafo", dtype=str)
531-
_set_value_if_not_nan(net, index, tap2_neutral, "tap2_neutral", "trafo", dtype=float64)
532-
_set_value_if_not_nan(net, index, tap2_min, "tap2_min", "trafo", dtype=float64)
533-
_set_value_if_not_nan(net, index, tap2_max, "tap2_max", "trafo", dtype=float64)
534-
_set_value_if_not_nan(net, index, tap2_step_percent, "tap2_step_percent", "trafo", dtype=float64)
535-
_set_value_if_not_nan(net, index, tap2_step_degree, "tap2_step_degree", "trafo", dtype=float64)
530+
_set_value_if_not_nan(net, index, tap2_side, "tap2_side", "trafo")
531+
_set_value_if_not_nan(net, index, tap2_neutral, "tap2_neutral", "trafo")
532+
_set_value_if_not_nan(net, index, tap2_min, "tap2_min", "trafo")
533+
_set_value_if_not_nan(net, index, tap2_max, "tap2_max", "trafo")
534+
_set_value_if_not_nan(net, index, tap2_step_percent, "tap2_step_percent", "trafo")
535+
_set_value_if_not_nan(net, index, tap2_step_degree, "tap2_step_degree", "trafo")
536536
_set_value_if_not_nan(
537-
net, index, tap2_pos if pd.notnull(tap2_pos) else tap2_neutral, "tap2_pos", "trafo", dtype=float64
537+
net, index, tap2_pos if pd.notnull(tap2_pos) else tap2_neutral, "tap2_pos", "trafo"
538538
)
539-
_set_value_if_not_nan(net, index, tap2_changer_type, "tap2_changer_type", "trafo", dtype=object)
539+
_set_value_if_not_nan(net, index, tap2_changer_type, "tap2_changer_type", "trafo")
540540

541541
if any(key in kwargs for key in ["tap_phase_shifter", "tap2_phase_shifter"]):
542542
convert_trafo_pst_logic(net)
@@ -560,10 +560,10 @@ def create_transformer_from_parameters(
560560
_set_value_if_not_nan(net, index, mag0_percent, "mag0_percent", "trafo")
561561
_set_value_if_not_nan(net, index, mag0_rx, "mag0_rx", "trafo")
562562
_set_value_if_not_nan(net, index, si0_hv_partial, "si0_hv_partial", "trafo")
563-
_set_value_if_not_nan(net, index, vector_group, "vector_group", "trafo", dtype=str)
563+
_set_value_if_not_nan(net, index, vector_group, "vector_group", "trafo")
564564
_set_value_if_not_nan(net, index, max_loading_percent, "max_loading_percent", "trafo")
565565
_set_value_if_not_nan(net, index, pt_percent, "pt_percent", "trafo")
566-
# _set_value_if_not_nan(net, index, oltc, "oltc", "trafo", dtype=bool_, default_val=False)
566+
# _set_value_if_not_nan(net, index, oltc, "oltc", "trafo", default_val=False)
567567
_set_value_if_not_nan(net, index, xn_ohm, "xn_ohm", "trafo")
568568

569569
return index
@@ -957,9 +957,9 @@ def create_transformer3w(
957957
net["trafo3w"] = pd.concat([net["trafo3w"], dd], sort=True).reindex(net["trafo3w"].columns, axis=1)
958958

959959
_set_value_if_not_nan(net, index, max_loading_percent, "max_loading_percent", "trafo3w")
960-
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo3w", dtype="Int64")
960+
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo3w")
961961
_set_value_if_not_nan(net, index, tap_dependency_table, "tap_dependency_table", "trafo3w")
962-
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo3w", dtype=str, default_val=None)
962+
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo3w", default_val=None)
963963

964964
for key in [
965965
"tap_dependent_impedance",
@@ -1291,8 +1291,8 @@ def create_transformer3w_from_parameters(
12911291
_set_entries(net, "trafo3w", index, entries=entries)
12921292

12931293
_set_value_if_not_nan(net, index, max_loading_percent, "max_loading_percent", "trafo3w")
1294-
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo3w", dtype="Int64")
1295-
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo3w", dtype=str, default_val=None)
1294+
_set_value_if_not_nan(net, index, id_characteristic_table, "id_characteristic_table", "trafo3w")
1295+
_set_value_if_not_nan(net, index, tap_changer_type, "tap_changer_type", "trafo3w", default_val=None)
12961296
_set_value_if_not_nan(
12971297
net, index, tap_dependency_table, "tap_dependency_table", "trafo3w"
12981298
)

0 commit comments

Comments
 (0)