simbench 1.5.2__tar.gz → 1.6.0__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.
Files changed (141) hide show
  1. {simbench-1.5.2 → simbench-1.6.0}/CHANGELOG.rst +13 -0
  2. {simbench-1.5.2 → simbench-1.6.0}/MANIFEST.in +1 -0
  3. {simbench-1.5.2 → simbench-1.6.0}/PKG-INFO +5 -5
  4. {simbench-1.5.2 → simbench-1.6.0}/pyproject.toml +4 -5
  5. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/auxiliary.py +44 -3
  6. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/csv_data_manipulation.py +6 -4
  7. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/csv_pp_converter.py +44 -31
  8. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/format_information.py +4 -1
  9. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/pp_net_manipulation.py +30 -9
  10. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/profiles.py +1 -1
  11. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_auxiliary.py +15 -0
  12. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_csv_pp_converter.py +5 -5
  13. simbench-1.6.0/simbench/test/converter/test_network_output_folder/LineType.csv +3 -0
  14. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/TransformerType.csv +1 -1
  15. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_pp_net_manipulation.py +2 -6
  16. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/networks/test_extract_grids_from_csv.py +1 -8
  17. {simbench-1.5.2 → simbench-1.6.0}/simbench.egg-info/PKG-INFO +5 -5
  18. {simbench-1.5.2 → simbench-1.6.0}/simbench.egg-info/SOURCES.txt +0 -1
  19. {simbench-1.5.2 → simbench-1.6.0}/simbench.egg-info/requires.txt +1 -1
  20. simbench-1.5.2/requirements.txt +0 -2
  21. simbench-1.5.2/simbench/test/converter/test_network_output_folder/LineType.csv +0 -3
  22. {simbench-1.5.2 → simbench-1.6.0}/AUTHORS +0 -0
  23. {simbench-1.5.2 → simbench-1.6.0}/LICENSE +0 -0
  24. {simbench-1.5.2 → simbench-1.6.0}/README.rst +0 -0
  25. {simbench-1.5.2 → simbench-1.6.0}/setup.cfg +0 -0
  26. {simbench-1.5.2 → simbench-1.6.0}/setup.py +0 -0
  27. {simbench-1.5.2 → simbench-1.6.0}/simbench/__init__.py +0 -0
  28. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/__init__.py +0 -0
  29. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/read_and_write.py +0 -0
  30. {simbench-1.5.2 → simbench-1.6.0}/simbench/converter/voltLvl.py +0 -0
  31. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Coordinates.csv +0 -0
  32. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/ExternalNet.csv +0 -0
  33. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Line.csv +0 -0
  34. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/LineType.csv +0 -0
  35. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Load.csv +0 -0
  36. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/LoadProfile.csv +0 -0
  37. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Measurement.csv +0 -0
  38. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Node.csv +0 -0
  39. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/PowerPlant.csv +0 -0
  40. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/PowerPlantProfile.csv +0 -0
  41. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/RES.csv +0 -0
  42. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/RESProfile.csv +0 -0
  43. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/StudyCases.csv +0 -0
  44. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Substation.csv +0 -0
  45. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Switch.csv +0 -0
  46. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/Transformer.csv +0 -0
  47. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-0-sw/TransformerType.csv +0 -0
  48. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Coordinates.csv +0 -0
  49. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/DCLineType.csv +0 -0
  50. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/ExternalNet.csv +0 -0
  51. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Line.csv +0 -0
  52. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/LineType.csv +0 -0
  53. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Load.csv +0 -0
  54. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/LoadProfile.csv +0 -0
  55. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Measurement.csv +0 -0
  56. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Node.csv +0 -0
  57. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/PowerPlant.csv +0 -0
  58. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/PowerPlantProfile.csv +0 -0
  59. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/RES.csv +0 -0
  60. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/RESProfile.csv +0 -0
  61. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Storage.csv +0 -0
  62. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/StorageProfile.csv +0 -0
  63. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/StudyCases.csv +0 -0
  64. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Substation.csv +0 -0
  65. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Switch.csv +0 -0
  66. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/Transformer.csv +0 -0
  67. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-1-sw/TransformerType.csv +0 -0
  68. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Coordinates.csv +0 -0
  69. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/DCLineType.csv +0 -0
  70. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/ExternalNet.csv +0 -0
  71. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Line.csv +0 -0
  72. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/LineType.csv +0 -0
  73. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Load.csv +0 -0
  74. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/LoadProfile.csv +0 -0
  75. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Measurement.csv +0 -0
  76. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Node.csv +0 -0
  77. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/PowerPlant.csv +0 -0
  78. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/PowerPlantProfile.csv +0 -0
  79. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/RES.csv +0 -0
  80. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/RESProfile.csv +0 -0
  81. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Storage.csv +0 -0
  82. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/StorageProfile.csv +0 -0
  83. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/StudyCases.csv +0 -0
  84. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Substation.csv +0 -0
  85. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Switch.csv +0 -0
  86. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/Transformer.csv +0 -0
  87. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/1-complete_data-mixed-all-2-sw/TransformerType.csv +0 -0
  88. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/__init__.py +0 -0
  89. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/extract_simbench_grids_from_csv.py +0 -0
  90. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/loadcases.py +0 -0
  91. {simbench-1.5.2 → simbench-1.6.0}/simbench/networks/simbench_code.py +0 -0
  92. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/__init__.py +0 -0
  93. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/__init__.py +0 -0
  94. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Coordinates.csv +0 -0
  95. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/DCLineType.csv +0 -0
  96. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/ExternalNet.csv +0 -0
  97. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Line.csv +0 -0
  98. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/LineType.csv +0 -0
  99. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Load.csv +0 -0
  100. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/LoadProfile.csv +0 -0
  101. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Measurement.csv +0 -0
  102. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Node.csv +0 -0
  103. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/PowerPlant.csv +0 -0
  104. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/PowerPlantProfile.csv +0 -0
  105. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/RES.csv +0 -0
  106. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/RESProfile.csv +0 -0
  107. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Shunt.csv +0 -0
  108. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Storage.csv +0 -0
  109. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/StorageProfile.csv +0 -0
  110. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/StudyCases.csv +0 -0
  111. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Substation.csv +0 -0
  112. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Switch.csv +0 -0
  113. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/Transformer.csv +0 -0
  114. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network/TransformerType.csv +0 -0
  115. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Coordinates.csv +0 -0
  116. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/DCLineType.csv +0 -0
  117. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/ExternalNet.csv +0 -0
  118. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Line.csv +0 -0
  119. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Load.csv +0 -0
  120. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/LoadProfile.csv +0 -0
  121. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Measurement.csv +0 -0
  122. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Node.csv +0 -0
  123. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/PowerPlant.csv +0 -0
  124. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/PowerPlantProfile.csv +0 -0
  125. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/RES.csv +0 -0
  126. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/RESProfile.csv +0 -0
  127. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Shunt.csv +0 -0
  128. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Storage.csv +0 -0
  129. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/StorageProfile.csv +0 -0
  130. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/StudyCases.csv +0 -0
  131. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Substation.csv +0 -0
  132. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Switch.csv +0 -0
  133. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_network_output_folder/Transformer.csv +0 -0
  134. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/converter/test_voltLvl.py +0 -0
  135. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/networks/__init__.py +0 -0
  136. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/networks/test_profiles.py +0 -0
  137. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/networks/test_simbench_code.py +0 -0
  138. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/networks/test_simbench_loadcases.py +0 -0
  139. {simbench-1.5.2 → simbench-1.6.0}/simbench/test/run_tests.py +0 -0
  140. {simbench-1.5.2 → simbench-1.6.0}/simbench.egg-info/dependency_links.txt +0 -0
  141. {simbench-1.5.2 → simbench-1.6.0}/simbench.egg-info/top_level.txt +0 -0
