power-grid-model-io 1.3.17__tar.gz → 1.3.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of power-grid-model-io might be problematic. Click here for more details.
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/PKG-INFO +1 -1
- power_grid_model_io-1.3.18/PYPI_VERSION +1 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/pandapower_converter.py +44 -68
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io.egg-info/PKG-INFO +1 -1
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_pandapower_converter_output.py +68 -39
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/converters/test_pandapower_converter_output.py +164 -0
- power_grid_model_io-1.3.17/PYPI_VERSION +0 -1
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/LICENSE +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/MANIFEST.in +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/README.md +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/VERSION +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/pyproject.toml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/setup.cfg +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/setup.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/examples/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/examples/multipliers.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/excel/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/excel/vision_en.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/excel/vision_en_9_7.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/excel/vision_en_9_8.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/excel/vision_nl.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/base_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/pgm_json_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/tabular_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/converters/vision_excel_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/base_data_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/csv_dir_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/excel_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/json_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_stores/vision_excel_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_types/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_types/_data_types.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/data_types/tabular_data.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/functions/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/functions/_functions.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/functions/filters.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/functions/phase_to_phase.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/field_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/multiplier_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/tabular_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/unit_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/mappings/value_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/py.typed +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/auto_id.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/dict.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/download.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/excel_ambiguity_checker.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/json.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/modules.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/parsing.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/uuid_excel_cvtr.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/zip.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io.egg-info/SOURCES.txt +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io.egg-info/dependency_links.txt +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io.egg-info/requires.txt +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io.egg-info/top_level.txt +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/conftest.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/config/dummy_mapping.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/config/mapping.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_asym_output_data.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_asym_output_data.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_input_data.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_input_data.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_output_data.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_output_data.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_3ph_output.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_3ph_output.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_output.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_v2_net_output.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_validation.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/excel_ambiguity_check_data.xlsx +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/excel_ambiguity_check_data.xlsx.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_en.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_en.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_nl.json +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_nl.json.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_9_5_en.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_9_5_nl.yaml +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en.xlsx +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en.xlsx.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en_9_7.xlsx +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en_9_7.xlsx.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_nl.xlsx +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_nl.xlsx.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_validation.vnf +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_validation.vnf.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/zip/foo-bar.zip +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/zip/foo-bar.zip.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/zip/foo.zip +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/zip/foo.zip.license +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/test_utils.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/conftest.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_base_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_pandapower_converter_input.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_pgm_json_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_tabular_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/converters/test_vision_excel_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/test_base_data_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/test_csv_dir_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/test_excel_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/test_json_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/test_vision_excel_file_store.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_types/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_types/test_data_types.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_types/test_tabular_data.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/test_filters.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/test_functions.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/test_phase_to_phase.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_field_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_multiplier_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_tabular_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_unit_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_value_mapping.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_auto_id.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_dict.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_download.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_json.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_modules.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_parsing.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_uuid_excel_cvtr.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_zip.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/utils.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/conftest.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/converters/__init__.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/converters/test_pandapower_converter_input.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/converters/test_vision_excel_converter.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/test_test_utils.py +0 -0
- {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.18
|
|
@@ -342,13 +342,13 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
342
342
|
self._pp_buses_output()
|
|
343
343
|
self._pp_lines_output()
|
|
344
344
|
self._pp_ext_grids_output()
|
|
345
|
-
self.
|
|
345
|
+
self._pp_load_elements_output(element="load", symmetric=True)
|
|
346
|
+
self._pp_load_elements_output(element="ward", symmetric=True)
|
|
347
|
+
self._pp_load_elements_output(element="motor", symmetric=True)
|
|
346
348
|
self._pp_shunts_output()
|
|
347
349
|
self._pp_trafos_output()
|
|
348
350
|
self._pp_sgens_output()
|
|
349
351
|
self._pp_trafos3w_output()
|
|
350
|
-
self._pp_ward_output()
|
|
351
|
-
self._pp_motor_output()
|
|
352
352
|
self._pp_asym_gens_output()
|
|
353
353
|
self._pp_asym_loads_output()
|
|
354
354
|
# Switches derive results from branches pp_output_data and pgm_output_data of links. Hence, placed in the end.
|
|
@@ -360,13 +360,14 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
360
360
|
Furthermore, creates a global node lookup table, which stores nodes' voltage magnitude per unit and the voltage
|
|
361
361
|
angle in degrees
|
|
362
362
|
"""
|
|
363
|
-
# TODO create output_data_3ph for
|
|
364
|
-
# Although Pandapower itself did not implmenet res_shunt_3ph
|
|
365
|
-
# Since results are avaiable in PGM output, these should be converted.
|
|
363
|
+
# TODO create output_data_3ph for trafos3w, switches
|
|
366
364
|
self._pp_buses_output_3ph()
|
|
367
365
|
self._pp_lines_output_3ph()
|
|
368
366
|
self._pp_ext_grids_output_3ph()
|
|
369
|
-
self.
|
|
367
|
+
self._pp_load_elements_output(element="load", symmetric=False)
|
|
368
|
+
self._pp_load_elements_output(element="ward", symmetric=False)
|
|
369
|
+
self._pp_load_elements_output(element="motor", symmetric=False)
|
|
370
|
+
self._pp_shunts_output_3ph()
|
|
370
371
|
self._pp_trafos_output_3ph()
|
|
371
372
|
self._pp_sgens_output_3ph()
|
|
372
373
|
self._pp_asym_gens_output_3ph()
|
|
@@ -1560,64 +1561,35 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
1560
1561
|
|
|
1561
1562
|
self.pp_output_data["res_asymmetric_sgen"] = pp_output_asym_gens
|
|
1562
1563
|
|
|
1563
|
-
def
|
|
1564
|
+
def _pp_load_elements_output(self, element, symmetric):
|
|
1564
1565
|
"""
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1566
|
+
Utility function to convert output of elements represented as load
|
|
1567
|
+
in power grid model.
|
|
1568
|
+
element: "load", "motor" or "ward"
|
|
1569
|
+
symmetric: True or False
|
|
1569
1570
|
"""
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
ComponentType.sym_load not in self.pgm_output_data
|
|
1575
|
-
or self.pgm_output_data[ComponentType.sym_load].size == 0
|
|
1576
|
-
or ("load", load_id_names[0]) not in self.idx
|
|
1577
|
-
):
|
|
1578
|
-
return
|
|
1579
|
-
|
|
1580
|
-
# Store the results, while assuring that we are not overwriting any data
|
|
1581
|
-
assert "res_load" not in self.pp_output_data
|
|
1582
|
-
self.pp_output_data["res_load"] = self._pp_load_result_accumulate(
|
|
1583
|
-
pp_component_name="load", load_id_names=load_id_names
|
|
1584
|
-
)
|
|
1585
|
-
|
|
1586
|
-
def _pp_ward_output(self):
|
|
1587
|
-
load_id_names = ["ward_const_power_load", "ward_const_impedance_load"]
|
|
1588
|
-
assert "res_ward" not in self.pp_output_data
|
|
1589
|
-
|
|
1590
|
-
if (
|
|
1591
|
-
ComponentType.sym_load not in self.pgm_output_data
|
|
1592
|
-
or self.pgm_output_data[ComponentType.sym_load].size == 0
|
|
1593
|
-
or ("ward", load_id_names[0]) not in self.idx
|
|
1594
|
-
):
|
|
1595
|
-
return
|
|
1596
|
-
|
|
1597
|
-
accumulated_loads = self._pp_load_result_accumulate(pp_component_name="ward", load_id_names=load_id_names)
|
|
1598
|
-
# TODO Find a better way for mapping vm_pu from bus
|
|
1599
|
-
# accumulated_loads["vm_pu"] = np.nan
|
|
1600
|
-
|
|
1601
|
-
# Store the results, while assuring that we are not overwriting any data
|
|
1602
|
-
assert "res_ward" not in self.pp_output_data
|
|
1603
|
-
self.pp_output_data["res_ward"] = accumulated_loads
|
|
1604
|
-
|
|
1605
|
-
def _pp_motor_output(self):
|
|
1606
|
-
load_id_names = ["motor_load"]
|
|
1571
|
+
if symmetric:
|
|
1572
|
+
res_table = "res_" + element
|
|
1573
|
+
else:
|
|
1574
|
+
res_table = "res_" + element + "_3ph"
|
|
1607
1575
|
|
|
1608
|
-
|
|
1576
|
+
if element == "load":
|
|
1577
|
+
load_id_names = ["const_power", "const_impedance", "const_current"]
|
|
1578
|
+
elif element == "ward":
|
|
1579
|
+
load_id_names = ["ward_const_power_load", "ward_const_impedance_load"]
|
|
1580
|
+
elif element == "motor":
|
|
1581
|
+
load_id_names = ["motor_load"]
|
|
1609
1582
|
|
|
1610
1583
|
if (
|
|
1611
1584
|
ComponentType.sym_load not in self.pgm_output_data
|
|
1612
1585
|
or self.pgm_output_data[ComponentType.sym_load].size == 0
|
|
1613
|
-
or (
|
|
1586
|
+
or (element, load_id_names[0]) not in self.idx
|
|
1614
1587
|
):
|
|
1615
1588
|
return
|
|
1616
|
-
|
|
1617
1589
|
# Store the results, while assuring that we are not overwriting any data
|
|
1618
|
-
assert
|
|
1619
|
-
self.pp_output_data[
|
|
1620
|
-
pp_component_name=
|
|
1590
|
+
assert res_table not in self.pp_output_data
|
|
1591
|
+
self.pp_output_data[res_table] = self._pp_load_result_accumulate(
|
|
1592
|
+
pp_component_name=element, load_id_names=load_id_names
|
|
1621
1593
|
)
|
|
1622
1594
|
|
|
1623
1595
|
def _pp_load_result_accumulate(self, pp_component_name: str, load_id_names: List[str]) -> pd.DataFrame:
|
|
@@ -2131,26 +2103,30 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
|
|
|
2131
2103
|
assert "res_trafo_3ph" not in self.pp_output_data
|
|
2132
2104
|
self.pp_output_data["res_trafo_3ph"] = pp_output_trafos_3ph
|
|
2133
2105
|
|
|
2134
|
-
def
|
|
2106
|
+
def _pp_shunts_output_3ph(self):
|
|
2135
2107
|
"""
|
|
2136
|
-
This function converts a power-grid-model
|
|
2108
|
+
This function converts a power-grid-model Shunt output array to a Shunt Dataframe of PandaPower.
|
|
2137
2109
|
|
|
2138
2110
|
Returns:
|
|
2139
|
-
a PandaPower Dataframe for the
|
|
2111
|
+
a PandaPower Dataframe for the Shunt component
|
|
2140
2112
|
"""
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
or ("load", load_id_names[0]) not in self.idx
|
|
2146
|
-
):
|
|
2113
|
+
# TODO: create unit tests for the function
|
|
2114
|
+
assert "res_shunt_3ph" not in self.pp_output_data
|
|
2115
|
+
|
|
2116
|
+
if ComponentType.shunt not in self.pgm_output_data or self.pgm_output_data[ComponentType.shunt].size == 0:
|
|
2147
2117
|
return
|
|
2148
2118
|
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2119
|
+
pgm_output_shunts = self.pgm_output_data[ComponentType.shunt]
|
|
2120
|
+
|
|
2121
|
+
pp_output_shunts = pd.DataFrame(
|
|
2122
|
+
columns=["p_mw", "q_mvar", "vm_pu"],
|
|
2123
|
+
index=self._get_pp_ids("shunt", pgm_output_shunts["id"]),
|
|
2153
2124
|
)
|
|
2125
|
+
pp_output_shunts["p_mw"] = pgm_output_shunts["p"].sum() * 1e-6
|
|
2126
|
+
pp_output_shunts["q_mvar"] = pgm_output_shunts["q"].sum() * 1e-6
|
|
2127
|
+
# TODO Find a better way for mapping vm_pu from bus
|
|
2128
|
+
# pp_output_shunts["vm_pu"] = np.nan
|
|
2129
|
+
self.pp_output_data["res_shunt_3ph"] = pp_output_shunts
|
|
2154
2130
|
|
|
2155
2131
|
def _pp_asym_loads_output_3ph(self):
|
|
2156
2132
|
"""
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
#
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
|
|
5
|
-
from typing import Callable, List
|
|
6
|
-
from unittest.mock import ANY, MagicMock, patch
|
|
5
|
+
from typing import Any, Callable, Dict, List
|
|
6
|
+
from unittest.mock import ANY, MagicMock, call, patch
|
|
7
7
|
|
|
8
8
|
import numpy as np
|
|
9
9
|
import pandas as pd
|
|
@@ -38,11 +38,14 @@ def test_create_output_data():
|
|
|
38
38
|
converter._pp_sgens_output.assert_called_once_with()
|
|
39
39
|
converter._pp_trafos_output.assert_called_once_with()
|
|
40
40
|
converter._pp_trafos3w_output.assert_called_once_with()
|
|
41
|
-
|
|
41
|
+
expected_calls = [
|
|
42
|
+
call(element="load", symmetric=True),
|
|
43
|
+
call(element="ward", symmetric=True),
|
|
44
|
+
call(element="motor", symmetric=True),
|
|
45
|
+
]
|
|
46
|
+
converter._pp_load_elements_output.assert_has_calls(expected_calls)
|
|
42
47
|
converter._pp_asym_loads_output.assert_called_once_with()
|
|
43
48
|
converter._pp_asym_gens_output.assert_called_once_with()
|
|
44
|
-
converter._pp_motor_output.assert_called_once_with()
|
|
45
|
-
converter._pp_ward_output.assert_called_once_with()
|
|
46
49
|
converter._pp_switches_output.assert_called_once_with()
|
|
47
50
|
|
|
48
51
|
|
|
@@ -54,50 +57,57 @@ def test_create_output_data_3ph():
|
|
|
54
57
|
PandaPowerConverter._create_output_data_3ph(self=converter) # type: ignore
|
|
55
58
|
|
|
56
59
|
# Assert
|
|
57
|
-
assert len(converter.method_calls) ==
|
|
60
|
+
assert len(converter.method_calls) == 11
|
|
58
61
|
converter._pp_buses_output_3ph.assert_called_once_with()
|
|
59
62
|
converter._pp_lines_output_3ph.assert_called_once_with()
|
|
60
63
|
converter._pp_ext_grids_output_3ph.assert_called_once_with()
|
|
61
64
|
converter._pp_sgens_output_3ph.assert_called_once_with()
|
|
62
65
|
converter._pp_trafos_output_3ph.assert_called_once_with()
|
|
63
|
-
|
|
66
|
+
expected_calls = [
|
|
67
|
+
call(element="load", symmetric=False),
|
|
68
|
+
call(element="ward", symmetric=False),
|
|
69
|
+
call(element="motor", symmetric=False),
|
|
70
|
+
]
|
|
71
|
+
converter._pp_load_elements_output.assert_has_calls(expected_calls)
|
|
64
72
|
converter._pp_asym_loads_output_3ph.assert_called_once_with()
|
|
65
73
|
converter._pp_asym_gens_output_3ph.assert_called_once_with()
|
|
66
74
|
|
|
67
75
|
|
|
68
76
|
@pytest.mark.parametrize(
|
|
69
|
-
("create_fn", "table"),
|
|
77
|
+
("create_fn", "table", "create_fn_kwargs"),
|
|
70
78
|
[
|
|
71
|
-
(PandaPowerConverter._pp_buses_output, "node"),
|
|
72
|
-
(PandaPowerConverter._pp_lines_output, "line"),
|
|
73
|
-
(PandaPowerConverter._pp_ext_grids_output, "source"),
|
|
74
|
-
(PandaPowerConverter._pp_shunts_output, "shunt"),
|
|
75
|
-
(PandaPowerConverter._pp_sgens_output, "sym_gen"),
|
|
76
|
-
(PandaPowerConverter._pp_trafos_output, "transformer"),
|
|
77
|
-
(PandaPowerConverter._pp_trafos3w_output, "three_winding_transformer"),
|
|
78
|
-
(PandaPowerConverter.
|
|
79
|
-
(PandaPowerConverter.
|
|
80
|
-
(PandaPowerConverter.
|
|
81
|
-
(PandaPowerConverter.
|
|
82
|
-
(PandaPowerConverter.
|
|
83
|
-
(PandaPowerConverter._pp_switches_output, "link"),
|
|
84
|
-
(PandaPowerConverter._pp_buses_output_3ph, "node"),
|
|
85
|
-
(PandaPowerConverter._pp_lines_output_3ph, "line"),
|
|
86
|
-
(PandaPowerConverter._pp_ext_grids_output_3ph, "source"),
|
|
87
|
-
(PandaPowerConverter._pp_sgens_output_3ph, "sym_gen"),
|
|
88
|
-
(PandaPowerConverter._pp_trafos_output_3ph, "transformer"),
|
|
89
|
-
(PandaPowerConverter.
|
|
90
|
-
(PandaPowerConverter.
|
|
91
|
-
(PandaPowerConverter.
|
|
79
|
+
(PandaPowerConverter._pp_buses_output, "node", {}),
|
|
80
|
+
(PandaPowerConverter._pp_lines_output, "line", {}),
|
|
81
|
+
(PandaPowerConverter._pp_ext_grids_output, "source", {}),
|
|
82
|
+
(PandaPowerConverter._pp_shunts_output, "shunt", {}),
|
|
83
|
+
(PandaPowerConverter._pp_sgens_output, "sym_gen", {}),
|
|
84
|
+
(PandaPowerConverter._pp_trafos_output, "transformer", {}),
|
|
85
|
+
(PandaPowerConverter._pp_trafos3w_output, "three_winding_transformer", {}),
|
|
86
|
+
(PandaPowerConverter._pp_load_elements_output, "load", {"symmetric": True, "element": "sym_load"}),
|
|
87
|
+
(PandaPowerConverter._pp_load_elements_output, "ward", {"symmetric": True, "element": "ward"}),
|
|
88
|
+
(PandaPowerConverter._pp_load_elements_output, "motor", {"symmetric": True, "element": "motor"}),
|
|
89
|
+
(PandaPowerConverter._pp_asym_loads_output, "asym_load", {}),
|
|
90
|
+
(PandaPowerConverter._pp_asym_gens_output, "asym_gen", {}),
|
|
91
|
+
(PandaPowerConverter._pp_switches_output, "link", {}),
|
|
92
|
+
(PandaPowerConverter._pp_buses_output_3ph, "node", {}),
|
|
93
|
+
(PandaPowerConverter._pp_lines_output_3ph, "line", {}),
|
|
94
|
+
(PandaPowerConverter._pp_ext_grids_output_3ph, "source", {}),
|
|
95
|
+
(PandaPowerConverter._pp_sgens_output_3ph, "sym_gen", {}),
|
|
96
|
+
(PandaPowerConverter._pp_trafos_output_3ph, "transformer", {}),
|
|
97
|
+
(PandaPowerConverter._pp_load_elements_output, "load", {"symmetric": False, "element": "sym_load"}),
|
|
98
|
+
(PandaPowerConverter._pp_load_elements_output, "ward", {"symmetric": False, "element": "ward"}),
|
|
99
|
+
(PandaPowerConverter._pp_load_elements_output, "motor", {"symmetric": False, "element": "motor"}),
|
|
100
|
+
(PandaPowerConverter._pp_asym_loads_output_3ph, "asym_load", {}),
|
|
101
|
+
(PandaPowerConverter._pp_asym_gens_output_3ph, "asym_gen", {}),
|
|
92
102
|
],
|
|
93
103
|
)
|
|
94
|
-
def test_create_pp_output_object__empty(create_fn: Callable[
|
|
104
|
+
def test_create_pp_output_object__empty(create_fn: Callable[..., None], table: str, create_fn_kwargs: Dict[str, Any]):
|
|
95
105
|
# Arrange: No table
|
|
96
106
|
converter = PandaPowerConverter()
|
|
97
107
|
|
|
98
108
|
# Act / Assert
|
|
99
109
|
with patch("power_grid_model_io.converters.pandapower_converter.pd.DataFrame") as mock_df:
|
|
100
|
-
create_fn(converter)
|
|
110
|
+
create_fn(converter, **create_fn_kwargs)
|
|
101
111
|
mock_df.assert_not_called()
|
|
102
112
|
|
|
103
113
|
# Arrange: Empty table
|
|
@@ -105,7 +115,7 @@ def test_create_pp_output_object__empty(create_fn: Callable[[PandaPowerConverter
|
|
|
105
115
|
|
|
106
116
|
# Act / Assert
|
|
107
117
|
with patch("power_grid_model_io.converters.pandapower_converter.pd.DataFrame") as mock_df:
|
|
108
|
-
create_fn(converter)
|
|
118
|
+
create_fn(converter, **create_fn_kwargs)
|
|
109
119
|
mock_df.assert_not_called()
|
|
110
120
|
|
|
111
121
|
|
|
@@ -532,15 +542,34 @@ def test_pp_load_result_accumulate__asym():
|
|
|
532
542
|
|
|
533
543
|
|
|
534
544
|
@pytest.mark.parametrize(
|
|
535
|
-
("output_fn", "table", "load_id_names", "result_suffix"),
|
|
545
|
+
("output_fn", "element", "symmetric", "table", "load_id_names", "result_suffix"),
|
|
536
546
|
[
|
|
537
|
-
(
|
|
538
|
-
|
|
539
|
-
|
|
547
|
+
(
|
|
548
|
+
PandaPowerConverter._pp_load_elements_output,
|
|
549
|
+
"load",
|
|
550
|
+
True,
|
|
551
|
+
"load",
|
|
552
|
+
["const_power", "const_impedance", "const_current"],
|
|
553
|
+
"",
|
|
554
|
+
),
|
|
555
|
+
(PandaPowerConverter._pp_load_elements_output, "motor", True, "motor", ["motor_load"], ""),
|
|
556
|
+
(
|
|
557
|
+
PandaPowerConverter._pp_load_elements_output,
|
|
558
|
+
"load",
|
|
559
|
+
False,
|
|
560
|
+
"load",
|
|
561
|
+
["const_power", "const_impedance", "const_current"],
|
|
562
|
+
"_3ph",
|
|
563
|
+
),
|
|
540
564
|
],
|
|
541
565
|
)
|
|
542
566
|
def test_output_load_types(
|
|
543
|
-
output_fn: Callable[[PandaPowerConverter
|
|
567
|
+
output_fn: Callable[[PandaPowerConverter, str, bool], None],
|
|
568
|
+
element: str,
|
|
569
|
+
symmetric: bool,
|
|
570
|
+
table: str,
|
|
571
|
+
load_id_names: List[str],
|
|
572
|
+
result_suffix: str,
|
|
544
573
|
):
|
|
545
574
|
# Arrange
|
|
546
575
|
converter = PandaPowerConverter()
|
|
@@ -551,7 +580,7 @@ def test_output_load_types(
|
|
|
551
580
|
converter._pp_load_result_accumulate = MagicMock() # type: ignore
|
|
552
581
|
|
|
553
582
|
# Act
|
|
554
|
-
output_fn(converter)
|
|
583
|
+
output_fn(converter, element, symmetric)
|
|
555
584
|
|
|
556
585
|
# Assert
|
|
557
586
|
converter._pp_load_result_accumulate.assert_called_once_with(pp_component_name=table, load_id_names=load_id_names)
|
|
@@ -570,7 +599,7 @@ def test_output_load_ward():
|
|
|
570
599
|
converter._pp_load_result_accumulate = MagicMock()
|
|
571
600
|
|
|
572
601
|
# Act
|
|
573
|
-
converter.
|
|
602
|
+
converter._pp_load_elements_output(element="ward", symmetric=True)
|
|
574
603
|
|
|
575
604
|
# Assert
|
|
576
605
|
converter._pp_load_result_accumulate.assert_called_once_with(pp_component_name="ward", load_id_names=load_id_names)
|
|
@@ -8,8 +8,12 @@ from functools import lru_cache
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from typing import Tuple
|
|
10
10
|
|
|
11
|
+
import numpy as np
|
|
12
|
+
import pandapower.networks as pp_networks
|
|
11
13
|
import pandas as pd
|
|
12
14
|
import pytest
|
|
15
|
+
from pandapower.results import reset_results
|
|
16
|
+
from power_grid_model import PowerGridModel
|
|
13
17
|
from power_grid_model.validation import assert_valid_input_data
|
|
14
18
|
|
|
15
19
|
from power_grid_model_io.converters import PandaPowerConverter
|
|
@@ -278,3 +282,163 @@ def test_attributes_3ph(output_data_3ph: Tuple[PandaPowerData, PandaPowerData],
|
|
|
278
282
|
|
|
279
283
|
# Assert
|
|
280
284
|
pd.testing.assert_series_equal(actual_values, expected_values, atol=5e-4, rtol=1e-4)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _get_total_powers_3ph(net):
|
|
288
|
+
"""
|
|
289
|
+
Calculates total complex power for sources, loads and losses
|
|
290
|
+
Input: Pandapower Network
|
|
291
|
+
Output: [s_ext_grid, s_load, s_loss]
|
|
292
|
+
"""
|
|
293
|
+
s_ext_grid = (
|
|
294
|
+
net.res_ext_grid_3ph.loc[:, ["p_a_mw", "p_b_mw", "p_c_mw"]].sum().sum()
|
|
295
|
+
+ 1j * net.res_ext_grid_3ph.loc[:, ["q_a_mvar", "q_b_mvar", "q_c_mvar"]].sum().sum()
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
if "res_asymmetric_load_3ph" in net:
|
|
299
|
+
s_load_asym = (
|
|
300
|
+
net.res_asymmetric_load_3ph.loc[:, ["p_a_mw", "p_b_mw", "p_c_mw"]].sum().sum()
|
|
301
|
+
+ 1j * net.res_asymmetric_load_3ph.loc[:, ["q_a_mvar", "q_b_mvar", "q_c_mvar"]].sum().sum()
|
|
302
|
+
)
|
|
303
|
+
else:
|
|
304
|
+
s_load_asym = np.complex128()
|
|
305
|
+
|
|
306
|
+
if "res_load_3ph" in net:
|
|
307
|
+
s_load_sym = net.res_load_3ph.loc[:, "p_mw"].sum() + 1j * net.res_load_3ph.loc[:, "q_mvar"].sum()
|
|
308
|
+
else:
|
|
309
|
+
s_load_sym = np.complex128()
|
|
310
|
+
|
|
311
|
+
if "res_motor_3ph" in net:
|
|
312
|
+
s_motor = net.res_motor_3ph.loc[:, "p_mw"].sum() + 1j * net.res_motor_3ph.loc[:, "q_mvar"].sum()
|
|
313
|
+
else:
|
|
314
|
+
s_motor = np.complex128()
|
|
315
|
+
|
|
316
|
+
if ("res_ward_3ph" in net) and (not net.res_ward_3ph.empty):
|
|
317
|
+
s_ward = net.res_ward_3ph.loc[:, "p_mw"].sum() + 1j * net.res_ward_3ph.loc[:, "q_mvar"].sum()
|
|
318
|
+
else:
|
|
319
|
+
s_ward = np.complex128()
|
|
320
|
+
|
|
321
|
+
if ("res_shunt_3ph" in net) and (not net.res_shunt_3ph.empty):
|
|
322
|
+
s_shunt = net.res_shunt_3ph.loc[:, "p_mw"].sum() + 1j * net.res_shunt_3ph.loc[:, "q_mvar"].sum()
|
|
323
|
+
else:
|
|
324
|
+
s_shunt = np.complex128()
|
|
325
|
+
|
|
326
|
+
s_load = s_load_sym + s_load_asym + s_motor + s_ward + s_shunt
|
|
327
|
+
|
|
328
|
+
if "res_line_3ph" in net:
|
|
329
|
+
s_loss_line = (
|
|
330
|
+
net.res_line_3ph.loc[:, ["p_a_l_mw", "p_b_l_mw", "p_c_l_mw"]].sum().sum()
|
|
331
|
+
+ 1j * net.res_line_3ph.loc[:, ["q_a_l_mvar", "q_b_l_mvar", "q_c_l_mvar"]].sum().sum()
|
|
332
|
+
)
|
|
333
|
+
else:
|
|
334
|
+
s_loss_line = np.complex128()
|
|
335
|
+
|
|
336
|
+
if "res_trafo_3ph" in net:
|
|
337
|
+
s_loss_trafo = (
|
|
338
|
+
net.res_trafo_3ph.loc[:, ["p_a_l_mw", "p_b_l_mw", "p_c_l_mw"]].sum().sum()
|
|
339
|
+
+ 1j * net.res_trafo_3ph.loc[:, ["q_a_l_mvar", "q_b_l_mvar", "q_c_l_mvar"]].sum().sum()
|
|
340
|
+
)
|
|
341
|
+
else:
|
|
342
|
+
s_loss_trafo = np.complex128()
|
|
343
|
+
|
|
344
|
+
s_loss = s_loss_line + s_loss_trafo
|
|
345
|
+
return [s_ext_grid, s_load, s_loss]
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def test_output_data_3ph__powers():
|
|
349
|
+
def run_pf_asym_with_pgm(net):
|
|
350
|
+
reset_results(net, "pf_3ph")
|
|
351
|
+
pgm_converter = PandaPowerConverter()
|
|
352
|
+
input_data, _ = pgm_converter.load_input_data(net, make_extra_info=False)
|
|
353
|
+
pgm = PowerGridModel(input_data)
|
|
354
|
+
output_data = pgm.calculate_power_flow(symmetric=False)
|
|
355
|
+
output_tables = pgm_converter.convert(output_data)
|
|
356
|
+
for table in output_tables.keys():
|
|
357
|
+
net[table] = output_tables[table]
|
|
358
|
+
|
|
359
|
+
net = pp_networks.ieee_european_lv_asymmetric()
|
|
360
|
+
pp.create_load(net, 50, 0.1, 0.05)
|
|
361
|
+
run_pf_asym_with_pgm(net)
|
|
362
|
+
s_ext_grid, s_load, s_loss = _get_total_powers_3ph(net)
|
|
363
|
+
assert np.isclose(s_ext_grid, (s_load + s_loss))
|
|
364
|
+
|
|
365
|
+
pp.create_motor(net, 100, 0.1, 0.9)
|
|
366
|
+
pp.create_ward(net, 200, 0.1, 0.05, 0.1, 0.05)
|
|
367
|
+
pp.create_shunt_as_capacitor(net, 150, 0.09, 0)
|
|
368
|
+
run_pf_asym_with_pgm(net)
|
|
369
|
+
s_ext_grid, s_load, s_loss = _get_total_powers_3ph(net)
|
|
370
|
+
assert np.isclose(s_ext_grid, (s_load + s_loss))
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def _get_total_powers(net):
|
|
374
|
+
"""
|
|
375
|
+
Calculates total complex power for sources, loads and losses
|
|
376
|
+
Input: Pandapower Network
|
|
377
|
+
Output: [s_ext_grid, s_load, s_loss]
|
|
378
|
+
"""
|
|
379
|
+
s_ext_grid = net.res_ext_grid.loc[:, "p_mw"].sum() + 1j * net.res_ext_grid.loc[:, "q_mvar"].sum()
|
|
380
|
+
|
|
381
|
+
if "res_asymmetric_load" in net:
|
|
382
|
+
s_load_asym = net.res_asymmetric_load.loc[:, "p_mw"].sum() + 1j * net.res_asymmetric_load.loc[:, "q_mvar"].sum()
|
|
383
|
+
else:
|
|
384
|
+
s_load_asym = np.complex128()
|
|
385
|
+
|
|
386
|
+
if "res_load" in net:
|
|
387
|
+
s_load_sym = net.res_load.loc[:, "p_mw"].sum() + 1j * net.res_load.loc[:, "q_mvar"].sum()
|
|
388
|
+
else:
|
|
389
|
+
s_load_sym = np.complex128()
|
|
390
|
+
|
|
391
|
+
if "res_motor" in net:
|
|
392
|
+
s_motor = net.res_motor.loc[:, "p_mw"].sum() + 1j * net.res_motor.loc[:, "q_mvar"].sum()
|
|
393
|
+
else:
|
|
394
|
+
s_motor = np.complex128()
|
|
395
|
+
|
|
396
|
+
if "res_ward" in net:
|
|
397
|
+
s_ward = net.res_ward.loc[:, "p_mw"].sum() + 1j * net.res_ward.loc[:, "q_mvar"].sum()
|
|
398
|
+
else:
|
|
399
|
+
s_ward = np.complex128()
|
|
400
|
+
|
|
401
|
+
if "res_shunt" in net:
|
|
402
|
+
s_shunt = net.res_shunt.loc[:, "p_mw"].sum() + 1j * net.res_shunt.loc[:, "q_mvar"].sum()
|
|
403
|
+
else:
|
|
404
|
+
s_shunt = np.complex128()
|
|
405
|
+
|
|
406
|
+
s_load = s_load_sym + s_load_asym + s_motor + s_ward + s_shunt
|
|
407
|
+
|
|
408
|
+
if "res_line" in net:
|
|
409
|
+
s_loss_line = net.res_line.loc[:, "pl_mw"].sum() + 1j * net.res_line.loc[:, "ql_mvar"].sum()
|
|
410
|
+
else:
|
|
411
|
+
s_loss_line = np.complex128()
|
|
412
|
+
|
|
413
|
+
if "res_trafo" in net:
|
|
414
|
+
s_loss_trafo = net.res_trafo.loc[:, "pl_mw"].sum() + 1j * net.res_trafo.loc[:, "ql_mvar"].sum()
|
|
415
|
+
else:
|
|
416
|
+
s_loss_trafo = np.complex128()
|
|
417
|
+
|
|
418
|
+
s_loss = s_loss_line + s_loss_trafo
|
|
419
|
+
return [s_ext_grid, s_load, s_loss]
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
def test_output_data__powers():
|
|
423
|
+
def run_pf_sym_with_pgm(net):
|
|
424
|
+
reset_results(net, "pf")
|
|
425
|
+
pgm_converter = PandaPowerConverter()
|
|
426
|
+
input_data, _ = pgm_converter.load_input_data(net, make_extra_info=False)
|
|
427
|
+
pgm = PowerGridModel(input_data)
|
|
428
|
+
output_data = pgm.calculate_power_flow(symmetric=True)
|
|
429
|
+
output_tables = pgm_converter.convert(output_data)
|
|
430
|
+
for table in output_tables.keys():
|
|
431
|
+
net[table] = output_tables[table]
|
|
432
|
+
|
|
433
|
+
net = pp_networks.ieee_european_lv_asymmetric()
|
|
434
|
+
pp.create_load(net, 50, 0.1, 0.05)
|
|
435
|
+
run_pf_sym_with_pgm(net)
|
|
436
|
+
s_ext_grid, s_load, s_loss = _get_total_powers(net)
|
|
437
|
+
assert np.isclose(s_ext_grid, (s_load + s_loss))
|
|
438
|
+
|
|
439
|
+
pp.create_motor(net, 100, 0.1, 0.9)
|
|
440
|
+
pp.create_ward(net, 200, 0.1, 0.05, 0.1, 0.05)
|
|
441
|
+
pp.create_shunt_as_capacitor(net, 150, 0.09, 0)
|
|
442
|
+
run_pf_sym_with_pgm(net)
|
|
443
|
+
s_ext_grid, s_load, s_loss = _get_total_powers(net)
|
|
444
|
+
assert np.isclose(s_ext_grid, (s_load + s_loss))
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.17
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/__init__.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/config/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/__init__.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/auto_id.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/dict.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/download.py
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/json.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/modules.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/parsing.py
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/src/power_grid_model_io/utils/zip.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/config/dummy_mapping.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_input_data.json
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pgm_output_data.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/pandapower/pp_validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_en.json
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/pgm_input_data_nl.json
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_9_5_en.yaml
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_9_5_nl.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en.xlsx.license
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_en_9_7.xlsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_nl.xlsx.license
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/vision/vision_validation.vnf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/data/zip/foo-bar.zip.license
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_stores/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_types/test_data_types.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/data_types/test_tabular_data.py
RENAMED
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/test_filters.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/functions/test_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_field_mapping.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_unit_mapping.py
RENAMED
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/mappings/test_value_mapping.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/unit/utils/test_uuid_excel_cvtr.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/converters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{power_grid_model_io-1.3.17 → power_grid_model_io-1.3.18}/tests/validation/test_test_utils.py
RENAMED
|
File without changes
|
|
File without changes
|