power-grid-model-io 1.3.17__tar.gz → 1.3.19__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.

Files changed (144) hide show
  1. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/PKG-INFO +1 -1
  2. power_grid_model_io-1.3.19/PYPI_VERSION +1 -0
  3. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/pandapower_converter.py +44 -68
  4. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io.egg-info/PKG-INFO +1 -1
  5. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_pandapower_converter_output.py +68 -39
  6. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/converters/test_pandapower_converter_output.py +164 -0
  7. power_grid_model_io-1.3.17/PYPI_VERSION +0 -1
  8. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/LICENSE +0 -0
  9. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/MANIFEST.in +0 -0
  10. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/README.md +0 -0
  11. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/VERSION +0 -0
  12. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/pyproject.toml +0 -0
  13. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/setup.cfg +0 -0
  14. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/setup.py +0 -0
  15. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/__init__.py +0 -0
  16. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/__init__.py +0 -0
  17. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/examples/__init__.py +0 -0
  18. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/examples/multipliers.yaml +0 -0
  19. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/excel/__init__.py +0 -0
  20. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/excel/vision_en.yaml +0 -0
  21. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/excel/vision_en_9_7.yaml +0 -0
  22. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/excel/vision_en_9_8.yaml +0 -0
  23. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/config/excel/vision_nl.yaml +0 -0
  24. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/__init__.py +0 -0
  25. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/base_converter.py +0 -0
  26. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/pgm_json_converter.py +0 -0
  27. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/tabular_converter.py +0 -0
  28. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/converters/vision_excel_converter.py +0 -0
  29. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/__init__.py +0 -0
  30. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/base_data_store.py +0 -0
  31. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/csv_dir_store.py +0 -0
  32. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/excel_file_store.py +0 -0
  33. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/json_file_store.py +0 -0
  34. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_stores/vision_excel_file_store.py +0 -0
  35. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_types/__init__.py +0 -0
  36. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_types/_data_types.py +0 -0
  37. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/data_types/tabular_data.py +0 -0
  38. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/functions/__init__.py +0 -0
  39. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/functions/_functions.py +0 -0
  40. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/functions/filters.py +0 -0
  41. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/functions/phase_to_phase.py +0 -0
  42. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/__init__.py +0 -0
  43. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/field_mapping.py +0 -0
  44. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/multiplier_mapping.py +0 -0
  45. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/tabular_mapping.py +0 -0
  46. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/unit_mapping.py +0 -0
  47. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/mappings/value_mapping.py +0 -0
  48. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/py.typed +0 -0
  49. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/__init__.py +0 -0
  50. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/auto_id.py +0 -0
  51. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/dict.py +0 -0
  52. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/download.py +0 -0
  53. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/excel_ambiguity_checker.py +0 -0
  54. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/json.py +0 -0
  55. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/modules.py +0 -0
  56. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/parsing.py +0 -0
  57. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/uuid_excel_cvtr.py +0 -0
  58. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io/utils/zip.py +0 -0
  59. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io.egg-info/SOURCES.txt +0 -0
  60. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io.egg-info/dependency_links.txt +0 -0
  61. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io.egg-info/requires.txt +0 -0
  62. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/src/power_grid_model_io.egg-info/top_level.txt +0 -0
  63. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/__init__.py +0 -0
  64. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/conftest.py +0 -0
  65. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/config/dummy_mapping.yaml +0 -0
  66. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/config/mapping.yaml +0 -0
  67. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_asym_output_data.json +0 -0
  68. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_asym_output_data.json.license +0 -0
  69. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_input_data.json +0 -0
  70. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_input_data.json.license +0 -0
  71. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_output_data.json +0 -0
  72. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pgm_output_data.json.license +0 -0
  73. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_3ph_output.json +0 -0
  74. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_3ph_output.json.license +0 -0
  75. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json +0 -0
  76. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json.license +0 -0
  77. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_output.json +0 -0
  78. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_v2_net_output.json.license +0 -0
  79. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/pandapower/pp_validation.py +0 -0
  80. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/excel_ambiguity_check_data.xlsx +0 -0
  81. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/excel_ambiguity_check_data.xlsx.license +0 -0
  82. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/pgm_input_data_en.json +0 -0
  83. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/pgm_input_data_en.json.license +0 -0
  84. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/pgm_input_data_nl.json +0 -0
  85. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/pgm_input_data_nl.json.license +0 -0
  86. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_9_5_en.yaml +0 -0
  87. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_9_5_nl.yaml +0 -0
  88. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_en.xlsx +0 -0
  89. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_en.xlsx.license +0 -0
  90. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_en_9_7.xlsx +0 -0
  91. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_en_9_7.xlsx.license +0 -0
  92. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_nl.xlsx +0 -0
  93. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_nl.xlsx.license +0 -0
  94. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_validation.vnf +0 -0
  95. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/vision/vision_validation.vnf.license +0 -0
  96. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/zip/foo-bar.zip +0 -0
  97. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/zip/foo-bar.zip.license +0 -0
  98. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/zip/foo.zip +0 -0
  99. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/data/zip/foo.zip.license +0 -0
  100. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/test_utils.py +0 -0
  101. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/__init__.py +0 -0
  102. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/conftest.py +0 -0
  103. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/__init__.py +0 -0
  104. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_base_converter.py +0 -0
  105. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_pandapower_converter_input.py +0 -0
  106. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_pgm_json_converter.py +0 -0
  107. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_tabular_converter.py +0 -0
  108. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/converters/test_vision_excel_converter.py +0 -0
  109. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/__init__.py +0 -0
  110. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/test_base_data_store.py +0 -0
  111. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/test_csv_dir_store.py +0 -0
  112. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/test_excel_file_store.py +0 -0
  113. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/test_json_file_store.py +0 -0
  114. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_stores/test_vision_excel_file_store.py +0 -0
  115. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_types/__init__.py +0 -0
  116. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_types/test_data_types.py +0 -0
  117. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/data_types/test_tabular_data.py +0 -0
  118. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/functions/__init__.py +0 -0
  119. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/functions/test_filters.py +0 -0
  120. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/functions/test_functions.py +0 -0
  121. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/functions/test_phase_to_phase.py +0 -0
  122. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/__init__.py +0 -0
  123. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/test_field_mapping.py +0 -0
  124. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/test_multiplier_mapping.py +0 -0
  125. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/test_tabular_mapping.py +0 -0
  126. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/test_unit_mapping.py +0 -0
  127. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/mappings/test_value_mapping.py +0 -0
  128. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/__init__.py +0 -0
  129. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_auto_id.py +0 -0
  130. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_dict.py +0 -0
  131. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_download.py +0 -0
  132. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_json.py +0 -0
  133. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_modules.py +0 -0
  134. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_parsing.py +0 -0
  135. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_uuid_excel_cvtr.py +0 -0
  136. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/unit/utils/test_zip.py +0 -0
  137. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/utils.py +0 -0
  138. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/__init__.py +0 -0
  139. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/conftest.py +0 -0
  140. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/converters/__init__.py +0 -0
  141. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/converters/test_pandapower_converter_input.py +0 -0
  142. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/converters/test_vision_excel_converter.py +0 -0
  143. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/test_test_utils.py +0 -0
  144. {power_grid_model_io-1.3.17 → power_grid_model_io-1.3.19}/tests/validation/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.17
