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
|
@@ -232,7 +232,7 @@ def _extract_csv_table_by_subnet(csv_table, tablename, relevant_subnets, bus_bus
|
|
|
232
232
|
|
|
233
233
|
# --- determine indices to drop and examine dropping
|
|
234
234
|
drop_idx = (set(csv_table.index) - hv_elms - lv_elms) | hv_lv_elms | lv_hv_elms
|
|
235
|
-
csv_table.drop(drop_idx
|
|
235
|
+
csv_table = csv_table.drop(drop_idx)
|
|
236
236
|
no_extraction = False
|
|
237
237
|
else:
|
|
238
238
|
no_extraction = "Profile" not in tablename and "Type" not in tablename and \
|
|
@@ -315,7 +315,7 @@ def generate_no_sw_variant(net):
|
|
|
315
315
|
already_considered |= to_fuse[bus1]
|
|
316
316
|
|
|
317
317
|
# drop all closed switches (which now also includes all bus-bus switches (see above))
|
|
318
|
-
net.switch.drop(net.switch.index[net.switch.closed]
|
|
318
|
+
net.switch = net.switch.drop(net.switch.index[net.switch.closed])
|
|
319
319
|
|
|
320
320
|
# fuse buses which are connected via bus-bus switches
|
|
321
321
|
for b1, b2 in to_fuse.items():
|
|
@@ -325,33 +325,40 @@ def generate_no_sw_variant(net):
|
|
|
325
325
|
aux_buses = net.bus.index[net.bus.type == "auxiliary"]
|
|
326
326
|
buses_at_sw = pd.concat([net.switch.bus, net.switch.element.loc[net.switch.et == "b"]])
|
|
327
327
|
aux_buses_to_change_type = aux_buses[~aux_buses.isin(buses_at_sw)]
|
|
328
|
-
net.bus.
|
|
328
|
+
net.bus.loc[aux_buses_to_change_type, "type"] = "b"
|
|
329
329
|
|
|
330
330
|
|
|
331
|
-
def get_simbench_net(sb_code_info, input_path=None):
|
|
332
|
-
"""
|
|
333
|
-
Returns the simbench net, requested by a given SimBench code information. Please have a look
|
|
331
|
+
def get_simbench_net(sb_code_info:str, input_path:str=None):
|
|
332
|
+
"""Returns the simbench net, requested by a given SimBench code information. Please have a look
|
|
334
333
|
into jupyter notebook tutorials to learn more about simbench grids and the meaning of SimBench
|
|
335
334
|
codes.
|
|
336
335
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
336
|
+
Parameters
|
|
337
|
+
----------
|
|
338
|
+
sb_code_info : str or list
|
|
339
|
+
simbench code information which defines which simbench grid is requested.
|
|
340
|
+
For example, e.g. :code:`'1-MVLV-urban-all-0-sw'` requests a grid with the urban MV grid and
|
|
341
|
+
all connected LV grids, both of SimBench version 1, scenario zero and with full switch
|
|
341
342
|
representation.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
343
|
+
As an alternative :code:`[1, "MV", "LV", "urban", "all", 0, "sw"]` can be passed.
|
|
344
|
+
input_path : str, optional
|
|
345
|
+
option to change the path to all simbench grid csv files. However, a change should not be
|
|
346
|
+
necessary and is only for cases of applying the function to data from alternative location,
|
|
347
|
+
by default None
|
|
348
|
+
|
|
349
|
+
Returns
|
|
350
|
+
-------
|
|
351
|
+
pandapowerNet
|
|
352
|
+
requsted simbench grid
|
|
353
|
+
|
|
354
|
+
Examples
|
|
355
|
+
--------
|
|
356
|
+
>>> import simbench as sb
|
|
357
|
+
>>> net = sb.get_simbench_net('1-MVLV-urban-all-0-sw')
|
|
358
|
+
|
|
359
|
+
>>> import pandapower as pp
|
|
360
|
+
>>> pp.toolbox.nets_equal(net, sb.get_simbench_net([1, "MV", "LV", "urban", "all", 0, "sw"]))
|
|
361
|
+
True
|
|
355
362
|
"""
|
|
356
363
|
# --- get relevant subnets
|
|
357
364
|
sb_code, sb_code_parameters = get_simbench_code_and_parameters(sb_code_info)
|
|
@@ -139,7 +139,7 @@ def filter_unapplied_profiles(csv_data):
|
|
|
139
139
|
applied_profiles.append("time")
|
|
140
140
|
unapplied_profiles = csv_data[prof_tab].columns.difference(applied_profiles)
|
|
141
141
|
logger.debug("These %ss are dropped: " % prof_tab + str(unapplied_profiles))
|
|
142
|
-
csv_data[prof_tab].drop(unapplied_profiles, axis=1
|
|
142
|
+
csv_data[prof_tab] = csv_data[prof_tab].drop(unapplied_profiles, axis=1)
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
def filter_unapplied_profiles_pp(net, named_profiles: bool):
|
|
@@ -148,7 +148,7 @@ def filter_unapplied_profiles_pp(net, named_profiles: bool):
|
|
|
148
148
|
if named_profiles:
|
|
149
149
|
for key in net["profiles"].keys():
|
|
150
150
|
unused = get_unused_profiles(net, key)
|
|
151
|
-
net.profiles[key].drop(columns=unused
|
|
151
|
+
net.profiles[key] = net.profiles[key].drop(columns=unused)
|
|
152
152
|
else:
|
|
153
153
|
for key in net.profiles.keys():
|
|
154
154
|
if isinstance(key, tuple):
|
|
@@ -158,8 +158,8 @@ def filter_unapplied_profiles_pp(net, named_profiles: bool):
|
|
|
158
158
|
else:
|
|
159
159
|
raise NotImplementedError("The keys of net.profiles are expected as " +
|
|
160
160
|
"tuple(element, column) or as str, e.g. 'gen.vm_pu'.")
|
|
161
|
-
net.profiles[key].drop(columns=net.profiles[key].columns[
|
|
162
|
-
key].columns.isin(net[elm].index)]
|
|
161
|
+
net.profiles[key] = net.profiles[key].drop(columns=net.profiles[key].columns[
|
|
162
|
+
~net.profiles[key].columns.isin(net[elm].index)])
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
def get_absolute_profiles_from_relative_profiles(
|
|
@@ -215,52 +215,46 @@ def get_absolute_profiles_from_relative_profiles(
|
|
|
215
215
|
|
|
216
216
|
# --- set index
|
|
217
217
|
index = relative_profiles["time"] if time_as_index else relative_profiles.index
|
|
218
|
-
if "time" in relative_profiles:
|
|
219
|
-
del relative_profiles["time"]
|
|
220
218
|
|
|
221
219
|
# --- do profile_suffix assumptions if profile_suffix is None
|
|
222
220
|
if profile_suffix is None:
|
|
221
|
+
profile_suffix = ""
|
|
223
222
|
if element == "load":
|
|
224
223
|
if multiplying_column == "p_mw":
|
|
225
224
|
profile_suffix = "_pload"
|
|
226
225
|
elif multiplying_column == "q_mvar":
|
|
227
226
|
profile_suffix = "_qload"
|
|
228
|
-
profile_suffix = "" if profile_suffix is None else profile_suffix
|
|
229
227
|
|
|
230
|
-
# --- get relative profiles
|
|
228
|
+
# --- get relative profiles
|
|
229
|
+
relative_profiles_vals = np.ones((len(index), len(net[element])))
|
|
231
230
|
if profile_column in net[element].columns:
|
|
232
231
|
applied_profiles = net[element][profile_column] + profile_suffix
|
|
233
|
-
|
|
232
|
+
|
|
233
|
+
missing = list(applied_profiles[~applied_profiles.isin(relative_profiles.columns)])
|
|
234
|
+
if len(missing):
|
|
235
|
+
raise ValueError("These profiles are set to be applied but are missing in the profiles "
|
|
236
|
+
"data: " + str(missings))
|
|
237
|
+
isna = applied_profiles.isnull()
|
|
238
|
+
is_not_na_pos = np.arange(len(isna), dtype=int)[~isna.values]
|
|
239
|
+
relative_profiles_vals[:, is_not_na_pos] = \
|
|
240
|
+
relative_profiles[list(applied_profiles[~isna])].values
|
|
241
|
+
|
|
242
|
+
else: # warning and assumptions in case of missing profile column
|
|
234
243
|
logger.warning("In %s table, profile column '%s' is missing. Scalings of 1 are assumed." % (
|
|
235
244
|
element, profile_column))
|
|
236
|
-
missing_col_handling = "missing_col_handling"
|
|
237
|
-
applied_profiles = pd.Series([missing_col_handling]*net[element].shape[0],
|
|
238
|
-
index=net[element].index, dtype=object)
|
|
239
|
-
relative_profiles[missing_col_handling] = 1
|
|
240
|
-
|
|
241
|
-
# nan profile handling
|
|
242
|
-
if applied_profiles.isnull().any():
|
|
243
|
-
logger.debug("There are nan profiles. Scalings of 1 are assumed.")
|
|
244
|
-
nan_profile_handling = "nan_profile_scaling"
|
|
245
|
-
assert nan_profile_handling not in relative_profiles.columns
|
|
246
|
-
applied_profiles.loc[applied_profiles.isnull()] = nan_profile_handling
|
|
247
|
-
relative_profiles[nan_profile_handling] = 1
|
|
248
|
-
|
|
249
|
-
relative_output_profiles = relative_profiles.values[:, idx_in_2nd_array(
|
|
250
|
-
applied_profiles.values, np.array(relative_profiles.columns))]
|
|
251
245
|
|
|
252
246
|
# --- get factor to multiply with (consider additional feature of 'multiplying_column')
|
|
253
247
|
if isinstance(multiplying_column, str):
|
|
254
248
|
if multiplying_column in net[element].columns:
|
|
255
249
|
factor = net[element][multiplying_column].values.reshape(1, -1)
|
|
256
250
|
else:
|
|
257
|
-
raise ValueError("'multiplying_column' %s is not net[%s].columns." % (
|
|
251
|
+
raise ValueError("'multiplying_column' %s is not in net[%s].columns." % (
|
|
258
252
|
multiplying_column, element))
|
|
259
253
|
else:
|
|
260
254
|
factor = multiplying_column
|
|
261
255
|
|
|
262
256
|
# --- multiply relative profiles with factor and return results
|
|
263
|
-
output_profiles = pd.DataFrame(
|
|
257
|
+
output_profiles = pd.DataFrame(relative_profiles_vals*factor, index=index,
|
|
264
258
|
columns=net[element].index)
|
|
265
259
|
return output_profiles
|
|
266
260
|
|
|
@@ -319,9 +313,9 @@ def get_absolute_values(net, profiles_instead_of_study_cases, **kwargs):
|
|
|
319
313
|
Idx_pv = net.sgen.index[net.sgen.type.str.contains("PV").fillna(False)]
|
|
320
314
|
Idx_sgen = net.sgen.index.difference(Idx_wind.union(Idx_pv))
|
|
321
315
|
net.sgen["loadcase_type"] = ""
|
|
322
|
-
net.sgen['loadcase_type']
|
|
323
|
-
net.sgen['loadcase_type']
|
|
324
|
-
net.sgen['loadcase_type']
|
|
316
|
+
net.sgen.loc[Idx_wind, 'loadcase_type'] = loadcase_type[0]
|
|
317
|
+
net.sgen.loc[Idx_pv, 'loadcase_type'] = loadcase_type[1]
|
|
318
|
+
net.sgen.loc[Idx_sgen, 'loadcase_type'] = loadcase_type[2]
|
|
325
319
|
else:
|
|
326
320
|
net[elm_col[0]]["loadcase_type"] = loadcase_type
|
|
327
321
|
|
|
@@ -21,23 +21,24 @@ def collect_all_simbench_codes(version=1, hv_level=None, lv_level=None, hv_type=
|
|
|
21
21
|
**kwargs):
|
|
22
22
|
"""
|
|
23
23
|
Returns a list of all possible SimBench Codes, considering given fixed sb_code_parameters.
|
|
24
|
-
|
|
24
|
+
kwargs are ignored.
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
Examples
|
|
27
|
+
--------
|
|
28
|
+
>>> all_codes = collect_all_simbench_codes()
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
>>> single_zone_codes = collect_all_simbench_codes(lv_level="", all_data=False)
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
>>> all_data_codes = collect_all_simbench_codes(hv_level="")
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
>>> mv_grids_without_switch_and_lv = collect_all_simbench_codes(
|
|
35
|
+
... hv_level="MV", lv_level="", breaker_rep=False)
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
>>> urban_hv_grid_scenario1_codes = collect_all_simbench_codes(
|
|
38
|
+
... hv_level="HV", hv_type="urban", scenario=1)
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
>>> rural_and_urban_mv_grid_scenario1_codes = sb.collect_all_simbench_codes(
|
|
41
|
+
... hv_level="MV", lv_level="", hv_type=["rural", "urban"], scenario=1, all_data=False)
|
|
41
42
|
"""
|
|
42
43
|
pos_hv_level = ["EHV", "HV", "MV", "LV"]
|
|
43
44
|
pos_lv_level = ["HV", "MV", "LV", ""]
|
|
@@ -1,38 +1,83 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: simbench
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: Electrical Power System Benchmark Models
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
Version: 1.5.1
|
|
4
|
+
Summary: Electrical Power System Benchmark Models.
|
|
5
|
+
Author-email: Steffen Meinecke <steffen.meinecke@uni-kassel.de>
|
|
6
|
+
Maintainer-email: simbench Developers <simbench@uni-kassel.de>
|
|
7
|
+
License: Copyright (c) 2019-2021 by University of Kassel, TU Dortmund, RWTH Aachen University and Fraunhofer Institute for Energy Economics and Energy System Technology (IEE) Kassel and individual contributors (see AUTHORS file for details).
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
The database called SimBench is made available under the Open Database
|
|
12
|
+
License: http://opendatacommons.org/licenses/odbl/1.0/.
|
|
13
|
+
Any rights in individual contents of the database are licensed under
|
|
14
|
+
the Database Contents License: http://opendatacommons.org/licenses/dbcl/1.0/
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
The code of this repository "simbench" is published under the following 3-clause BSD license:
|
|
18
|
+
|
|
19
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted
|
|
20
|
+
provided that the following conditions are met:
|
|
21
|
+
|
|
22
|
+
1. Redistributions of source code must retain the above copyright notice, this list of conditions
|
|
23
|
+
and the following disclaimer.
|
|
24
|
+
|
|
25
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list of
|
|
26
|
+
conditions and the following disclaimer in the documentation and/or other materials provided
|
|
27
|
+
with the distribution.
|
|
28
|
+
|
|
29
|
+
3. Neither the name of the copyright holder nor the names of its contributors may be used to
|
|
30
|
+
endorse or promote products derived from this software without specific prior written permission.
|
|
31
|
+
|
|
32
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
|
33
|
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
34
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
35
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
36
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
37
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
38
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
|
|
39
|
+
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
40
|
+
|
|
41
|
+
Project-URL: Homepage, https://www.simbench.net
|
|
42
|
+
Project-URL: Documentation, https://simbench.readthedocs.io
|
|
43
|
+
Project-URL: Source, https://www.github.com/e2nIEE/simbench
|
|
44
|
+
Project-URL: Repository, https://www.github.com/e2nIEE/simbench.git
|
|
45
|
+
Project-URL: Issues, https://www.github.com/e2nIEE/simbench/issues
|
|
46
|
+
Project-URL: Download, https://pypi.org/project/simbench/#files
|
|
47
|
+
Project-URL: Changelog, https://github.com/e2nIEE/simbench/blob/develop/CHANGELOG.rst
|
|
48
|
+
Keywords: benchmark grid,power system,network,grid planning,grid operation,grid generation methodology,comparability,reproducibility,electricity,energy,engineering,simulation,simbench,time series,future scenarios
|
|
9
49
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
50
|
Classifier: Environment :: Console
|
|
11
51
|
Classifier: Intended Audience :: Developers
|
|
12
52
|
Classifier: Intended Audience :: Education
|
|
13
53
|
Classifier: Intended Audience :: Science/Research
|
|
54
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
14
55
|
Classifier: Natural Language :: English
|
|
15
56
|
Classifier: Operating System :: OS Independent
|
|
16
57
|
Classifier: Programming Language :: Python
|
|
17
58
|
Classifier: Programming Language :: Python :: 3
|
|
18
59
|
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.1
|
|
20
60
|
Classifier: Programming Language :: Python :: 3.9
|
|
61
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
62
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
63
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
64
|
Requires-Python: >=3.8
|
|
22
65
|
Description-Content-Type: text/x-rst
|
|
23
66
|
Provides-Extra: docs
|
|
24
67
|
Provides-Extra: plotting
|
|
68
|
+
Provides-Extra: test
|
|
69
|
+
Provides-Extra: performance
|
|
70
|
+
Provides-Extra: fileio
|
|
25
71
|
Provides-Extra: tutorials
|
|
26
72
|
Provides-Extra: all
|
|
27
73
|
License-File: LICENSE
|
|
74
|
+
License-File: AUTHORS
|
|
28
75
|
|
|
29
76
|
|
|
30
77
|
.. image:: https://simbench.de/wp-content/uploads/2019/01/logo.png
|
|
31
78
|
:target: https://www.simbench.net
|
|
32
79
|
:alt: SimBench logo
|
|
33
80
|
|
|
34
|
-
|
|
|
35
|
-
|
|
36
81
|
.. image:: https://badge.fury.io/py/simbench.svg
|
|
37
82
|
:target: https://pypi.python.org/pypi/simbench
|
|
38
83
|
:alt: PyPI
|
|
@@ -3,17 +3,12 @@ CHANGELOG.rst
|
|
|
3
3
|
LICENSE
|
|
4
4
|
MANIFEST.in
|
|
5
5
|
README.rst
|
|
6
|
+
pyproject.toml
|
|
6
7
|
requirements.txt
|
|
7
|
-
setup.cfg
|
|
8
8
|
setup.py
|
|
9
9
|
.github/workflows/github_test_action.yml
|
|
10
|
-
.github/workflows/
|
|
11
|
-
|
|
12
|
-
simbench.egg-info/PKG-INFO
|
|
13
|
-
simbench.egg-info/SOURCES.txt
|
|
14
|
-
simbench.egg-info/dependency_links.txt
|
|
15
|
-
simbench.egg-info/requires.txt
|
|
16
|
-
simbench.egg-info/top_level.txt
|
|
10
|
+
.github/workflows/test_release.yml
|
|
11
|
+
.github/workflows/upload_release.yml
|
|
17
12
|
simbench/converter/__init__.py
|
|
18
13
|
simbench/converter/auxiliary.py
|
|
19
14
|
simbench/converter/csv_data_manipulation.py
|
|
@@ -84,6 +79,11 @@ simbench/networks/1-complete_data-mixed-all-2-sw/Substation.csv
|
|
|
84
79
|
simbench/networks/1-complete_data-mixed-all-2-sw/Switch.csv
|
|
85
80
|
simbench/networks/1-complete_data-mixed-all-2-sw/Transformer.csv
|
|
86
81
|
simbench/networks/1-complete_data-mixed-all-2-sw/TransformerType.csv
|
|
82
|
+
simbench/simbench.egg-info/PKG-INFO
|
|
83
|
+
simbench/simbench.egg-info/SOURCES.txt
|
|
84
|
+
simbench/simbench.egg-info/dependency_links.txt
|
|
85
|
+
simbench/simbench.egg-info/requires.txt
|
|
86
|
+
simbench/simbench.egg-info/top_level.txt
|
|
87
87
|
simbench/test/__init__.py
|
|
88
88
|
simbench/test/run_tests.py
|
|
89
89
|
simbench/test/converter/__init__.py
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
pandapower>=2.12.1
|
|
2
|
+
|
|
3
|
+
[all]
|
|
4
|
+
plotly>=3.1.1
|
|
5
|
+
matplotlib
|
|
6
|
+
igraph
|
|
7
|
+
geopandas
|
|
8
|
+
geojson
|
|
9
|
+
pytest~=8.1
|
|
10
|
+
pytest-xdist
|
|
11
|
+
nbmake
|
|
12
|
+
ortools
|
|
13
|
+
numba>=0.25
|
|
14
|
+
lightsim2grid>=0.8.1
|
|
15
|
+
|
|
16
|
+
[docs]
|
|
17
|
+
numpydoc
|
|
18
|
+
sphinx
|
|
19
|
+
sphinx_rtd_theme
|
|
20
|
+
sphinx-pyproject
|
|
21
|
+
|
|
22
|
+
[fileio]
|
|
23
|
+
geopandas
|
|
24
|
+
|
|
25
|
+
[performance]
|
|
26
|
+
ortools
|
|
27
|
+
numba>=0.25
|
|
28
|
+
lightsim2grid>=0.8.1
|
|
29
|
+
|
|
30
|
+
[plotting]
|
|
31
|
+
plotly>=3.1.1
|
|
32
|
+
matplotlib
|
|
33
|
+
igraph
|
|
34
|
+
geopandas
|
|
35
|
+
geojson
|
|
36
|
+
|
|
37
|
+
[test]
|
|
38
|
+
pytest~=8.1
|
|
39
|
+
pytest-xdist
|
|
40
|
+
nbmake
|
|
41
|
+
|
|
42
|
+
[tutorials]
|
|
43
|
+
matplotlib
|
|
@@ -62,23 +62,25 @@ def test_column_indices():
|
|
|
62
62
|
|
|
63
63
|
def test_get_unique_duplicated_dict():
|
|
64
64
|
# --- with numeric data
|
|
65
|
-
A = pd.DataFrame([[8.0,
|
|
66
|
-
[4.0,
|
|
67
|
-
[6.0,
|
|
68
|
-
[8.0,
|
|
65
|
+
A = pd.DataFrame([[8.0, 2, 1, 2.0, 3],
|
|
66
|
+
[4.0, 3, 2, 5.0, 2],
|
|
67
|
+
[6.0, 4, 2, 3.0, 4],
|
|
68
|
+
[8.0, 3, 1, 2.0, 3],
|
|
69
69
|
[np.nan, 7, 5, np.nan, 2],
|
|
70
|
-
[6.0,
|
|
71
|
-
[8.0,
|
|
70
|
+
[6.0, 4, 2, 3.0, 4],
|
|
71
|
+
[8.0, 3, 1, 2.0, 3],
|
|
72
72
|
[np.nan, 7, 5, np.nan, 2],
|
|
73
|
-
[8.0,
|
|
74
|
-
[8.0,
|
|
73
|
+
[8.0, 2, 1, 2.0, 3],
|
|
74
|
+
[8.0, 2, 1, 2.0, 3]])
|
|
75
75
|
dict_ = sb.get_unique_duplicated_dict(A)
|
|
76
76
|
assert dict_ == {0: [8, 9], 1: [], 2: [5], 3: [6], 4: [7]}
|
|
77
77
|
dict_ = sb.get_unique_duplicated_dict(A, subset=[0, 2, 3, 4])
|
|
78
78
|
assert dict_ == {0: [3, 6, 8, 9], 1: [], 2: [5], 4: [7]}
|
|
79
79
|
|
|
80
80
|
# with strings
|
|
81
|
+
A[2] = A[2].astype(object)
|
|
81
82
|
A.loc[[2, 5], 2] = "fd"
|
|
83
|
+
A[4] = A[4].astype(object)
|
|
82
84
|
A.loc[9, 4] = "kl"
|
|
83
85
|
dict_ = sb.get_unique_duplicated_dict(A)
|
|
84
86
|
assert dict_ == {0: [8], 1: [], 2: [5], 3: [6], 4: [7], 9: []}
|
|
@@ -211,7 +213,7 @@ def test_merge_dataframes():
|
|
|
211
213
|
assert pp.dataframes_equal(return6, res6)
|
|
212
214
|
|
|
213
215
|
# beware idx order, df1 with precedence, no extra index
|
|
214
|
-
return7 = sb.merge_dataframes([df1, df2], keep="first",
|
|
216
|
+
return7 = sb.merge_dataframes([df1, df2], keep="first", sort_index=False, sort_column=False)
|
|
215
217
|
try:
|
|
216
218
|
res7 = deepcopy(res5).reindex(unsorted_index, columns=unsorted_columns)
|
|
217
219
|
except TypeError: # legacy for pandas <0.21
|
|
@@ -220,7 +222,7 @@ def test_merge_dataframes():
|
|
|
220
222
|
assert pp.dataframes_equal(return7, res7)
|
|
221
223
|
|
|
222
224
|
# beware idx order, df1 with precedence, no extra index
|
|
223
|
-
return8 = sb.merge_dataframes([df1, df2], keep="last",
|
|
225
|
+
return8 = sb.merge_dataframes([df1, df2], keep="last", sort_index=False, sort_column=False)
|
|
224
226
|
try:
|
|
225
227
|
res8 = deepcopy(res6).reindex(unsorted_index, columns=unsorted_columns)
|
|
226
228
|
except TypeError: # legacy for pandas <0.21
|
|
@@ -14,7 +14,8 @@ from pandapower.networks import example_simple
|
|
|
14
14
|
from simbench import sb_dir
|
|
15
15
|
from simbench.converter import csv2pp, csv_data2pp, pp2csv, pp2csv_data, \
|
|
16
16
|
convert_parallel_branches, read_csv_data, ensure_full_column_data_existence, \
|
|
17
|
-
avoid_duplicates_in_column, merge_busbar_coordinates
|
|
17
|
+
avoid_duplicates_in_column, merge_busbar_coordinates, to_numeric_ignored_errors, \
|
|
18
|
+
repl_nans_in_obj_cols_to_empty_str
|
|
18
19
|
|
|
19
20
|
try:
|
|
20
21
|
import pandaplan.core.pplog as logging
|
|
@@ -141,7 +142,7 @@ def test_convert_parallel_branches():
|
|
|
141
142
|
assert net.switch.shape[0] == 11
|
|
142
143
|
|
|
143
144
|
net1 = deepcopy(net)
|
|
144
|
-
net1.switch.
|
|
145
|
+
net1.switch.loc[4, "closed"] = False
|
|
145
146
|
convert_parallel_branches(net, multiple_entries=False)
|
|
146
147
|
convert_parallel_branches(net1, multiple_entries=False)
|
|
147
148
|
# test sum up of parallels
|
|
@@ -238,14 +239,14 @@ def test_example_simple():
|
|
|
238
239
|
# compare std_types as dataframes
|
|
239
240
|
for netx in [net, net_from_csv_data]:
|
|
240
241
|
for key, vals in netx["std_types"].items():
|
|
241
|
-
netx[f"std_types|{key}"] = pd.DataFrame(vals).T
|
|
242
|
+
netx[f"std_types|{key}"] = to_numeric_ignored_errors(pd.DataFrame(vals).T)
|
|
242
243
|
|
|
243
244
|
for key in net.keys():
|
|
244
245
|
if isinstance(net[key], pd.DataFrame):
|
|
245
246
|
# drop unequal columns
|
|
246
247
|
dummy_columns = net[key].columns
|
|
247
248
|
extra_columns = net_from_csv_data[key].columns.difference(dummy_columns)
|
|
248
|
-
net_from_csv_data[key].drop(columns=extra_columns
|
|
249
|
+
net_from_csv_data[key] = net_from_csv_data[key].drop(columns=extra_columns)
|
|
249
250
|
# adjust dtypes
|
|
250
251
|
if net[key].shape[0]:
|
|
251
252
|
try:
|
|
@@ -256,10 +257,13 @@ def test_example_simple():
|
|
|
256
257
|
# drop result table rows
|
|
257
258
|
if pp_is_27lower and "res_" in key:
|
|
258
259
|
if not key == "res_bus":
|
|
259
|
-
net[key]
|
|
260
|
+
net[key] = net[key].iloc[0:0]
|
|
260
261
|
else:
|
|
261
262
|
net[key].loc[:, ["p_mw", "q_mvar"]] = np.nan
|
|
262
263
|
|
|
264
|
+
repl_nans_in_obj_cols_to_empty_str(net)
|
|
265
|
+
repl_nans_in_obj_cols_to_empty_str(net_from_csv_data)
|
|
266
|
+
|
|
263
267
|
# --- for pp2.7.1 and newer
|
|
264
268
|
if not pp_is_27lower:
|
|
265
269
|
name_selection = [key for key in net.keys() if key.startswith("std_types|")]
|
|
@@ -8,7 +8,8 @@ from packaging import version
|
|
|
8
8
|
import pandas as pd
|
|
9
9
|
import pandapower as pp
|
|
10
10
|
from pandapower.auxiliary import _preserve_dtypes
|
|
11
|
-
from simbench.converter import replace_branch_switches, create_branch_switches
|
|
11
|
+
from simbench.converter import replace_branch_switches, create_branch_switches, \
|
|
12
|
+
repl_nans_in_obj_cols_to_empty_str
|
|
12
13
|
|
|
13
14
|
try:
|
|
14
15
|
import pandaplan.core.pplog as logging
|
|
@@ -81,6 +82,9 @@ def test_branch_switch_changes():
|
|
|
81
82
|
for elm in ["line", "trafo"]:
|
|
82
83
|
_preserve_dtypes(net2[elm], net_orig[elm].dtypes)
|
|
83
84
|
|
|
85
|
+
repl_nans_in_obj_cols_to_empty_str(net_orig)
|
|
86
|
+
repl_nans_in_obj_cols_to_empty_str(net2)
|
|
87
|
+
|
|
84
88
|
if version.parse(pp.__version__) <= version.parse("2.7.0"):
|
|
85
89
|
assert pp.nets_equal(net_orig, net2, tol=1e-7)
|
|
86
90
|
else:
|
|
@@ -100,8 +100,8 @@ if __name__ == "__main__":
|
|
|
100
100
|
if 0:
|
|
101
101
|
pytest.main(["test_voltLvl.py", "-xs"])
|
|
102
102
|
else:
|
|
103
|
-
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
103
|
+
# test_convert_voltlvl_names()
|
|
104
|
+
# test_voltlvl_idx()
|
|
105
|
+
# test_get_voltlvl()
|
|
106
106
|
test_all_voltlvl_idx()
|
|
107
107
|
pass
|
|
@@ -53,7 +53,7 @@ def test_get_bus_bus_switch_indices_from_csv():
|
|
|
53
53
|
bool_ = True
|
|
54
54
|
assert bool_
|
|
55
55
|
|
|
56
|
-
switch_table.drop(switch_table.index[-1]
|
|
56
|
+
switch_table = switch_table.drop(switch_table.index[-1])
|
|
57
57
|
try:
|
|
58
58
|
sb.get_bus_bus_switch_indices_from_csv(switch_table, node_table)
|
|
59
59
|
bool_ = False
|
|
@@ -61,7 +61,7 @@ def test_get_bus_bus_switch_indices_from_csv():
|
|
|
61
61
|
bool_ = True
|
|
62
62
|
assert bool_
|
|
63
63
|
|
|
64
|
-
switch_table.drop(switch_table.index[-1]
|
|
64
|
+
switch_table = switch_table.drop(switch_table.index[-1])
|
|
65
65
|
assert sb.get_bus_bus_switch_indices_from_csv(switch_table, node_table) == [0, 5]
|
|
66
66
|
|
|
67
67
|
|
|
@@ -443,7 +443,7 @@ def _test_net_validity(net, sb_code_params, shortened, input_path=None):
|
|
|
443
443
|
try:
|
|
444
444
|
pp.runpp(net)
|
|
445
445
|
converged = net.converged
|
|
446
|
-
except:
|
|
446
|
+
except pp.LoadflowNotConverged:
|
|
447
447
|
sb_code = sb.get_simbench_code_from_parameters(sb_code_params)
|
|
448
448
|
logger.error("Loadflow not converged with %s" % sb_code)
|
|
449
449
|
converged = False
|
|
@@ -47,7 +47,7 @@ def _testnet_with_profiles():
|
|
|
47
47
|
["lPV", 0.1, 0.122543, 0.85, 0.95, 1, 1.015]],
|
|
48
48
|
columns=["Study Case", "pload", "qload", "Wind_p", "PV_p",
|
|
49
49
|
"RES_p", "Slack_vm"])
|
|
50
|
-
net["loadcases"].set_index("Study Case"
|
|
50
|
+
net["loadcases"] = net["loadcases"].set_index("Study Case")
|
|
51
51
|
return net, deepcopy(in_net_profiles)
|
|
52
52
|
|
|
53
53
|
|
|
@@ -122,7 +122,7 @@ if __name__ == '__main__':
|
|
|
122
122
|
if 0:
|
|
123
123
|
pytest.main(["test_profiles.py", "-xs"])
|
|
124
124
|
else:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
test_dismantle_dict_values()
|
|
126
|
+
test_missing_profiles()
|
|
127
|
+
test_get_absolute_profiles_from_relative_profiles()
|
|
128
128
|
pass
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
|
|
3
|
-
|
|
4
|
-
name: simbench
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
push:
|
|
8
|
-
branches: '*'
|
|
9
|
-
paths-ignore:
|
|
10
|
-
- 'CHANGELOG.rst'
|
|
11
|
-
pull_request:
|
|
12
|
-
branches: '*'
|
|
13
|
-
paths-ignore:
|
|
14
|
-
- 'CHANGELOG.rst'
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
build:
|
|
18
|
-
|
|
19
|
-
runs-on: ubuntu-latest
|
|
20
|
-
strategy:
|
|
21
|
-
matrix:
|
|
22
|
-
python-version: ['3.8', '3.9', '3.10', '3.11']
|
|
23
|
-
|
|
24
|
-
steps:
|
|
25
|
-
- uses: actions/checkout@v2
|
|
26
|
-
#- uses: julia-actions/setup-julia@v1.5
|
|
27
|
-
- name: Set up Python ${{ matrix.python-version }}
|
|
28
|
-
uses: actions/setup-python@v2
|
|
29
|
-
with:
|
|
30
|
-
python-version: ${{ matrix.python-version }}
|
|
31
|
-
- name: Install dependencies
|
|
32
|
-
run: |
|
|
33
|
-
python -m pip install --upgrade pip
|
|
34
|
-
python -m pip install pytest
|
|
35
|
-
pip install -r requirements.txt
|
|
36
|
-
pip install .["all"]
|
|
37
|
-
- name: List of installed packages
|
|
38
|
-
run: |
|
|
39
|
-
pip list
|
|
40
|
-
- name: Test with pytest
|
|
41
|
-
if: ${{ matrix.python-version != '3.8' }}
|
|
42
|
-
run: |
|
|
43
|
-
pytest
|
|
44
|
-
- name: Test with pytest and Codecov
|
|
45
|
-
if: ${{ matrix.python-version == '3.8' }}
|
|
46
|
-
run: |
|
|
47
|
-
pip install pytest-cov
|
|
48
|
-
pytest --cov=./ --cov-report=xml
|
|
49
|
-
- name: Upload coverage to Codecov
|
|
50
|
-
if: ${{ matrix.python-version == '3.8' }}
|
|
51
|
-
uses: codecov/codecov-action@v1
|
|
52
|
-
with:
|
|
53
|
-
verbose: true
|