@@ -1,6 +1,19 @@
1
1
  Change Log
2
2
  =============
3
3
 
4
+ [1.6.0] - 2024-04-09
5
+ ----------------------
6
+ - [CHANGED] support pandapower geojson, released with pandapower version 3.0.0
7
+ - [ADDED] support pandapower parameters step_dependency_table and tap_dependency_table, released with pandapower version 3.0.0
8
+ - [CHANGED] drop python 3.8 support
9
+ - [FIXED] fix ValueError raise according to GitHub issue #56
10
+ - [CHANGED] rename parameter csv2pp parameter `no_generic_coord` by `fill_bus_geo_by_generic_data`
11
+
12
+ [1.5.3] - 2024-04-23
13
+ ----------------------
14
+ - [FIXED] Bringing together develop and master with all changes of the release process
15
+ - [ADDED] generalization and test for auxiliary function :code:`to_numeric_ignored_errors()`
16
+
4
17
  [1.5.2] - 2024-04-09
5
18
  ----------------------
6
19
  - [CHANGED] readded copyright notice to setup.py and updated date
@@ -4,5 +4,6 @@ global-include *.csv
4
4
  global-include *.json
5
5
  global-include *.txt
6
6
 
7
+ prune .git*
7
8
  prune doc*
8
9
  prune tutorials*
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: simbench
3
- Version: 1.5.2
3
+ Version: 1.6.0
4
4
  Summary: Electrical Power System Benchmark Models.
5
5
  Author-email: Steffen Meinecke <steffen.meinecke@uni-kassel.de>
6
6
  Maintainer-email: simbench Developers <simbench@uni-kassel.de>
@@ -56,16 +56,15 @@ Classifier: Natural Language :: English
56
56
  Classifier: Operating System :: OS Independent
57
57
  Classifier: Programming Language :: Python
58
58
  Classifier: Programming Language :: Python :: 3
59
- Classifier: Programming Language :: Python :: 3.8
60
59
  Classifier: Programming Language :: Python :: 3.9
61
60
  Classifier: Programming Language :: Python :: 3.10
62
61
  Classifier: Programming Language :: Python :: 3.11
63
62
  Classifier: Programming Language :: Python :: 3.12
64
- Requires-Python: >=3.8
63
+ Requires-Python: >=3.9
65
64
  Description-Content-Type: text/x-rst
66
65
  License-File: LICENSE
67
66
  License-File: AUTHORS
68
- Requires-Dist: pandapower>=2.12.1
67
+ Requires-Dist: pandapower>=3.0.0
69
68
  Provides-Extra: docs
70
69
  Requires-Dist: numpydoc; extra == "docs"
71
70
  Requires-Dist: sphinx; extra == "docs"
@@ -103,6 +102,7 @@ Requires-Dist: numba>=0.25; extra == "all"
103
102
  Requires-Dist: lightsim2grid>=0.8.1; extra == "all"
104
103
  Requires-Dist: geopandas; extra == "all"
105
104
  Requires-Dist: matplotlib; extra == "all"
105
+ Dynamic: license-file
106
106
 
107
107
 
108
108
  .. image:: https://simbench.de/wp-content/uploads/2019/01/logo.png
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simbench"
7
- version = "1.5.2"
7
+ version = "1.6.0"
8
8
  authors = [
9
9
  { name = "Steffen Meinecke", email = "steffen.meinecke@uni-kassel.de" }
10
10
  ]
