simbench 1.4.0__zip → 1.5.1__zip
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.
- simbench-1.5.1/.github/workflows/github_test_action.yml +130 -0
- simbench-1.5.1/.github/workflows/test_release.yml +58 -0
- simbench-1.5.1/.github/workflows/upload_release.yml +51 -0
- {simbench-1.4.0 → simbench-1.5.1}/CHANGELOG.rst +11 -1
- {simbench-1.4.0 → simbench-1.5.1}/PKG-INFO +54 -9
- {simbench-1.4.0 → simbench-1.5.1}/README.rst +0 -2
- simbench-1.5.1/pyproject.toml +75 -0
- {simbench-1.4.0 → simbench-1.5.1}/setup.cfg +0 -3
- simbench-1.5.1/setup.py +3 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/auxiliary.py +27 -10
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/csv_data_manipulation.py +7 -7
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/csv_pp_converter.py +49 -37
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/format_information.py +1 -1
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/pp_net_manipulation.py +64 -52
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/read_and_write.py +4 -4
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/voltLvl.py +1 -1
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/extract_simbench_grids_from_csv.py +30 -23
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/profiles.py +23 -29
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/simbench_code.py +12 -11
- {simbench-1.4.0 → simbench-1.5.1/simbench}/simbench.egg-info/PKG-INFO +54 -9
- {simbench-1.4.0 → simbench-1.5.1/simbench}/simbench.egg-info/SOURCES.txt +8 -8
- simbench-1.5.1/simbench/simbench.egg-info/requires.txt +43 -0
- simbench-1.5.1/simbench/simbench.egg-info/top_level.txt +3 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_auxiliary.py +12 -10
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_csv_pp_converter.py +9 -5
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_pp_net_manipulation.py +5 -1
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_voltLvl.py +3 -3
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/networks/test_extract_grids_from_csv.py +3 -3
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/networks/test_profiles.py +4 -4
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/networks/test_simbench_code.py +2 -2
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/networks/test_simbench_loadcases.py +1 -1
- simbench-1.4.0/.github/workflows/github_test_action.yml +0 -53
- simbench-1.4.0/.github/workflows/release.yml +0 -112
- simbench-1.4.0/setup.py +0 -55
- simbench-1.4.0/simbench/__init__.py +0 -12
- simbench-1.4.0/simbench.egg-info/requires.txt +0 -18
- simbench-1.4.0/simbench.egg-info/top_level.txt +0 -1
- {simbench-1.4.0 → simbench-1.5.1}/AUTHORS +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/LICENSE +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/MANIFEST.in +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/requirements.txt +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/converter/__init__.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Coordinates.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/ExternalNet.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Line.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/LineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Load.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/LoadProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Measurement.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Node.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/PowerPlant.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/PowerPlantProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/RES.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/RESProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/StudyCases.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Substation.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Switch.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/Transformer.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-0-sw/TransformerType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Coordinates.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/DCLineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/ExternalNet.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Line.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/LineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Load.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/LoadProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Measurement.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Node.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/PowerPlant.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/PowerPlantProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/RES.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/RESProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Storage.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/StorageProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/StudyCases.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Substation.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Switch.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/Transformer.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-1-sw/TransformerType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Coordinates.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/DCLineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/ExternalNet.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Line.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/LineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Load.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/LoadProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Measurement.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Node.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/PowerPlant.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/PowerPlantProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/RES.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/RESProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Storage.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/StorageProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/StudyCases.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Substation.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Switch.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/Transformer.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/1-complete_data-mixed-all-2-sw/TransformerType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/__init__.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/networks/loadcases.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1/simbench}/simbench.egg-info/dependency_links.txt +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/__init__.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/__init__.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Coordinates.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/DCLineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/ExternalNet.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Line.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/LineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Load.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/LoadProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Measurement.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Node.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/PowerPlant.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/PowerPlantProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/RES.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/RESProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Shunt.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Storage.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/StorageProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/StudyCases.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Substation.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Switch.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/Transformer.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network/TransformerType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Coordinates.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/DCLineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/ExternalNet.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Line.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/LineType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Load.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/LoadProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Measurement.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Node.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/PowerPlant.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/PowerPlantProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/RES.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/RESProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Shunt.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Storage.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/StorageProfile.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/StudyCases.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Substation.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Switch.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/Transformer.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/converter/test_network_output_folder/TransformerType.csv +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/networks/__init__.py +0 -0
- {simbench-1.4.0 → simbench-1.5.1}/simbench/test/run_tests.py +0 -0
|
@@ -12,6 +12,7 @@ from copy import deepcopy
|
|
|
12
12
|
from packaging import version
|
|
13
13
|
import pandapower as pp
|
|
14
14
|
from pandapower.plotting import create_generic_coordinates
|
|
15
|
+
import warnings
|
|
15
16
|
|
|
16
17
|
try:
|
|
17
18
|
import pandaplan.core.pplog as logging
|
|
@@ -124,7 +125,7 @@ def csv_data2pp(csv_data):
|
|
|
124
125
|
_multi_parameter_determination(csv_data)
|
|
125
126
|
_convert_elements_and_types(csv_data, net)
|
|
126
127
|
create_branch_switches(net)
|
|
127
|
-
net.bus.
|
|
128
|
+
net.bus.loc[net.bus.type == "multi_auxiliary", "type"] = "auxiliary"
|
|
128
129
|
_set_vm_setpoint_to_trafos(net, csv_data)
|
|
129
130
|
_csv_types_to_pp2(net)
|
|
130
131
|
ensure_bus_index_columns_as_int(net)
|
|
@@ -235,7 +236,7 @@ def pp2csv_data(net1, export_pp_std_types=False, drop_inactive_elements=True,
|
|
|
235
236
|
if net.bus.shape[0] and not net.bus_geodata.shape[0] or (
|
|
236
237
|
net.bus_geodata.shape[0] != net.bus.shape[0]):
|
|
237
238
|
logger.info("Since there are no or incomplete bus_geodata, generic geodata are assumed.")
|
|
238
|
-
net.bus_geodata
|
|
239
|
+
net.bus_geodata = net.bus_geodata.iloc[0:0]
|
|
239
240
|
create_generic_coordinates(net)
|
|
240
241
|
merge_busbar_coordinates(net)
|
|
241
242
|
move_slack_gens_to_ext_grid(net)
|
|
@@ -296,7 +297,7 @@ def pp2csv_data(net1, export_pp_std_types=False, drop_inactive_elements=True,
|
|
|
296
297
|
def _round_qLoad_by_voltLvl(csv_data):
|
|
297
298
|
for voltLvl, decimals in zip([2, 4, 6, 7], [2, 3, 4, 6]):
|
|
298
299
|
this_voltLvl = csv_data["Load"].voltLvl <= voltLvl
|
|
299
|
-
csv_data["Load"]["qLoad"]
|
|
300
|
+
csv_data["Load"].loc[this_voltLvl, "qLoad"] = np.around(csv_data["Load"]["qLoad"].loc[
|
|
300
301
|
this_voltLvl].values, decimals)
|
|
301
302
|
|
|
302
303
|
|
|
@@ -327,16 +328,16 @@ def convert_node_type(data):
|
|
|
327
328
|
full_names = {"b": "busbar", "m": "muffe", "n": "node", "db": "double busbar"}
|
|
328
329
|
for short, long in full_names.items():
|
|
329
330
|
fit = data["bus"].type == short
|
|
330
|
-
data["bus"].
|
|
331
|
+
data["bus"].loc[fit, "type"] = long
|
|
331
332
|
else:
|
|
332
333
|
not_auxiliary = ~data["Node"].type.str.contains("auxiliary")
|
|
333
334
|
if sum(not_auxiliary):
|
|
334
335
|
space_split = data["Node"].type[not_auxiliary].str.split(" ", expand=True)
|
|
335
336
|
if 1 in space_split.columns:
|
|
336
|
-
data["Node"].
|
|
337
|
+
data["Node"].loc[not_auxiliary, "type"] = space_split[0].str[0] + \
|
|
337
338
|
space_split[1].str[0].fillna("")
|
|
338
339
|
else:
|
|
339
|
-
data["Node"].
|
|
340
|
+
data["Node"].loc[not_auxiliary, "type"] = space_split[0].str[0]
|
|
340
341
|
|
|
341
342
|
|
|
342
343
|
def convert_line_type_acronym(data):
|
|
@@ -356,9 +357,10 @@ def convert_line_type_acronym(data):
|
|
|
356
357
|
def _convert_measurement(data):
|
|
357
358
|
""" Converts the measurement columns "side", "element", "measurement_type", respectively
|
|
358
359
|
"element1", "element2", "variable". """
|
|
359
|
-
rename_dict = {"side": "element1", "element": "element2", "measurement_type": "variable"}
|
|
360
360
|
if _is_pp_type(data):
|
|
361
|
-
|
|
361
|
+
rename_dict = {"side": "element1", "measurement_type": "variable"}
|
|
362
|
+
data["measurement"] = data["measurement"].rename(columns=rename_dict)
|
|
363
|
+
data["measurement"]["element2"] = ""
|
|
362
364
|
for element_type in ["trafo", "line", "bus"]:
|
|
363
365
|
idx = data["measurement"].index[data["measurement"]["element_type"] == element_type]
|
|
364
366
|
if element_type in ["trafo", "line"]:
|
|
@@ -366,19 +368,20 @@ def _convert_measurement(data):
|
|
|
366
368
|
for side in this_branch_measurements["element1"].unique():
|
|
367
369
|
idx_side = this_branch_measurements.index[
|
|
368
370
|
this_branch_measurements["element1"] == side]
|
|
369
|
-
data["measurement"]["element1"]
|
|
370
|
-
element_type][side+"_bus"].loc[data["measurement"]["
|
|
371
|
+
data["measurement"].loc[idx_side, "element1"] = data.bus.name.loc[data[
|
|
372
|
+
element_type][side+"_bus"].loc[data["measurement"]["element"].loc[
|
|
371
373
|
idx_side]]].values
|
|
372
|
-
data["measurement"]["element2"]
|
|
373
|
-
"measurement"]["
|
|
374
|
+
data["measurement"].loc[idx, "element2"] = data[element_type].name.loc[data[
|
|
375
|
+
"measurement"]["element"].loc[idx]].values
|
|
374
376
|
else:
|
|
375
|
-
data["measurement"]["element1"]
|
|
376
|
-
"
|
|
377
|
-
|
|
377
|
+
data["measurement"].loc[idx, "element1"] = data.bus.name.loc[data["measurement"][
|
|
378
|
+
"element"][idx]].values
|
|
379
|
+
del data["measurement"]["element"]
|
|
378
380
|
else:
|
|
381
|
+
rename_dict = {"element": "element2", "measurement_type": "variable"}
|
|
379
382
|
_sort_measurement_elements(data)
|
|
380
383
|
rename_dict = {y: x for x, y in rename_dict.items()}
|
|
381
|
-
data["Measurement"].rename(columns=rename_dict
|
|
384
|
+
data["Measurement"] = data["Measurement"].rename(columns=rename_dict)
|
|
382
385
|
|
|
383
386
|
# --- determine which measurement indices are which element type -> fill "element_type"
|
|
384
387
|
idx_trafo = data["Measurement"].index[data["Measurement"]["element"].isin(data[
|
|
@@ -394,24 +397,24 @@ def _convert_measurement(data):
|
|
|
394
397
|
"trafo names given in element2 which do not exist in the " +
|
|
395
398
|
"csv_data[element] table.")
|
|
396
399
|
data["Measurement"]["element_type"] = "bus"
|
|
397
|
-
data["Measurement"]["element_type"]
|
|
398
|
-
data["Measurement"]["element_type"]
|
|
400
|
+
data["Measurement"].loc[idx_trafo, "element_type"] = "trafo"
|
|
401
|
+
data["Measurement"].loc[idx_line, "element_type"] = "line"
|
|
399
402
|
|
|
400
403
|
# --- fill "element" column
|
|
401
|
-
data["Measurement"]["element"]
|
|
404
|
+
data["Measurement"].loc[idx_trafo, "element"] = data["Transformer"].index[
|
|
402
405
|
idx_in_2nd_array(data["Measurement"]["element"].loc[idx_trafo].values,
|
|
403
406
|
data["Transformer"]["id"].values)]
|
|
404
|
-
data["Measurement"]["element"]
|
|
407
|
+
data["Measurement"].loc[idx_line, "element"] = data["Line"].index[idx_in_2nd_array(
|
|
405
408
|
data["Measurement"]["element"].loc[idx_line].values, data["Line"]["id"].values)]
|
|
406
|
-
data["Measurement"]["element"]
|
|
407
|
-
data["Measurement"]["
|
|
409
|
+
data["Measurement"].loc[idx_bus, "element"] = data["Node"].index[idx_in_2nd_array(
|
|
410
|
+
data["Measurement"]["element1"].loc[idx_bus].values, data["Node"]["id"].values)]
|
|
408
411
|
|
|
409
412
|
# --- fill "side" column
|
|
410
413
|
bus_indices = data["Node"].index[idx_in_2nd_array(data["Measurement"][
|
|
411
|
-
"
|
|
414
|
+
"element1"].values, data["Node"]["id"].values)]
|
|
412
415
|
bus_names = pd.Series(data["Node"]["id"].loc[bus_indices].values,
|
|
413
416
|
index=data["Measurement"].index)
|
|
414
|
-
data["Measurement"]["side"] =
|
|
417
|
+
data["Measurement"]["side"] = ""
|
|
415
418
|
are_hv = ensure_iterability(bus_names.loc[idx_trafo].values == data[
|
|
416
419
|
"Transformer"]["nodeHV"].loc[data["Measurement"]["element"].loc[idx_trafo]].values)
|
|
417
420
|
data["Measurement"].loc[idx_trafo, "side"] = ["hv" if is_hv else "lv" for is_hv in are_hv]
|
|
@@ -419,6 +422,8 @@ def _convert_measurement(data):
|
|
|
419
422
|
"Line"]["nodeA"].loc[data["Measurement"]["element"].loc[idx_line]].values)
|
|
420
423
|
data["Measurement"].loc[idx_line, "side"] = ["from" if is_from else "to" for is_from in
|
|
421
424
|
are_from]
|
|
425
|
+
data["Measurement"].loc[data["Measurement"]["side"] == "", "side"] = None
|
|
426
|
+
del data["Measurement"]["element1"]
|
|
422
427
|
|
|
423
428
|
|
|
424
429
|
def _sort_measurement_elements(csv_data):
|
|
@@ -432,9 +437,9 @@ def _sort_measurement_elements(csv_data):
|
|
|
432
437
|
"indices: " + str(list(idx_both_is_node)))
|
|
433
438
|
|
|
434
439
|
el1_data = deepcopy(csv_data["Measurement"].element1[idx_el2_is_node])
|
|
435
|
-
csv_data["Measurement"].
|
|
440
|
+
csv_data["Measurement"].loc[idx_el2_is_node, "element1"] = csv_data["Measurement"].element2[
|
|
436
441
|
idx_el2_is_node]
|
|
437
|
-
csv_data["Measurement"].
|
|
442
|
+
csv_data["Measurement"].loc[idx_el2_is_node, "element2"] = el1_data
|
|
438
443
|
|
|
439
444
|
|
|
440
445
|
def _csv_profiles_to_pp(net, csv_data):
|
|
@@ -521,10 +526,10 @@ def _assume_cs_ohl_line_type(line_types_df):
|
|
|
521
526
|
# if "type" not line_types_df.columns:
|
|
522
527
|
# line_types_df["type"] = np.nan
|
|
523
528
|
is_null = line_types_df.type.isnull().values
|
|
524
|
-
line_types_df.
|
|
529
|
+
line_types_df.loc[line_types_df.index[is_null & is_cs], "type"] = "cs"
|
|
525
530
|
|
|
526
531
|
# assume all other types as ohl
|
|
527
|
-
line_types_df.type.fillna("ol"
|
|
532
|
+
line_types_df.type = line_types_df.type.fillna("ol")
|
|
528
533
|
|
|
529
534
|
|
|
530
535
|
def _pp_types_to_csv1(net, export_pp_std_types):
|
|
@@ -541,7 +546,7 @@ def _pp_types_to_csv1(net, export_pp_std_types):
|
|
|
541
546
|
else:
|
|
542
547
|
# if 'std_type' does not exist but 'type', here 'type' is renamed into 'std_type'
|
|
543
548
|
new_index_dict = {(i): (i if i != "type" else "std_type") for i in net[elm].columns}
|
|
544
|
-
net[elm].rename(columns=new_index_dict
|
|
549
|
+
net[elm].rename = net[elm].rename(columns=new_index_dict)
|
|
545
550
|
|
|
546
551
|
# --- add new std_types to line, trafo, trafo3w, storage and dcline tables if missing
|
|
547
552
|
type_params = {
|
|
@@ -558,7 +563,7 @@ def _pp_types_to_csv1(net, export_pp_std_types):
|
|
|
558
563
|
uni_dupl_dict = get_unique_duplicated_dict(elms_without_type, subset=type_params[elm])
|
|
559
564
|
for uni, dupl in uni_dupl_dict.items():
|
|
560
565
|
new_typename = net[elm].name.loc[uni] + '_type'
|
|
561
|
-
net[elm].
|
|
566
|
+
net[elm].loc[[uni]+dupl, "std_type"] = new_typename
|
|
562
567
|
if elm in ["line", "trafo", "trafo3w"]:
|
|
563
568
|
pp.create_std_type(net, dict(net[elm].loc[uni, type_params[elm]].T), new_typename,
|
|
564
569
|
element=elm, overwrite=False)
|
|
@@ -576,7 +581,7 @@ def _pp_types_to_csv1(net, export_pp_std_types):
|
|
|
576
581
|
typenames2convert = set(net.std_types[elm].keys()) - unused_pp_typenames
|
|
577
582
|
net.std_types[elm] = pd.DataFrame(net.std_types[elm]).T.loc[list(
|
|
578
583
|
typenames2convert)].reset_index()
|
|
579
|
-
net.std_types[elm].rename(columns={"index": "std_type"}
|
|
584
|
+
net.std_types[elm] = net.std_types[elm].rename(columns={"index": "std_type"})
|
|
580
585
|
|
|
581
586
|
convert_line_type_acronym(net)
|
|
582
587
|
|
|
@@ -738,7 +743,7 @@ def _rename_and_multiply_columns(data):
|
|
|
738
743
|
elif y in nan_columns: # rename if the column exists with only nan values
|
|
739
744
|
to_rename_dict[x] = y
|
|
740
745
|
del data[corr_str][y]
|
|
741
|
-
data[corr_str].rename(columns=to_rename_dict
|
|
746
|
+
data[corr_str] = data[corr_str].rename(columns=to_rename_dict)
|
|
742
747
|
|
|
743
748
|
# --- multiply
|
|
744
749
|
to_multiply = pd.DataFrame([(y, m) for _, y, m in ordered_tuples if not pd.isnull(m) and
|
|
@@ -759,7 +764,7 @@ def _get_parameters_to_rename_and_multiply():
|
|
|
759
764
|
_extend_pandapower_net_columns(dummy_net)
|
|
760
765
|
_prepare_res_bus_table(dummy_net)
|
|
761
766
|
for elm in ["dcline"]:
|
|
762
|
-
dummy_net[elm].rename(columns={"type": "std_type"}
|
|
767
|
+
dummy_net[elm] = dummy_net[elm].rename(columns={"type": "std_type"})
|
|
763
768
|
for elm in ["gen", "sgen"]:
|
|
764
769
|
dummy_net[elm]["vm_pu"] = np.nan
|
|
765
770
|
dummy_net[elm]["va_degree"] = np.nan
|
|
@@ -831,7 +836,7 @@ def _merge_dcline_and_storage_type_and_element_data(input_data):
|
|
|
831
836
|
input_data[corr_str].columns.union(Type_col_except_std_type), axis=1)
|
|
832
837
|
input_data[corr_str].loc[:, Type_col_except_std_type] = input_data[corr_str_type].loc[
|
|
833
838
|
idx_type, Type_col_except_std_type].values
|
|
834
|
-
input_data[corr_str_type]
|
|
839
|
+
input_data[corr_str_type] = input_data[corr_str_type].iloc[0:0]
|
|
835
840
|
|
|
836
841
|
|
|
837
842
|
def _copy_data(input_data, output_data):
|
|
@@ -843,9 +848,16 @@ def _copy_data(input_data, output_data):
|
|
|
843
848
|
|
|
844
849
|
for corr_str, output_name in zip(corr_strings, output_names):
|
|
845
850
|
if corr_str in input_data.keys() and input_data[corr_str].shape[0]:
|
|
846
|
-
cols_to_copy = list(
|
|
847
|
-
|
|
848
|
-
|
|
851
|
+
cols_to_copy = list(
|
|
852
|
+
set(output_data[output_name].columns) &
|
|
853
|
+
set(input_data[corr_str].columns[~input_data[corr_str].isnull().all()]))
|
|
854
|
+
if pd.__version__.startswith("2.2."):
|
|
855
|
+
with warnings.catch_warnings():
|
|
856
|
+
warnings.simplefilter(action='ignore', category=FutureWarning)
|
|
857
|
+
output_data[output_name] = pd.concat([output_data[output_name], input_data[
|
|
858
|
+
corr_str][cols_to_copy]], ignore_index=True, sort=False).reindex(
|
|
859
|
+
columns=output_data[output_name].columns)
|
|
860
|
+
elif version.parse(pd.__version__) >= version.parse("0.23.0"):
|
|
849
861
|
output_data[output_name] = pd.concat([output_data[output_name], input_data[
|
|
850
862
|
corr_str][cols_to_copy]], ignore_index=True, sort=False).reindex(
|
|
851
863
|
columns=output_data[output_name].columns)
|
|
@@ -300,4 +300,4 @@ def _correct_calc_type(csv_data):
|
|
|
300
300
|
if csv_data[tablename].shape[0]:
|
|
301
301
|
for miss, corr in zip(misspelled, correct):
|
|
302
302
|
is_miss = csv_data[tablename].calc_type.isin(miss)
|
|
303
|
-
csv_data[tablename].
|
|
303
|
+
csv_data[tablename].loc[is_miss, "calc_type"] = corr
|
|
@@ -101,32 +101,30 @@ def convert_parallel_branches(net, multiple_entries=True, elm_to_convert=["line"
|
|
|
101
101
|
|
|
102
102
|
while len(parallels):
|
|
103
103
|
|
|
104
|
-
n_elm = net[element].shape[0]
|
|
105
|
-
|
|
106
104
|
# add parallel elements
|
|
107
|
-
net[element].
|
|
105
|
+
net[element].loc[parallels, "parallel"] -= 1
|
|
108
106
|
elm_to_append = net[element].loc[parallels]
|
|
109
107
|
parallels_in_res = parallels[parallels.isin(net["res_"+element].index)]
|
|
110
108
|
res_elm_to_append = net["res_"+element].loc[parallels_in_res]
|
|
111
109
|
elm_to_append["parallel"] = 1
|
|
112
110
|
num_par = list(net[element].parallel.loc[parallels])
|
|
113
111
|
elm_to_append["name"] += [("_" + str(num)) for num in num_par]
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
net["res_"+element] = pd.concat([net["res_"+element],
|
|
118
|
-
pd.
|
|
119
|
-
ignore_index=True)
|
|
112
|
+
max_idx = net[element].index.max()
|
|
113
|
+
net[element] = pd.concat([net[element], elm_to_append.set_index(pd.Index(range(
|
|
114
|
+
max_idx+1, max_idx+1+len(elm_to_append))))])
|
|
115
|
+
net["res_"+element] = pd.concat([net["res_"+element], res_elm_to_append.set_index(
|
|
116
|
+
pd.Index(range(max_idx+1, max_idx+1+len(res_elm_to_append))))])
|
|
120
117
|
|
|
121
118
|
# add parallel switches
|
|
122
119
|
for i, par in enumerate(parallels):
|
|
123
120
|
sw_to_append = net.switch.loc[(net.switch.element == par) & (
|
|
124
121
|
net.switch.et == element[0])] # does not work for trafo3w
|
|
125
|
-
sw_to_append["element"] =
|
|
122
|
+
sw_to_append["element"] = max_idx + 1 + i
|
|
126
123
|
sw_to_append["name"] += "_" + str(num_par[i])
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
max_sw_idx = net.switch.index.max()
|
|
125
|
+
net["switch"] = pd.concat([net["switch"], sw_to_append.set_index(
|
|
126
|
+
pd.Index(range(max_sw_idx+1, max_sw_idx+1+len(sw_to_append))))])
|
|
127
|
+
|
|
130
128
|
# update parallels
|
|
131
129
|
parallels = net[element].index[net[element].parallel > 1]
|
|
132
130
|
|
|
@@ -136,8 +134,8 @@ def convert_parallel_branches(net, multiple_entries=True, elm_to_convert=["line"
|
|
|
136
134
|
if element == "line":
|
|
137
135
|
branches = deepcopy(net[element])
|
|
138
136
|
swap = branches.from_bus.values > branches.to_bus.values
|
|
139
|
-
branches.
|
|
140
|
-
branches.
|
|
137
|
+
branches.loc[swap, "from_bus"] = net[element].to_bus.loc[swap]
|
|
138
|
+
branches.loc[swap, "to_bus"] = net[element].from_bus.loc[swap]
|
|
141
139
|
else:
|
|
142
140
|
branches = net[element]
|
|
143
141
|
|
|
@@ -178,9 +176,9 @@ def convert_parallel_branches(net, multiple_entries=True, elm_to_convert=["line"
|
|
|
178
176
|
# drop parallel/duplicated branches if the switches do not differ
|
|
179
177
|
if not switches_differ:
|
|
180
178
|
# drop duplicated elements
|
|
181
|
-
net[element].
|
|
182
|
-
net[element].drop(idx
|
|
183
|
-
net["switch"].drop(switch_dupl
|
|
179
|
+
net[element].loc[orig.name, "parallel"] += elm.parallel
|
|
180
|
+
net[element] = net[element].drop(idx)
|
|
181
|
+
net["switch"] = net["switch"].drop(switch_dupl)
|
|
184
182
|
|
|
185
183
|
|
|
186
184
|
def merge_busbar_coordinates(net):
|
|
@@ -193,8 +191,8 @@ def merge_busbar_coordinates(net):
|
|
|
193
191
|
continue
|
|
194
192
|
connected_nodes = pp.get_connected_buses(net, bb_node, consider=("t", "s"))
|
|
195
193
|
if len(connected_nodes):
|
|
196
|
-
net.bus_geodata.
|
|
197
|
-
net.bus_geodata.
|
|
194
|
+
net.bus_geodata.loc[list(connected_nodes), "x"] = net.bus_geodata.x.at[bb_node]
|
|
195
|
+
net.bus_geodata.loc[list(connected_nodes), "y"] = net.bus_geodata.y.at[bb_node]
|
|
198
196
|
all_connected_buses |= connected_nodes
|
|
199
197
|
|
|
200
198
|
|
|
@@ -208,7 +206,7 @@ def provide_subnet_col(net):
|
|
|
208
206
|
# copy zone to subnet
|
|
209
207
|
net.bus["subnet"] = net.bus.zone
|
|
210
208
|
else: # fill subnet nan values with zone
|
|
211
|
-
net.bus.
|
|
209
|
+
net.bus.loc[net.bus.subnet.isnull(), "subnet"] = net.bus.zone.loc[net.bus.subnet.isnull()]
|
|
212
210
|
|
|
213
211
|
# --- for all elements: if subnet is not avialable but zone, take it from zone.
|
|
214
212
|
for element in net.keys():
|
|
@@ -230,12 +228,12 @@ def provide_subnet_col(net):
|
|
|
230
228
|
|
|
231
229
|
# --- at trafo switches: use subnet from trafo instead of the bus subnet data:
|
|
232
230
|
trafo_sw = net.switch.index[net.switch.et == "t"]
|
|
233
|
-
net.switch.
|
|
231
|
+
net.switch.loc[trafo_sw, "subnet"] = net.trafo.subnet.loc[net.switch.element.loc[trafo_sw]].values
|
|
234
232
|
|
|
235
233
|
# --- at measurements: use branch subnet instead of bus subnet data:
|
|
236
234
|
for branch_type in ["line", "trafo"]:
|
|
237
235
|
meas = net.measurement.index[net.measurement.element_type == branch_type]
|
|
238
|
-
net.measurement.
|
|
236
|
+
net.measurement.loc[meas, "subnet"] = net[branch_type].subnet.loc[net.measurement.element.loc[
|
|
239
237
|
meas]].values
|
|
240
238
|
|
|
241
239
|
|
|
@@ -247,7 +245,7 @@ def provide_voltLvl_col(net):
|
|
|
247
245
|
net.bus["voltLvl"] = get_voltlvl(net.bus.vn_kv)
|
|
248
246
|
else: # fill voltLvl nan values with vn_kv information
|
|
249
247
|
idx_nan = net.bus.index[net.bus.voltLvl.isnull()]
|
|
250
|
-
net.bus.
|
|
248
|
+
net.bus.loc[idx_nan, "voltLvl"] = get_voltlvl(net.bus.vn_kv.loc[idx_nan])
|
|
251
249
|
|
|
252
250
|
# --- provide voltLvl parameters for all elements
|
|
253
251
|
# add voltLvl column from node to all elements but "trafo"
|
|
@@ -286,12 +284,12 @@ def _add_dspf_calc_type_and_phys_type_columns(net):
|
|
|
286
284
|
net[gen_table]["slack_weight"] = 1/net[gen_table].shape[0]
|
|
287
285
|
else:
|
|
288
286
|
net[gen_table]["slack_weight"] = 0
|
|
289
|
-
net[gen_table].rename(columns={"slack_weight": "dspf"}
|
|
287
|
+
net[gen_table] = net[gen_table].rename(columns={"slack_weight": "dspf"})
|
|
290
288
|
if phys_type is not None:
|
|
291
289
|
if "phys_type" not in net[gen_table].columns:
|
|
292
290
|
net[gen_table]["phys_type"] = phys_type
|
|
293
291
|
else:
|
|
294
|
-
net[gen_table]
|
|
292
|
+
net[gen_table].loc[net[gen_table]["phys_type"].isnull(), "phys_type"] = phys_type
|
|
295
293
|
net[gen_table]["calc_type"] = calc_type
|
|
296
294
|
|
|
297
295
|
|
|
@@ -324,6 +322,10 @@ def _replace_buses_connected_to_busbars(net, buses):
|
|
|
324
322
|
def _add_vm_va_setpoints_to_buses(net):
|
|
325
323
|
""" Adds "vmSetp" and "vaSetp" to pp net bus table and removes vm_pu from net.ext_grid,
|
|
326
324
|
net.gen and net.sgen. """
|
|
325
|
+
try:
|
|
326
|
+
pd.set_option('future.no_silent_downcasting', True)
|
|
327
|
+
except:
|
|
328
|
+
pass
|
|
327
329
|
net.bus.loc[net.ext_grid.bus, "vmSetp"] = net.ext_grid.vm_pu.values
|
|
328
330
|
net.bus.loc[net.ext_grid.bus, "vaSetp"] = net.ext_grid.va_degree.values
|
|
329
331
|
for elm, bus_type, param in zip(
|
|
@@ -333,13 +335,13 @@ def _add_vm_va_setpoints_to_buses(net):
|
|
|
333
335
|
if "trafo" not in elm:
|
|
334
336
|
buses = net[elm][bus_type]
|
|
335
337
|
else:
|
|
336
|
-
autotap_trafos = net[elm].autoTap
|
|
337
|
-
autoTapSide = net[elm].autoTapSide
|
|
338
|
+
autotap_trafos = _as_bool_filled_na(net[elm].autoTap)
|
|
339
|
+
autoTapSide = _as_bool_filled_na(net[elm].autoTapSide)
|
|
338
340
|
if not all(autotap_trafos == autoTapSide):
|
|
339
341
|
logger.warning("'autotap_trafos' is not equal to 'autoTapSide'. \n" +
|
|
340
342
|
"'autotap_trafos.sum()' is %i, " % autotap_trafos.sum() +
|
|
341
343
|
"'autoTapSide.sum()' is %i" % autoTapSide.sum())
|
|
342
|
-
autoTapSetp = net[elm].autoTapSetp
|
|
344
|
+
autoTapSetp = _as_bool_filled_na(net[elm].autoTapSetp)
|
|
343
345
|
if not all(autotap_trafos == autoTapSetp):
|
|
344
346
|
logger.warning("'autotap_trafos' is not equal to 'autoTapSetp'. \n" +
|
|
345
347
|
"'autotap_trafos.sum()' is %i, " % autotap_trafos.sum() +
|
|
@@ -354,7 +356,7 @@ def _add_vm_va_setpoints_to_buses(net):
|
|
|
354
356
|
buses = _replace_buses_connected_to_busbars(net, buses)
|
|
355
357
|
no_vm = pd.isnull(net.bus.loc[buses, "vmSetp"]).values
|
|
356
358
|
net.bus.loc[buses.loc[no_vm], "vmSetp"] = net[elm][param].loc[
|
|
357
|
-
buses.index[no_vm]].values
|
|
359
|
+
buses.index[no_vm]].values.astype(float)
|
|
358
360
|
if sum(~no_vm):
|
|
359
361
|
logger.debug("At buses " + str(list(buses.loc[~no_vm])) + " %s " % elm +
|
|
360
362
|
"have a vm setpoint which is not considered, since another element " +
|
|
@@ -366,12 +368,20 @@ def _add_vm_va_setpoints_to_buses(net):
|
|
|
366
368
|
del net[elm]["vm_pu"]
|
|
367
369
|
|
|
368
370
|
|
|
371
|
+
def _as_bool_filled_na(ser):
|
|
372
|
+
isn = ser.isnull()
|
|
373
|
+
out = ser.astype(bool)
|
|
374
|
+
out.loc[isn] = False
|
|
375
|
+
return out
|
|
376
|
+
|
|
377
|
+
|
|
369
378
|
def _set_vm_setpoint_to_trafos(net, csv_data):
|
|
370
379
|
""" Adds 'autoTapSetp' to trafo and trafo3w tables. """
|
|
371
380
|
for elm in ["trafo", "trafo3w"]:
|
|
372
381
|
if "autoTap" in net[elm] and "autoTapSide" in net[elm]:
|
|
373
|
-
autotap_trafos = net[elm].autoTap
|
|
374
|
-
|
|
382
|
+
autotap_trafos = _as_bool_filled_na(net[elm].autoTap)
|
|
383
|
+
autoTapSide = _as_bool_filled_na(net[elm].autoTapSide)
|
|
384
|
+
assert all(autotap_trafos == autoTapSide)
|
|
375
385
|
if sum(autotap_trafos):
|
|
376
386
|
bus_type = net[elm].autoTapSide.loc[autotap_trafos].str.lower() + "_bus"
|
|
377
387
|
bus_type_col_idx = column_indices(net[elm], bus_type)
|
|
@@ -420,9 +430,9 @@ def replace_branch_switches(net, reserved_aux_node_names=None):
|
|
|
420
430
|
geodata=geodata, zone=subnets)
|
|
421
431
|
for col in ["min_vm_pu", "max_vm_pu", "substation", "voltLvl"]:
|
|
422
432
|
if col in net.bus.columns:
|
|
423
|
-
net.bus
|
|
433
|
+
net.bus.loc[aux_buses, col] = net.bus[col][idx_bus].values
|
|
424
434
|
if "subnet" in net.bus.columns:
|
|
425
|
-
net.bus.
|
|
435
|
+
net.bus.loc[aux_buses, "subnet"] = subnets
|
|
426
436
|
assert len(idx_bus) == len(aux_buses)
|
|
427
437
|
|
|
428
438
|
# --- replace branch bus by new auxiliary node
|
|
@@ -434,15 +444,17 @@ def replace_branch_switches(net, reserved_aux_node_names=None):
|
|
|
434
444
|
# is_first_bus_type == hv_bus resp. from_bus
|
|
435
445
|
pos_in_aux_buses = idx_in_2nd_array(np.array(idx_b_sw[is_first_bus_type]),
|
|
436
446
|
np.array(idx_t_sw.union(idx_l_sw)))
|
|
437
|
-
net[branch]
|
|
447
|
+
net[branch].loc[idx_elm[is_first_bus_type], bus_types[0]] = \
|
|
448
|
+
aux_buses[pos_in_aux_buses].astype(net[branch][bus_types[0]].dtype)
|
|
438
449
|
# ~is_first_bus_type == lv_bus resp. to_bus
|
|
439
450
|
pos_in_aux_buses = idx_in_2nd_array(np.array(idx_b_sw[~is_first_bus_type]),
|
|
440
451
|
np.array(idx_t_sw.union(idx_l_sw)))
|
|
441
|
-
net[branch]
|
|
452
|
+
net[branch].loc[idx_elm[~is_first_bus_type], bus_types[1]] = \
|
|
453
|
+
aux_buses[pos_in_aux_buses].astype(net[branch][bus_types[1]].dtype)
|
|
442
454
|
|
|
443
455
|
# --- replace switch element by new auxiliary nodes
|
|
444
|
-
net.switch.
|
|
445
|
-
net.switch.
|
|
456
|
+
net.switch.loc[idx_t_sw.union(idx_l_sw), "element"] = aux_buses.astype(net.switch["element"].dtype)
|
|
457
|
+
net.switch.loc[idx_t_sw.union(idx_l_sw), "et"] = "b"
|
|
446
458
|
|
|
447
459
|
return reserved_aux_node_names
|
|
448
460
|
|
|
@@ -475,38 +487,38 @@ def create_branch_switches(net):
|
|
|
475
487
|
current_branch_bus_type_buses = net[branch][bus_type].astype(int)
|
|
476
488
|
aux_buses_are_cbbtb = aux_bus_df["aux_buses"].isin(current_branch_bus_type_buses)
|
|
477
489
|
current_branch_bus_types_aux_buses = aux_bus_df["aux_buses"][aux_buses_are_cbbtb].values
|
|
478
|
-
aux_bus_df["element"]
|
|
490
|
+
aux_bus_df.loc[aux_buses_are_cbbtb, "element"] = current_branch_bus_type_buses.index[
|
|
479
491
|
idx_in_2nd_array(current_branch_bus_types_aux_buses,
|
|
480
492
|
current_branch_bus_type_buses.values)] # requirement: only one
|
|
481
493
|
# switch per aux bus
|
|
482
|
-
aux_bus_df["et"]
|
|
494
|
+
aux_bus_df.loc[aux_buses_are_cbbtb, "et"] = branch[0]
|
|
483
495
|
|
|
484
496
|
# replace auxiliary buses in line and trafo tables
|
|
485
|
-
net[branch]
|
|
497
|
+
net[branch].loc[aux_bus_df["element"].loc[aux_buses_are_cbbtb], bus_type] = aux_bus_df[
|
|
486
498
|
"connected_buses"].loc[aux_buses_are_cbbtb].values
|
|
487
499
|
|
|
488
500
|
if pd.isnull(aux_bus_df).any().any():
|
|
489
501
|
logger.error("Auxiliary bus replacement fails.")
|
|
490
502
|
|
|
491
503
|
# replace auxiliary buses in switch table by branch elements
|
|
492
|
-
net.switch
|
|
493
|
-
net.switch
|
|
504
|
+
net.switch.loc[aux_bus_df["idx_switch"], "et"] = aux_bus_df["et"].values
|
|
505
|
+
net.switch.loc[aux_bus_df["idx_switch"], "element"] = np.array(
|
|
494
506
|
aux_bus_df["element"].values, dtype=int)
|
|
495
507
|
|
|
496
508
|
# drop all auxiliary buses
|
|
497
|
-
net.bus.drop(aux_bus_df["aux_buses"]
|
|
509
|
+
net.bus = net.bus.drop(aux_bus_df["aux_buses"])
|
|
498
510
|
idx_in_res_bus = aux_bus_df["aux_buses"][aux_bus_df["aux_buses"].isin(net.res_bus.index)]
|
|
499
|
-
net.res_bus.drop(idx_in_res_bus
|
|
511
|
+
net.res_bus = net.res_bus.drop(idx_in_res_bus)
|
|
500
512
|
idx_in_bus_geodata = aux_bus_df["aux_buses"][aux_bus_df["aux_buses"].isin(
|
|
501
513
|
net.bus_geodata.index)]
|
|
502
|
-
net.bus_geodata.drop(idx_in_bus_geodata
|
|
514
|
+
net.bus_geodata = net.bus_geodata.drop(idx_in_bus_geodata)
|
|
503
515
|
|
|
504
516
|
|
|
505
517
|
def _add_coordID(net, highest_existing_coordinate_number):
|
|
506
518
|
""" adds "id", "subnet" and "voltLvl" to net.bus_geodata, "coordID" to net.bus and
|
|
507
519
|
returns an unique coordinate table. """
|
|
508
520
|
|
|
509
|
-
net.bus_geodata.dropna(how="all"
|
|
521
|
+
net.bus_geodata = net.bus_geodata.dropna(how="all")
|
|
510
522
|
|
|
511
523
|
# add "subnet" column to net.bus_geodata
|
|
512
524
|
net.bus_geodata["subnet"] = net.bus["subnet"]
|
|
@@ -520,13 +532,13 @@ def _add_coordID(net, highest_existing_coordinate_number):
|
|
|
520
532
|
net.bus_geodata["voltLvl"] = net.bus["voltLvl"]
|
|
521
533
|
|
|
522
534
|
# add "id" column to net.bus_geodata
|
|
523
|
-
net.bus_geodata["id"] =
|
|
524
|
-
net.bus_geodata.
|
|
535
|
+
net.bus_geodata["id"] = ""
|
|
536
|
+
net.bus_geodata.loc[uniq, "id"] = ["coord_%i" % i for i in range(
|
|
525
537
|
highest_existing_coordinate_number+1, highest_existing_coordinate_number+1+len(uniq))]
|
|
526
538
|
|
|
527
539
|
# correct bus_geodata of duplicated entries
|
|
528
540
|
for uni, dupl in uniq_dupl_dict.items():
|
|
529
|
-
net.bus_geodata.
|
|
541
|
+
net.bus_geodata.loc[dupl, "id"] = net.bus_geodata.id.loc[uni]
|
|
530
542
|
|
|
531
543
|
# copy new column "id" to net.bus["coordID"] - used in conversion process of pp2csv_data()
|
|
532
544
|
net.bus["coordID"] = net.bus_geodata.id
|
|
@@ -548,13 +560,13 @@ def move_slack_gens_to_ext_grid(net):
|
|
|
548
560
|
slacks = deepcopy(net.gen.loc[idx_slack])
|
|
549
561
|
slacks["va_degree"] = 0
|
|
550
562
|
slack_col_to_remove = [col for col in ["slack", "scaling"] if col in slacks.columns]
|
|
551
|
-
slacks.drop(columns=slack_col_to_remove
|
|
563
|
+
slacks = slacks.drop(columns=slack_col_to_remove)
|
|
552
564
|
ext_grid_col_to_set = [("controllable", True)]
|
|
553
565
|
for col_to_set in ext_grid_col_to_set:
|
|
554
566
|
if col_to_set[0] not in net.ext_grid.columns and col_to_set[0] in slacks.columns:
|
|
555
567
|
net.ext_grid[col_to_set[0]] = col_to_set[1]
|
|
556
568
|
net["ext_grid"] = pd.concat([net["ext_grid"], slacks], ignore_index=True)
|
|
557
|
-
net.gen.drop(idx_slack
|
|
569
|
+
net.gen = net.gen.drop(idx_slack)
|
|
558
570
|
|
|
559
571
|
|
|
560
572
|
def ensure_bus_index_columns_as_int(net):
|
|
@@ -161,13 +161,13 @@ def write2csv(path, data, mode="w", sep=";", float_format='%g', keys=None, keep=
|
|
|
161
161
|
if len(duplicates) and "Type" not in i:
|
|
162
162
|
logger.info("Writing to table '%s', these duplicated names are " % i +
|
|
163
163
|
"dropped: " + str(['%s' % name for name in duplicates.id]))
|
|
164
|
-
d.drop(duplicates.index
|
|
165
|
-
d.replace("", "NULL").fillna("NULL").to_csv(this_path, sep, index=index,
|
|
164
|
+
d = d.drop(duplicates.index)
|
|
165
|
+
d.replace("", "NULL").fillna("NULL").to_csv(this_path, sep=sep, index=index,
|
|
166
166
|
float_format=float_format)
|
|
167
167
|
|
|
168
168
|
else:
|
|
169
169
|
d.replace("", "NULL").fillna("NULL").to_csv(
|
|
170
|
-
this_path, sep, mode=mod, index=index, float_format=float_format,
|
|
170
|
+
this_path, sep=sep, mode=mod, index=index, float_format=float_format,
|
|
171
171
|
header=(file_misses or mod == "w"))
|
|
172
172
|
|
|
173
173
|
# --- writing Profiles
|
|
@@ -182,4 +182,4 @@ def write2csv(path, data, mode="w", sep=";", float_format='%g', keys=None, keep=
|
|
|
182
182
|
d_prof = d_prof if nrows is None or d_prof.shape[0] <= nrows else \
|
|
183
183
|
d_prof.loc[:nrows-1]
|
|
184
184
|
d_prof.replace("", "NULL").fillna("NULL").to_csv(
|
|
185
|
-
this_path, sep, mode="w", index=False, float_format=float_format)
|
|
185
|
+
this_path, sep=sep, mode="w", index=False, float_format=float_format)
|
|
@@ -185,7 +185,7 @@ def all_voltlvl_idx(net, elms=None, include_empty_elms_dicts=False):
|
|
|
185
185
|
bus_types = ["hv_bus", "lv_bus"] if elm == "trafo" else [
|
|
186
186
|
"hv_bus", "mv_bus", "lv_bus"]
|
|
187
187
|
for idx in other:
|
|
188
|
-
voltage_values = net.bus.
|
|
188
|
+
voltage_values = net.bus.loc[net[elm][bus_types].loc[idx], "vn_kv"].values
|
|
189
189
|
key = "-".join(get_voltlvl(voltage_values).astype(str))
|
|
190
190
|
if key not in lvl_dicts[elm].keys():
|
|
191
191
|
lvl_dicts[elm][key] = set()
|