3
+ Version: 1.3.19
4
4
  Summary: Power Grid Model Input/Output
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -0,0 +1 @@
1
+ 1.3.19
@@ -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._pp_loads_output()
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 remaining components
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._pp_loads_output_3ph()
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 _pp_loads_output(self):
1564
+ def _pp_load_elements_output(self, element, symmetric):
1564
1565
  """
1565
- This function converts a power-grid-model Symmetrical Load output array to a Load Dataframe of PandaPower.
1566
-
1567
- Returns:
1568
- a PandaPower Dataframe for the Load component
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
- load_id_names = ["const_power", "const_impedance", "const_current"]
1571
- assert "res_load" not in self.pp_output_data
1572
-
1573
- if (
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
- assert "res_motor" not in self.pp_output_data
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 ("motor", load_id_names[0]) not in self.idx
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 "res_motor" not in self.pp_output_data
1619
- self.pp_output_data["res_motor"] = self._pp_load_result_accumulate(
1620
- pp_component_name="motor", load_id_names=load_id_names
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 _pp_loads_output_3ph(self):
2106
+ def _pp_shunts_output_3ph(self):
2135
2107
  """
2136
- This function converts a power-grid-model Symmetrical Load output array to a Load Dataframe of PandaPower.
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 Load component
2111
+ a PandaPower Dataframe for the Shunt component
2140
2112
  """
2141
- load_id_names = ["const_power", "const_impedance", "const_current"]
2142
- if (
2143
- ComponentType.sym_load not in self.pgm_output_data
2144
- or self.pgm_output_data[ComponentType.sym_load].size == 0
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
- # Store the results, while assuring that we are not overwriting any data
2150
- assert "res_load_3ph" not in self.pp_output_data
2151
- self.pp_output_data["res_load_3ph"] = self._pp_load_result_accumulate(
2152
- pp_component_name="load", load_id_names=load_id_names
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
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.17
3
+ Version: 1.3.19
4
4
  Summary: Power Grid Model Input/Output
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -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
- converter._pp_loads_output.assert_called_once_with()
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) == 8
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
- converter._pp_loads_output_3ph.assert_called_once_with()
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._pp_loads_output, "sym_load"),
79
- (PandaPowerConverter._pp_asym_loads_output, "asym_load"),
80
- (PandaPowerConverter._pp_asym_gens_output, "asym_gen"),
81
- (PandaPowerConverter._pp_ward_output, "ward"),
82
- (PandaPowerConverter._pp_motor_output, "motor"),
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._pp_loads_output_3ph, "sym_load"),
90
- (PandaPowerConverter._pp_asym_loads_output_3ph, "asym_load"),
91
- (PandaPowerConverter._pp_asym_gens_output_3ph, "asym_gen"),
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[[PandaPowerConverter], None], table: str):
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
- (PandaPowerConverter._pp_loads_output, "load", ["const_power", "const_impedance", "const_current"], ""),
538
- (PandaPowerConverter._pp_motor_output, "motor", ["motor_load"], ""),
539
- (PandaPowerConverter._pp_loads_output_3ph, "load", ["const_power", "const_impedance", "const_current"], "_3ph"),
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], None], table: str, load_id_names: List[str], result_suffix: str
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._pp_ward_output()
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