@@ -14,7 +14,7 @@ maintainers = [
14
14
  description = "Electrical Power System Benchmark Models."
15
15
  readme = "README.rst"
16
16
  license = { file = "LICENSE" }
17
- requires-python = ">=3.8"
17
+ requires-python = ">=3.9"
18
18
  classifiers = [
19
19
  "Development Status :: 5 - Production/Stable",
20
20
  "Environment :: Console",
@@ -27,14 +27,13 @@ classifiers = [
27
27
  "Programming Language :: Python",
28
28
  "Programming Language :: Python :: 3",
29
29
  # Add the specific Python versions supported here, e.g.:
30
- "Programming Language :: Python :: 3.8",
31
30
  "Programming Language :: Python :: 3.9",
32
31
  "Programming Language :: Python :: 3.10",
33
32
  "Programming Language :: Python :: 3.11",
34
33
  "Programming Language :: Python :: 3.12"
35
34
  ]
36
35
  dependencies = [
37
- "pandapower>=2.12.1"
36
+ "pandapower>=3.0.0"
38
37
  ]
39
38
  keywords = [
40
39
  "benchmark grid", "power system", "network", "grid planning", "grid operation", "grid generation methodology", "comparability", "reproducibility", "electricity", "energy", "engineering", "simulation", "simbench", "time series", "future scenarios"
@@ -72,4 +71,4 @@ find = {}
72
71
  addopts = ["--strict-markers"]
73
72
  markers = [
74
73
  "slow: marks tests as slow (deselect with '-m \"not slow\"'), e.g. in run_fast_tests"
75
- ]
74
+ ]
@@ -29,14 +29,55 @@ def ensure_iterability(var, len_=None):
29
29
  return var
30
30
 
31
31
 
32
- def to_numeric_ignored_errors(data):
32
+ def to_numeric_ignored_errors(data, **kwargs):
33
+ """Wrapper function for pandas.to_numeric(). Needed to emulate previous behavior with deprecated
34
+ errors="ignore".
35
+
36
+ The issue covered by this function is discussed at https://github.com/pandas-dev/pandas/issues/54467.
37
+ `df2 = df1.apply(pd.to_numeric, errors='coerce')` and `df2=df2.fillna(df1)` is an alternative way.
38
+
39
+ Parameters
40
+ ----------
41
+ data : Series|DataFrame
42
+ data to convert its dtypes
43
+
44
+ Returns
45
+ -------
46
+ Series|DataFrame
47
+ converted data
48
+
49
+ Examples
50
+ --------
51
+ >>> df = pd.DataFrame([[1, 2, 2.0], [1.2, 3, 4.0], ["a", "b", "D"]]).iloc[:2]
52
+ >>> df.dtypes # input with nonnumeric dtypes, although data values are numerics
53
+ 0 object
54
+ 1 object
55
+ 2 object
56
+ dtype: object
57
+ >>> to_numeric_ignored_errors(df).dtypes # stops when numeric dtype is found
58
+ 0 float64
59
+ 1 int64
60
+ 2 float64
61
+ dtype: object
62
+ >>> to_numeric_ignored_errors(df, downcast="float").dtypes # (down)casts to float dtype
63
+ 0 float32
64
+ 1 float32
65
+ 2 float32
66
+ dtype: object
67
+ >>> to_numeric_ignored_errors(df, downcast="integer").dtypes # (down)casts to integer dtype if possible
68
+ 0 float64
69
+ 1 int8
70
+ 2 int8
71
+ dtype: object
72
+ """
33
73
  if isinstance(data, pd.Series):
34
74
  try:
35
- return pd.to_numeric(data)
75
+ return pd.to_numeric(data, **kwargs)
36
76
  except (ValueError, TypeError):
37
77
  return data
38
78
  elif isinstance(data, pd.DataFrame):
39
- return pd.concat([to_numeric_ignored_errors(data[col]) for col in data.columns], axis=1)
79
+ return pd.concat([to_numeric_ignored_errors(data[col], **kwargs) for col in data.columns],
80
+ axis=1)
40
81
  else:
41
82
  raise TypeError(f"{type(data)=} is not a pandas.Series or a pandas.DataFrame.")
42
83
 
@@ -154,10 +154,12 @@ def _add_phys_type_and_vm_va_setpoints_to_element_tables(csv_data):
154
154
  def _extend_coordinates_to_node_shape(csv_data):
155
155
  """ Extends the Coordinates table to the shape of Nodes to enable copying simply to bus_geodata.
156
156
  """
157
- bus_geodata = pd.DataFrame([], index=csv_data["Node"].index, columns=["x", "y"])
157
+ geo = pd.Series(None, index=csv_data["Node"].index, name="geo", dtype=object)
158
158
  with_coord = ~csv_data["Node"]["coordID"].isnull()
159
159
  idx_in_coordID = idx_in_2nd_array(csv_data["Node"]["coordID"].loc[with_coord].values,
160
160
  csv_data["Coordinates"]["id"].values)
161
- bus_geodata.loc[with_coord, ["x", "y"]] = csv_data["Coordinates"].loc[idx_in_coordID,
162
- ["x", "y"]].values
163
- csv_data["Coordinates"] = bus_geodata
161
+ geo.loc[with_coord] = [f'{{"type":"Point", "coordinates":[{x}, {y}]}}' for x, y in zip(
162
+ csv_data["Coordinates"].loc[idx_in_coordID, "x"].values,
163
+ csv_data["Coordinates"].loc[idx_in_coordID, "y"].values,
164
+ )]
165
+ csv_data["Node"]["geo"] = geo
@@ -3,7 +3,10 @@
3
3
  # contributors (see AUTHORS file for details). All rights reserved.
4
4
 
5
5
  # This is the csv_pp_converter for the simbench project.
6
- # pandapower 2.0.1 <-> simbench format (reasled status from 25.04.2019)
6
+
7
+ # OPTIONAL IMPROVEMENTS for compatibility with future pandapower changes: constructing the
8
+ # dataframes net[element_table] by using the create_buses(), create_lines(), ... functions
9
+ # which where fast enough or not available at the time SimBench was developed.
7
10
 
8
11
  import os
9
12
  import pandas as pd
@@ -28,7 +31,7 @@ from simbench.converter.read_and_write import _init_csv_tables
28
31
  from simbench.converter.pp_net_manipulation import _extend_pandapower_net_columns, \
29
32
  _add_dspf_calc_type_and_phys_type_columns, _add_vm_va_setpoints_to_buses, \
30
33
  _prepare_res_bus_table, replace_branch_switches, create_branch_switches, _add_coordID, \
31
- _set_vm_setpoint_to_trafos
34
+ _set_vm_setpoint_to_trafos, _set_dependency_table_parameters
32
35
  from simbench.converter.csv_data_manipulation import *
33
36
  from simbench.converter.csv_data_manipulation import _extend_coordinates_to_node_shape, \
34
37
  _sort_switch_nodes_and_prepare_element_and_et, \
@@ -42,7 +45,7 @@ logger = logging.getLogger(__name__)
42
45
  __author__ = 'smeinecke'
43
46
 
44
47
 
45
- def csv2pp(path, sep=';', add_folder_name=None, nrows=None, no_generic_coord=False):
48
+ def csv2pp(path, sep=';', add_folder_name=None, nrows=None, fill_bus_geo_by_generic_data=True):
46
49
  """
47
50
  Conversion function from simbench csv format to pandapower.
48
51
 
@@ -58,8 +61,9 @@ def csv2pp(path, sep=';', add_folder_name=None, nrows=None, no_generic_coord=Fal
58
61
  **nrows** (int, None) - number of rows to be read for profiles. If None, all rows will be
59
62
  read.
60
63
 
61
- **no_generic_coord** (bool, False) - if True, no generic coordinates are created in case of
62
- missing geodata.
64
+ **fill_bus_geo_by_generic_data** (bool, False) - if False, no generic coordinates are
65
+ created in case of missing geo data. If True, generic coordinates are create when at least
66
+ one bus misses geo data.
63
67
 
64
68
  OUTPUT:
65
69
  **net** (pandapowerNet) - the created pandapower net from csv files data
@@ -79,17 +83,12 @@ def csv2pp(path, sep=';', add_folder_name=None, nrows=None, no_generic_coord=Fal
79
83
  csv_data = read_csv_data(path, sep, nrows=nrows)
80
84
 
81
85
  # run net creation
82
- net = csv_data2pp(csv_data)
83
-
84
- # ensure geodata
85
- if not no_generic_coord and any(pd.isnull(net.bus_geodata.x) | pd.isnull(net.bus_geodata.y)):
86
- del net.bus_geodata
87
- create_generic_coordinates(net)
86
+ net = csv_data2pp(csv_data, fill_bus_geo_by_generic_data=fill_bus_geo_by_generic_data)
88
87
 
89
88
  return net
90
89
 
91
90
 
92
- def csv_data2pp(csv_data):
91
+ def csv_data2pp(csv_data, fill_bus_geo_by_generic_data=False):
93
92
  """ Internal functionality of csv2pp, but with a given dict of csv_data as input instead of
94
93
  csv files. """
95
94
  # --- initializations
@@ -127,9 +126,21 @@ def csv_data2pp(csv_data):
127
126
  create_branch_switches(net)
128
127
  net.bus.loc[net.bus.type == "multi_auxiliary", "type"] = "auxiliary"
129
128
  _set_vm_setpoint_to_trafos(net, csv_data)
129
+ _set_dependency_table_parameters(net)
130
130
  _csv_types_to_pp2(net)
131
131
  ensure_bus_index_columns_as_int(net)
132
132
 
133
+ # --- ensure geodata
134
+ if not fill_bus_geo_by_generic_data:
135
+ if n_missing_geo_data := sum(pd.isnull(net.bus.geo) | (net.bus.geo == "")):
136
+ if n_missing_geo_data != len(net.bus):
137
+ logger.info(f"Due to {fill_bus_geo_by_generic_data=}, new generic geo data are "
138
+ f"created and overwrite existing bus geo data ("
139
+ f"{len(net.bus)-n_missing_geo_data} buses had geo data, "
140
+ f"{n_missing_geo_data} buses missed geo data).")
141
+ net.bus["geo"] = None
142
+ create_generic_coordinates(net)
143
+
133
144
  return net
134
145
 
135
146
 
@@ -222,23 +233,23 @@ def pp2csv_data(net1, export_pp_std_types=False, drop_inactive_elements=True,
222
233
  csv_data = _init_csv_tables(['elements', 'profiles', 'types', 'res_elements'])
223
234
  aux_nodes_are_reserved = reserved_aux_node_names is not None
224
235
 
236
+ if ("step_dependency_table" in net1.trafo.columns and net1.trafo.step_dependency_table.any()) \
237
+ or \
238
+ ("step_dependency_table" in net1.shunt.columns and net1.shunt.step_dependency_table.any()):
239
+ logger.warning("'step_dependency_table' is not supported in SimBench's csv data format.")
240
+
225
241
  # --- net data preparation for converting
226
242
  _extend_pandapower_net_columns(net)
227
243
  if drop_inactive_elements:
228
244
  # attention: trafo3ws are not considered in current version of drop_inactive_elements()
229
245
  pp.drop_inactive_elements(net, respect_switches=False)
230
- check_results = pp.deviation_from_std_type(net)
231
- if check_results:
246
+ dev_from_std = pp.deviation_from_std_type(net)
247
+ if dev_from_std:
232
248
  logger.warning("There are deviations from standard types in elements: " +
233
- str(["%s" % elm for elm in check_results.keys()]) + ". Only the standard " +
249
+ str(["%s" % elm for elm in dev_from_std.keys()]) + ". Only the standard " +
234
250
  "type values are converted to csv.")
235
251
  convert_parallel_branches(net)
236
- if net.bus.shape[0] and not net.bus_geodata.shape[0] or (
237
- net.bus_geodata.shape[0] != net.bus.shape[0]):
238
- logger.info("Since there are no or incomplete bus_geodata, generic geodata are assumed.")
239
- net.bus_geodata = net.bus_geodata.iloc[0:0]
240
- create_generic_coordinates(net)
241
- merge_busbar_coordinates(net)
252
+ merge_busbar_coordinates(net, True)
242
253
  move_slack_gens_to_ext_grid(net)
243
254
 
244
255
  scaling_is_not_1 = []
@@ -319,7 +330,8 @@ def _log_nan_col(csv_data, tablename, col):
319
330
 
320
331
 
321
332
  def _is_pp_type(data):
322
- return "name" in data.keys() # used instead of isinstance(data, pp.auxiliary.pandapowerNet)
333
+ return isinstance(data, pp.auxiliary.pandapowerNet)
334
+ # return bool("name" in data.keys())
323
335
 
324
336
 
325
337
  def convert_node_type(data):
@@ -679,7 +691,7 @@ def _rename_and_split_input_tables(data):
679
691
  split_ppelm_into_type_and_elm = ["dcline"] if _is_pp_type(data) else []
680
692
  input_elm_col = "pp" if _is_pp_type(data) else "csv"
681
693
  output_elm_col = "csv" if _is_pp_type(data) else "pp"
682
- corr_df = _csv_table_pp_dataframe_correspondings(pd.DataFrame)
694
+ corr_df = _csv_table_pp_dataframe_correspondings(pd.DataFrame, not _is_pp_type(data))
683
695
  corr_df["comb_str"] = corr_df["csv"] + "*" + corr_df["pp"]
684
696
 
685
697
  # all elements, which need to be converted to multiple output element tables, (dupl) need to be
@@ -726,7 +738,7 @@ def _get_split_gen_val(element):
726
738
 
727
739
  def _rename_and_multiply_columns(data):
728
740
  """ Renames the columns of all dataframes as needed in output data. """
729
- to_rename_and_multiply_tuples = _get_parameters_to_rename_and_multiply()
741
+ to_rename_and_multiply_tuples = _get_parameters_to_rename_and_multiply(True)
730
742
  for corr_str, tuples in to_rename_and_multiply_tuples.items():
731
743
  # --- remove "type" from data if "std_type" exists too
732
744
  if "std_type" in data[corr_str].columns and "type" in data[corr_str].columns and \
@@ -756,7 +768,7 @@ def _rename_and_multiply_columns(data):
756
768
  data[corr_str].loc[:, col] *= factors
757
769
 
758
770
 
759
- def _get_parameters_to_rename_and_multiply():
771
+ def _get_parameters_to_rename_and_multiply(drop_bus_geodata):
760
772
  """ Returns a dict of tuples and a dict of dataframes where csv column names are assigned to
761
773
  pandapower columns names which differ. """
762
774
  # --- create dummy_net to get pp columns
@@ -770,8 +782,8 @@ def _get_parameters_to_rename_and_multiply():
770
782
  dummy_net[elm]["va_degree"] = np.nan
771
783
 
772
784
  # --- get corresponding tables and dataframes
773
- corr_strings = _csv_table_pp_dataframe_correspondings(str)
774
- csv_tablenames_, pp_dfnames = _csv_table_pp_dataframe_correspondings(list)
785
+ corr_strings = _csv_table_pp_dataframe_correspondings(str, drop_bus_geodata)
786
+ csv_tablenames_, pp_dfnames = _csv_table_pp_dataframe_correspondings(list, drop_bus_geodata)
775
787
 
776
788
  # --- initialize tuples_dict
777
789
  tuples_dict = dict.fromkeys(corr_strings, [("id", "name", None)])
@@ -803,7 +815,7 @@ def _replace_name_index(data):
803
815
  indices. This function replaces the assignment of the input data. """
804
816
  node_names = {"node", "nodeA", "nodeB", "nodeHV", "nodeMV", "nodeLV"}
805
817
  bus_names = {"bus", "from_bus", "to_bus", "hv_bus", "mv_bus", "lv_bus"}
806
- corr_strings = _csv_table_pp_dataframe_correspondings(str)
818
+ corr_strings = _csv_table_pp_dataframe_correspondings(str, True)
807
819
  corr_strings.remove("Measurement*measurement") # already done in convert_measurement()
808
820
 
809
821
  if _is_pp_type(data):
@@ -843,8 +855,9 @@ def _copy_data(input_data, output_data):
843
855
  """ Copies the data from output_data[corr_strings] into input_data[element_table]. This function
844
856
  handles that some corr_strings are not in output_data.keys() and copies all columns which
845
857
  exists in both, output_data[corr_strings] and input_data[element_table]. """
846
- corr_strings = _csv_table_pp_dataframe_correspondings(str)
847
- output_names = _csv_table_pp_dataframe_correspondings(list)[int(_is_pp_type(output_data))]
858
+ out_is_pp = _is_pp_type(output_data)
859
+ corr_strings = _csv_table_pp_dataframe_correspondings(str, out_is_pp)
860
+ output_names = _csv_table_pp_dataframe_correspondings(list, out_is_pp)[int(out_is_pp)]
848
861
 
849
862
  for corr_str, output_name in zip(corr_strings, output_names):
850
863
  if corr_str in input_data.keys() and input_data[corr_str].shape[0]:
@@ -869,7 +882,7 @@ def _copy_data(input_data, output_data):
869
882
  output_data[output_name] = pd.concat([output_data[output_name], input_data[
870
883
  corr_str][cols_to_copy]], ignore_index=True).reindex_axis(output_data[
871
884
  output_name].columns, axis=1)
872
- if "std_types" in corr_str and _is_pp_type(output_data):
885
+ if "std_types" in corr_str and out_is_pp:
873
886
  output_data[output_name].index = input_data[corr_str]["std_type"]
874
887
  _inscribe_fix_values(output_data, output_name)
875
888
 
@@ -52,7 +52,7 @@ def csv_tablenames(which):
52
52
  return csv_tablenames
53
53
 
54
54
 
55
- def _csv_table_pp_dataframe_correspondings(type_):
55
+ def _csv_table_pp_dataframe_correspondings(type_, drop_bus_geodata):
56
56
  csv_tablenames_ = csv_tablenames(['elements', 'types', 'res_elements'])
57
57
  # corresponding pandapower dataframe names
58
58
  pp_dfnames = ['ext_grid', 'line', 'load', 'shunt', 'bus', 'measurement', 'gen', 'sgen',
@@ -63,6 +63,9 @@ def _csv_table_pp_dataframe_correspondings(type_):
63
63
  csv_tablenames_ += ['ExternalNet', 'ExternalNet', 'PowerPlant', 'PowerPlant', 'RES', 'RES',
64
64
  'ExternalNet', 'ExternalNet', 'Line']
65
65
  pp_dfnames += ['gen', 'sgen', 'ext_grid', 'sgen', 'ext_grid', 'gen', 'ward', 'xward', 'dcline']
66
+ if drop_bus_geodata:
67
+ csv_tablenames_.remove("Coordinates")
68
+ pp_dfnames.remove("bus_geodata")
66
69
  assert len(csv_tablenames_) == len(pp_dfnames)
67
70
  if type_ is list:
68
71
  return csv_tablenames_, pp_dfnames
@@ -2,6 +2,7 @@
2
2
  # Institute for Energy Economics and Energy System Technology (IEE) Kassel and individual
3
3
  # contributors (see AUTHORS file for details). All rights reserved.
4
4
 
5
+ from io import StringIO
5
6
  import numpy as np
6
7
  import pandas as pd
7
8
  import pandapower as pp
@@ -181,8 +182,20 @@ def convert_parallel_branches(net, multiple_entries=True, elm_to_convert=["line"
181
182
  net["switch"] = net["switch"].drop(switch_dupl)
182
183
 
183
184
 
184
- def merge_busbar_coordinates(net):
185
+ def convert_geojson_to_bus_geodata_xy(net):
186
+ def notnone(val):
187
+ return isinstance(val, str) and bool(len(val))
188
+ net.bus_geodata = pd.DataFrame(np.nan, index=net.bus.index, columns=["x", "y"])
189
+ idxs = net.bus.index[net.bus.geo.apply(notnone)]
190
+ if len(idxs):
191
+ net.bus_geodata.loc[idxs, ["x", "y"]] = np.r_[[pd.read_json(StringIO(net.bus.geo.at[
192
+ i])).coordinates.values for i in idxs]]
193
+
194
+
195
+ def merge_busbar_coordinates(net, on_bus_geodata):
185
196
  """ merges x and y coordinates of busbar node connected via bus-bus switches """
197
+ if on_bus_geodata:
198
+ convert_geojson_to_bus_geodata_xy(net)
186
199
  bb_nodes_set = set(net.bus.index[net.bus.type == "b"])
187
200
  bb_nodes = sorted(bb_nodes_set)
188
201
  all_connected_buses = set()
@@ -191,8 +204,11 @@ def merge_busbar_coordinates(net):
191
204
  continue
192
205
  connected_nodes = pp.get_connected_buses(net, bb_node, consider=("t", "s"))
193
206
  if len(connected_nodes):
194
- net.bus_geodata.loc[list(connected_nodes), "x"] = net.bus_geodata.x.at[bb_node]
195
- net.bus_geodata.loc[list(connected_nodes), "y"] = net.bus_geodata.y.at[bb_node]
207
+ if on_bus_geodata:
208
+ net.bus_geodata.loc[list(connected_nodes), "x"] = net.bus_geodata.x.at[bb_node]
209
+ net.bus_geodata.loc[list(connected_nodes), "y"] = net.bus_geodata.y.at[bb_node]
210
+ else:
211
+ net.bus.loc[list(connected_nodes), "geo"] = net.bus.at[bb_node, "geo"]
196
212
  all_connected_buses |= connected_nodes
197
213
 
198
214
 
@@ -392,6 +408,13 @@ def _set_vm_setpoint_to_trafos(net, csv_data):
392
408
  idx_node].values
393
409
 
394
410
 
411
+ def _set_dependency_table_parameters(net):
412
+ for et in ["trafo", "trafo3w", "shunt"]:
413
+ param = "step_dependency_table" if et == "shunt" else "tap_dependency_table"
414
+ if param in net[et].columns:
415
+ net[et][param] = False
416
+ net[et][param] = net[et][param].astype(bool)
417
+
395
418
  def _prepare_res_bus_table(net):
396
419
  """ Adds columns to be converted to csv_data. """
397
420
  if net.res_bus.shape[0]:
@@ -423,11 +446,12 @@ def replace_branch_switches(net, reserved_aux_node_names=None):
423
446
  else:
424
447
  # if replace_branch_switches() is called out of pp2csv_data(), this else statement is given
425
448
  subnets = net.bus.zone[idx_bus].values
426
- geodata = net.bus_geodata.loc[idx_bus, ["x", "y"]].values if net["bus_geodata"].shape[0] else \
427
- np.empty((len(idx_bus), 2))
428
449
  aux_buses = pp.create_buses(
429
450
  net, n_branch_switches, net.bus.vn_kv[idx_bus].values, name=names.values, type="auxiliary",
430
- geodata=geodata, zone=subnets)
451
+ zone=subnets)
452
+ if "bus_geodata" in net.keys() and net["bus_geodata"].shape[0]:
453
+ net.bus_geodata = pd.concat([net.bus_geodata, pd.DataFrame(net.bus_geodata.loc[
454
+ idx_bus, ["x", "y"]].values, index=aux_buses, columns=["x", "y"])])
431
455
  for col in ["min_vm_pu", "max_vm_pu", "substation", "voltLvl"]:
432
456
  if col in net.bus.columns:
433
457
  net.bus.loc[aux_buses, col] = net.bus[col][idx_bus].values
@@ -509,9 +533,6 @@ def create_branch_switches(net):
509
533
  net.bus = net.bus.drop(aux_bus_df["aux_buses"])
510
534
  idx_in_res_bus = aux_bus_df["aux_buses"][aux_bus_df["aux_buses"].isin(net.res_bus.index)]
511
535
  net.res_bus = net.res_bus.drop(idx_in_res_bus)
512
- idx_in_bus_geodata = aux_bus_df["aux_buses"][aux_bus_df["aux_buses"].isin(
513
- net.bus_geodata.index)]
514
- net.bus_geodata = net.bus_geodata.drop(idx_in_bus_geodata)
515
536
 
516
537
 
517
538
  def _add_coordID(net, highest_existing_coordinate_number):
@@ -233,7 +233,7 @@ def get_absolute_profiles_from_relative_profiles(
233
233
  missing = list(applied_profiles[~applied_profiles.isin(relative_profiles.columns)])
234
234
  if len(missing):
235
235
  raise ValueError("These profiles are set to be applied but are missing in the profiles "
236
- "data: " + str(missings))
236
+ "data: " + str(missing))
237
237
  isna = applied_profiles.isnull()
238
238
  is_not_na_pos = np.arange(len(isna), dtype=int)[~isna.values]
239
239
  relative_profiles_vals[:, is_not_na_pos] = \
@@ -32,6 +32,21 @@ def test_ensure_iterability():
32
32
  assert bool_
33
33
 
34
34
 
35
+ def test_to_numeric_ignored_errors():
36
+ df = pd.DataFrame([[1, 2, 2.0], [1.2, 3, 4.0], ["a", "b", "D"]]).iloc[:2]
37
+ out1 = sb.to_numeric_ignored_errors(df)
38
+ out2 = sb.to_numeric_ignored_errors(df, downcast="float")
39
+ out3 = sb.to_numeric_ignored_errors(df, downcast="integer")
40
+
41
+ assert set(out1.select_dtypes("float").columns) == {0, 2}
42
+ assert set(out1.select_dtypes("integer").columns) == {1}
43
+
44
+ assert set(out2.select_dtypes("float").columns) == {0, 1, 2}
45
+
46
+ assert set(out3.select_dtypes("float").columns) == {0}
47
+ assert set(out3.select_dtypes("integer").columns) == {1, 2}
48
+
49
+
35
50
  def test_idx_in_2nd_array():
36
51
  arr1 = np.array([1, 6, 4.6, 3.4, 6, 1, "Hallo", "hallo", "Hallo"])
37
52
  arr2 = np.array([8, 4, 1, 2, 5, 5.6, 4.6, "Hallo", "hallo", 6, 3.4])
@@ -155,7 +155,7 @@ def test_convert_parallel_branches():
155
155
 
156
156
 
157
157
  def test_test_network():
158
- net = csv2pp(test_network_path, no_generic_coord=True)
158
+ net = csv2pp(test_network_path, fill_bus_geo_by_generic_data=False)
159
159
 
160
160
  # test min/max ratio
161
161
  for elm in pp.pp_elements(bus=False, branch_elements=False, other_elements=False):
@@ -219,9 +219,9 @@ def test_example_simple():
219
219
  avoid_duplicates_in_column(net, i, 'name')
220
220
 
221
221
  # --- create geodata
222
- net.bus_geodata["x"] = [0, 1, 2, 3, 4, 5, 5, 3.63]
223
- net.bus_geodata["y"] = [0]*5+[-5, 5, 2.33]
224
- merge_busbar_coordinates(net)
222
+ net.bus["geo"] = list(map(lambda xy: f'{{"type":"Point", "coordinates":[{xy[0]}, {xy[1]}]}}',
223
+ zip([0., 1., 2., 3., 4., 5., 5., 3.63], [0.]*5+[-5., 5., 2.33])))
224
+ merge_busbar_coordinates(net, False)
225
225
 
226
226
  # --- convert
227
227
  csv_data = pp2csv_data(net, export_pp_std_types=True, drop_inactive_elements=True)
@@ -256,7 +256,7 @@ def test_example_simple():
256
256
  logger.error("dtype adjustment of %s failed." % key)
257
257
  # drop result table rows
258
258
  if pp_is_27lower and "res_" in key:
259
- if not key == "res_bus":
259
+ if key != "res_bus":
260
260
  net[key] = net[key].iloc[0:0]
261
261
  else:
262
262
  net[key].loc[:, ["p_mw", "q_mvar"]] = np.nan
@@ -0,0 +1,3 @@
1
+ id;r;x;b;iMax;type
2
+ HV OHL 1;0.05;0.4;2.9999999999999996;500.0;ohl
3
+ MV OHL 1;0.25;0.2;0.9999999999999999;500.0;ohl
@@ -1,2 +1,2 @@
1
1
  id;sR;vmHV;vmLV;va0;vmImp;pCu;pFe;iNoLoad;tapable;tapside;dVm;dVa;tapNeutr;tapMin;tapMax
2
- T1;25;110;20;150;12;70;30;0;1;HV;0;0;0;-5;5
2
+ T1;25.0;110.0;20.0;150.0;12.0;70.00000000000001;30.0;0.0;1;HV;0.0;0;0;-5;5
@@ -51,10 +51,8 @@ def _net_to_test():
51
51
  pp.create_switch(net, lv_buses[2], l0, "l")
52
52
  pp.create_switch(net, lv_buses[3], l1, "l")
53
53
 
54
- # create_generic_coordinates(net)
55
- net.bus_geodata["x"] = [1, 2, 1, 3, 0, 1, 2]
56
- net.bus_geodata["y"] = [0, 1, -1, 0, 0, 1, 0]
57
- net.bus_geodata.index = list(range(6))+[8]
54
+ net.bus["geo"] = list(map(lambda xy: f'{{"type":"Point", "coordinates":[{xy[0]}, {xy[1]}]}}',
55
+ zip([1., 2., 1., 3., 0., 1., 2], [0., 1., -1., 0., 0., 1., 0])))
58
56
 
59
57
  return net
60
58
 
@@ -65,8 +63,6 @@ def test_branch_switch_changes():
65
63
 
66
64
  net1 = deepcopy(net_orig)
67
65
  replace_branch_switches(net1)
68
- net1.bus_geodata = net1.bus_geodata.astype({coord: net_orig.bus_geodata.dtypes[
69
- coord] for coord in ["x", "y"]})
70
66
 
71
67
  assert net_orig.switch.shape == net1.switch.shape
72
68
  assert (net_orig.switch.bus == net1.switch.bus).all()
@@ -393,14 +393,7 @@ def _test_net_validity(net, sb_code_params, shortened, input_path=None):
393
393
  assert net.measurement.shape[0] > 1
394
394
 
395
395
  # bus_geodata
396
- assert net.bus.shape[0] == net.bus_geodata.shape[0]
397
- # check_that_all_buses_connected_by_switches_have_same_geodata
398
- # for bus_group in bus_groups_connected_by_switches(net):
399
- # first_bus = list(bus_group)[0]
400
- # assert np.all(np.isclose(net.bus_geodata.x.loc[bus_group].astype(float),
401
- # net.bus_geodata.x.loc[first_bus].astype(float))) \
402
- # and np.all(np.isclose(net.bus_geodata.y.loc[bus_group].astype(float),
403
- # net.bus_geodata.y.loc[first_bus].astype(float)))
396
+ assert not net.bus.geo.isnull().any()
404
397
 
405
398
  # --- test data content
406
399
  # substation
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: simbench
3
- Version: 1.5.2
3
+ Version: 1.6.0
4
4
  Summary: Electrical Power System Benchmark Models.
5
5
  Author-email: Steffen Meinecke <steffen.meinecke@uni-kassel.de>
6
6
  Maintainer-email: simbench Developers <simbench@uni-kassel.de>
@@ -56,16 +56,15 @@ Classifier: Natural Language :: English
56
56
  Classifier: Operating System :: OS Independent
57
57
  Classifier: Programming Language :: Python
58
58
  Classifier: Programming Language :: Python :: 3
59
- Classifier: Programming Language :: Python :: 3.8
60
59
  Classifier: Programming Language :: Python :: 3.9
61
60
  Classifier: Programming Language :: Python :: 3.10
62
61
  Classifier: Programming Language :: Python :: 3.11
63
62
  Classifier: Programming Language :: Python :: 3.12
64
- Requires-Python: >=3.8
63
+ Requires-Python: >=3.9
65
64
  Description-Content-Type: text/x-rst
66
65
  License-File: LICENSE
67
66
  License-File: AUTHORS
68
- Requires-Dist: pandapower>=2.12.1
67
+ Requires-Dist: pandapower>=3.0.0
69
68
  Provides-Extra: docs
70
69
  Requires-Dist: numpydoc; extra == "docs"
71
70
  Requires-Dist: sphinx; extra == "docs"
@@ -103,6 +102,7 @@ Requires-Dist: numba>=0.25; extra == "all"
103
102
  Requires-Dist: lightsim2grid>=0.8.1; extra == "all"
104
103
  Requires-Dist: geopandas; extra == "all"
105
104
  Requires-Dist: matplotlib; extra == "all"
105
+ Dynamic: license-file
106
106
 
107
107
 
108
108
  .. image:: https://simbench.de/wp-content/uploads/2019/01/logo.png
@@ -4,7 +4,6 @@ LICENSE
4
4
  MANIFEST.in
5
5
  README.rst
6
6
  pyproject.toml
7
- requirements.txt
8
7
  setup.py
9
8
  simbench/__init__.py
10
9
  simbench.egg-info/PKG-INFO
@@ -1,4 +1,4 @@
1
- pandapower>=2.12.1
1
+ pandapower>=3.0.0
2
2
 
3
3
  [all]
4
4
  plotly>=3.1.1
@@ -1,2 +0,0 @@
1
- # pip only:
2
- pandapower>=2.12.1
@@ -1,3 +0,0 @@
1
- id;r;x;b;iMax;type
2
- HV OHL 1;0.05;0.4;3;500;ohl
3
- MV OHL 1;0.25;0.2;1;500;ohl
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes