pandapower 3.0.0.dev2__tar.gz → 3.1.1__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 (351) hide show
  1. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/AUTHORS +9 -3
  2. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/LICENSE +7 -7
  3. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/PKG-INFO +5 -32
  4. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/_version.py +1 -1
  5. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/auxiliary.py +25 -22
  6. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/build_branch.py +19 -6
  7. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/build_bus.py +5 -2
  8. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/build_gen.py +55 -9
  9. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/contingency/contingency.py +4 -6
  10. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/__init__.py +13 -11
  11. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/basic_controller.py +1 -1
  12. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/DERBasics.py +1 -1
  13. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/PQVAreas.py +1 -1
  14. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/QModels.py +1 -1
  15. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/der_control.py +23 -22
  16. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/der_control_plot.py +5 -5
  17. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/characteristic_control.py +1 -1
  18. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/const_control.py +1 -1
  19. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/pq_control.py +1 -1
  20. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo/ContinuousTapControl.py +1 -1
  21. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo/DiscreteTapControl.py +1 -1
  22. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo/TapDependentImpedance.py +1 -1
  23. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo/VmSetTapControl.py +1 -1
  24. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo_control.py +22 -11
  25. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/run_control.py +4 -3
  26. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/util/auxiliary.py +98 -3
  27. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/util/characteristic.py +3 -4
  28. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/util/diagnostic.py +75 -1
  29. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/convert_format.py +3 -3
  30. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/build_pp_net.py +15 -9
  31. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/convert_measurements.py +6 -7
  32. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/connectivitynodes/connectivityNodesCim16.py +37 -22
  33. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/externalnetworks/externalNetworkInjectionsCim16.py +11 -4
  34. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/generators/energySourcesCim16.py +5 -0
  35. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/generators/synchronousMachinesCim16.py +55 -4
  36. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/lines/acLineSegmentsCim16.py +1 -1
  37. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/shunts/linearShuntCompensatorCim16.py +2 -0
  38. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/shunts/staticVarCompensatorCim16.py +2 -1
  39. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/transformers/powerTransformersCim16.py +12 -13
  40. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/from_cim.py +6 -6
  41. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim_classes.py +48 -34
  42. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim_tools.py +3 -3
  43. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/pp_classes.py +7 -6
  44. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/pp_tools.py +10 -9
  45. pandapower-3.0.0.dev2/pandapower/converter/cim/serialized_schemas/CIM16_4.0.8_schema.json → pandapower-3.1.1/pandapower/converter/cim/serialized_schemas/CIM16_4.2.9_schema.json +2313 -5994
  46. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/jao/from_jao.py +1 -1
  47. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/matpower/from_mpc.py +8 -8
  48. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/matpower/to_mpc.py +5 -5
  49. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/export_pfd_to_pp.py +3 -3
  50. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/main_pf.py +8 -8
  51. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/pp_import_functions.py +535 -355
  52. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/validate.py +12 -9
  53. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pypower/to_ppc.py +7 -6
  54. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/ucte/from_ucte.py +10 -4
  55. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/ucte/ucte_converter.py +12 -3
  56. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/ucte/ucte_parser.py +14 -2
  57. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/create.py +201 -99
  58. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/diagnostic.py +13 -13
  59. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/diagnostic_reports.py +1 -1
  60. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/optimization.py +4 -2
  61. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/ppc_conversion.py +5 -5
  62. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/util.py +10 -9
  63. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/file_io.py +44 -34
  64. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/auxiliary.py +107 -100
  65. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/get_equivalent.py +51 -49
  66. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/rei_generation.py +114 -107
  67. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/toolbox.py +28 -25
  68. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/ward_generation.py +76 -79
  69. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/groups.py +25 -25
  70. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/io_utils.py +9 -8
  71. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/IEEE_European_LV_Off_Peak_1.json +165 -16
  72. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/IEEE_European_LV_Off_Peak_1440.json +165 -16
  73. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/IEEE_European_LV_On_Peak_566.json +165 -16
  74. pandapower-3.1.1/pandapower/networks/cigre_networks.py +468 -0
  75. pandapower-3.1.1/pandapower/networks/create_examples.py +408 -0
  76. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/dickert_lv_networks.py +60 -57
  77. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/ieee_europen_lv_asymmetric.py +11 -11
  78. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/kerber_extreme_networks.py +1 -1
  79. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/kerber_networks.py +24 -22
  80. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/lv_schutterwald.json +140 -10
  81. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/lv_schutterwald.py +18 -17
  82. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/mv_oberrhein.json +152 -14
  83. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/mv_oberrhein.py +22 -20
  84. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/mv_oberrhein_substations.json +152 -14
  85. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/GBnetwork.json +165 -16
  86. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/GBreducednetwork.json +165 -16
  87. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case118.json +165 -16
  88. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case11_iwamoto.json +166 -16
  89. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case1354pegase.json +165 -16
  90. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case14.json +165 -16
  91. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case145.json +165 -16
  92. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case1888rte.json +165 -16
  93. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case24_ieee_rts.json +165 -16
  94. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case2848rte.json +165 -16
  95. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case2869pegase.json +165 -16
  96. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case30.json +165 -15
  97. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case300.json +165 -16
  98. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case3120sp.json +165 -16
  99. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case33bw.json +165 -15
  100. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case39.json +165 -16
  101. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case4gs.json +165 -15
  102. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case5.json +165 -15
  103. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case57.json +165 -16
  104. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case5_demo_gridcal.json +166 -16
  105. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case6470rte.json +165 -16
  106. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case6495rte.json +165 -16
  107. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case6515rte.json +165 -16
  108. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case6ww.json +165 -15
  109. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case89pegase.json +165 -16
  110. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case9.json +165 -15
  111. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case9241pegase.json +165 -16
  112. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case_ieee30.json +165 -16
  113. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/case_illinois200.json +165 -16
  114. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_case_jsons/iceland.json +165 -16
  115. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/power_system_test_cases.py +86 -114
  116. pandapower-3.1.1/pandapower/networks/simple_pandapower_test_networks.py +190 -0
  117. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/synthetic_voltage_control_lv_networks.py +59 -58
  118. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/opf/make_objective.py +1 -1
  119. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/optimal_powerflow.py +1 -1
  120. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pd2ppc.py +49 -46
  121. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pd2ppc_zero.py +5 -6
  122. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/__init__.py +1 -1
  123. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/create_jacobian.py +1 -1
  124. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/create_jacobian_facts.py +1 -1
  125. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/create_jacobian_numba.py +1 -1
  126. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/create_jacobian_tdpf.py +1 -1
  127. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/dSbus_dV_numba.py +1 -1
  128. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/iwamoto_multiplier.py +1 -1
  129. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/makeYbus_facts.py +1 -1
  130. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/makeYbus_numba.py +1 -1
  131. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/no_numba.py +1 -1
  132. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/pfsoln_numba.py +1 -1
  133. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/ppci_variables.py +1 -1
  134. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/run_bfswpf.py +1 -1
  135. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/run_dc_pf.py +1 -1
  136. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/run_newton_raphson_pf.py +1 -1
  137. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/runpf_pypower.py +1 -1
  138. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pf/runpp_3ph.py +1 -1
  139. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/collections.py +71 -56
  140. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/generic_geodata.py +6 -5
  141. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/geo.py +22 -14
  142. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/mapbox_plot.py +2 -2
  143. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/traces.py +16 -7
  144. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/powerflow_results.py +8 -7
  145. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/simple_plot.py +4 -2
  146. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/powerflow.py +1 -1
  147. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/basic_protection_device.py +2 -2
  148. pandapower-3.1.1/pandapower/protection/example_grids.py +129 -0
  149. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/protection_devices/ocrelay.py +3 -4
  150. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/run_protection.py +0 -2
  151. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/utility_functions.py +61 -56
  152. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/bustypes.py +1 -1
  153. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dSbus_dV.py +1 -1
  154. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dcpf.py +1 -1
  155. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_brch.py +1 -1
  156. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_brch_sc.py +1 -1
  157. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_brch_tdpf.py +1 -1
  158. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_bus.py +1 -1
  159. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_bus_sc.py +1 -1
  160. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_ssc.py +1 -1
  161. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_svc.py +1 -1
  162. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_tcsc.py +1 -1
  163. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeBdc.py +1 -1
  164. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeLODF.py +3 -3
  165. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makePTDF.py +1 -1
  166. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeYbus.py +2 -2
  167. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/newtonpf.py +1 -1
  168. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf.py +1 -1
  169. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_execute.py +1 -1
  170. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_hessfcn.py +1 -1
  171. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_setup.py +1 -1
  172. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/pfsoln.py +1 -1
  173. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/pips.py +1 -1
  174. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/pipsopf_solver.py +1 -1
  175. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/results.py +1 -1
  176. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/results_branch.py +3 -3
  177. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/results_bus.py +19 -3
  178. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/results_gen.py +1 -1
  179. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/run.py +1 -1
  180. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/runpm.py +1 -1
  181. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/calc_sc.py +20 -20
  182. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/toolbox.py +9 -9
  183. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/sql_io.py +1 -1
  184. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/std_types.py +6 -5
  185. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/output_writer.py +7 -4
  186. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/run_time_series.py +11 -7
  187. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/ts_runpp.py +29 -23
  188. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/data_modification.py +18 -15
  189. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/element_selection.py +37 -34
  190. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/grid_modification.py +1 -1
  191. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/power_factor.py +1 -1
  192. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/result_info.py +1 -1
  193. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/topology/create_graph.py +6 -5
  194. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/topology/graph_searches.py +22 -31
  195. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower.egg-info/PKG-INFO +5 -32
  196. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower.egg-info/SOURCES.txt +1 -3
  197. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower.egg-info/requires.txt +1 -1
  198. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pyproject.toml +5 -14
  199. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/setup.py +1 -1
  200. pandapower-3.0.0.dev2/CHANGELOG.rst +0 -782
  201. pandapower-3.0.0.dev2/CITATION.bib +0 -11
  202. pandapower-3.0.0.dev2/pandapower/networks/cigre_networks.py +0 -524
  203. pandapower-3.0.0.dev2/pandapower/networks/create_examples.py +0 -406
  204. pandapower-3.0.0.dev2/pandapower/networks/simple_pandapower_test_networks.py +0 -194
  205. pandapower-3.0.0.dev2/pandapower/protection/example_grids.py +0 -134
  206. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/README.rst +0 -0
  207. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/__init__.py +0 -0
  208. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/contingency/__init__.py +0 -0
  209. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/DERController/__init__.py +0 -0
  210. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/__init__.py +0 -0
  211. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/shunt_control.py +0 -0
  212. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/station_control.py +0 -0
  213. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/controller/trafo/__init__.py +0 -0
  214. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/control/util/__init__.py +0 -0
  215. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/__init__.py +0 -0
  216. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/__init__.py +0 -0
  217. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/__init__.py +0 -0
  218. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/__init__.py +0 -0
  219. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/connectivitynodes/__init__.py +0 -0
  220. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/coordinates/__init__.py +0 -0
  221. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/coordinates/coordinatesFromDLCim16.py +0 -0
  222. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/coordinates/geoCoordinatesFromGLCim16.py +0 -0
  223. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/externalnetworks/__init__.py +0 -0
  224. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/generators/__init__.py +0 -0
  225. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/generators/asynchronousMachinesCim16.py +0 -0
  226. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/impedance/__init__.py +0 -0
  227. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/impedance/equivalentBranchesCim16.py +0 -0
  228. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/impedance/seriesCompensatorsCim16.py +0 -0
  229. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/lines/__init__.py +0 -0
  230. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/lines/dcLineSegmentsCim16.py +0 -0
  231. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/loads/__init__.py +0 -0
  232. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/loads/conformLoadsCim16.py +0 -0
  233. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/loads/energyConcumersCim16.py +0 -0
  234. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/loads/nonConformLoadsCim16.py +0 -0
  235. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/loads/stationSuppliesCim16.py +0 -0
  236. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/shunts/__init__.py +0 -0
  237. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/shunts/nonLinearShuntCompensatorCim16.py +0 -0
  238. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/switches/__init__.py +0 -0
  239. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/switches/switchesCim16.py +0 -0
  240. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/transformers/__init__.py +0 -0
  241. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/transformers/tapController.py +0 -0
  242. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/wards/__init__.py +0 -0
  243. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/cim2pp/converter_classes/wards/equivalentInjectionsCim16.py +0 -0
  244. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/interfaces.py +0 -0
  245. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/other_classes.py +0 -0
  246. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/cim/serialized_schemas/CIM100_4.0.10_schema.json +0 -0
  247. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/jao/__init__.py +0 -0
  248. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/matpower/__init__.py +0 -0
  249. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pandamodels/__init__.py +0 -0
  250. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pandamodels/from_pm.py +0 -0
  251. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pandamodels/to_pm.py +0 -0
  252. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/__init__.py +0 -0
  253. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/echo_off.py +0 -0
  254. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/gui.py +0 -0
  255. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/logger_setup.py +0 -0
  256. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/pf_export_functions.py +0 -0
  257. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/powerfactory/run_import.py +0 -0
  258. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pypower/__init__.py +0 -0
  259. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/pypower/from_ppc.py +0 -0
  260. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/converter/ucte/__init__.py +0 -0
  261. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/__init__.py +0 -0
  262. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/__init__.py +0 -0
  263. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/base.py +0 -0
  264. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/estimator.py +0 -0
  265. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/lp.py +0 -0
  266. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/algorithm/matrix_base.py +0 -0
  267. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/idx_brch.py +0 -0
  268. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/idx_bus.py +0 -0
  269. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/results.py +0 -0
  270. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/estimation/state_estimation.py +0 -0
  271. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/grid_equivalents/__init__.py +0 -0
  272. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/networks/__init__.py +0 -0
  273. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/opf/__init__.py +0 -0
  274. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/opf/pm_storage.py +0 -0
  275. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/opf/run_pandamodels.py +0 -0
  276. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/opf/validate_opf_input.py +0 -0
  277. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/__init__.py +0 -0
  278. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/colormaps.py +0 -0
  279. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/patch_makers.py +0 -0
  280. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/__init__.py +0 -0
  281. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/get_colors.py +0 -0
  282. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/pf_res_plotly.py +0 -0
  283. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/simple_plotly.py +0 -0
  284. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotly/vlevel_plotly.py +0 -0
  285. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/plotting_toolbox.py +0 -0
  286. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/plotting/to_html.py +0 -0
  287. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/__init__.py +0 -0
  288. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/protection_devices/__init__.py +0 -0
  289. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/protection/protection_devices/fuse.py +0 -0
  290. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/__init__.py +0 -0
  291. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/_compat.py +0 -0
  292. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/add_userfcn.py +0 -0
  293. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/d2AIbr_dV2.py +0 -0
  294. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/d2ASbr_dV2.py +0 -0
  295. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/d2Ibr_dV2.py +0 -0
  296. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/d2Sbr_dV2.py +0 -0
  297. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/d2Sbus_dV2.py +0 -0
  298. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dAbr_dV.py +0 -0
  299. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dIbr_dV.py +0 -0
  300. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dSbr_dV.py +0 -0
  301. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/dcopf_solver.py +0 -0
  302. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/fdpf.py +0 -0
  303. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/gausspf.py +0 -0
  304. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/hasPQcap.py +0 -0
  305. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_area.py +0 -0
  306. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_brch_dc.py +0 -0
  307. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_bus_dc.py +0 -0
  308. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_cost.py +0 -0
  309. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_gen.py +0 -0
  310. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/idx_vsc.py +0 -0
  311. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/isload.py +0 -0
  312. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeAang.py +0 -0
  313. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeApq.py +0 -0
  314. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeAvl.py +0 -0
  315. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeAy.py +0 -0
  316. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeB.py +0 -0
  317. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/makeSbus.py +0 -0
  318. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_args.py +0 -0
  319. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_consfcn.py +0 -0
  320. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_costfcn.py +0 -0
  321. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/opf_model.py +0 -0
  322. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/pipsver.py +0 -0
  323. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/polycost.py +0 -0
  324. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/ppoption.py +0 -0
  325. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/ppver.py +0 -0
  326. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/pqcost.py +0 -0
  327. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/printpf.py +0 -0
  328. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/qps_pips.py +0 -0
  329. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/qps_pypower.py +0 -0
  330. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/run_userfcn.py +0 -0
  331. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/totcost.py +0 -0
  332. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/update_mupq.py +0 -0
  333. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/pypower/util.py +0 -0
  334. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/__init__.py +0 -0
  335. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/currents.py +0 -0
  336. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/impedance.py +0 -0
  337. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/kappa.py +0 -0
  338. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/ppc_conversion.py +0 -0
  339. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/shortcircuit/results.py +0 -0
  340. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/__init__.py +0 -0
  341. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/data_source.py +0 -0
  342. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/data_sources/__init__.py +0 -0
  343. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/data_sources/frame_data.py +0 -0
  344. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/timeseries/read_batch_results.py +0 -0
  345. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/__init__.py +0 -0
  346. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/toolbox/comparison.py +0 -0
  347. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/topology/__init__.py +0 -0
  348. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower/topology/graph_tool_interface.py +0 -0
  349. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower.egg-info/dependency_links.txt +0 -0
  350. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/pandapower.egg-info/top_level.txt +0 -0
  351. {pandapower-3.0.0.dev2 → pandapower-3.1.1}/setup.cfg +0 -0
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
1
+ Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
2
2
  and Energy System Technology (IEE), Kassel. All rights reserved.
3
3
 
4
4
  pandapower is maintained and developed by a community on `GitHub <https://github.com/e2nIEE/pandapower>`_. Lists of maintainers and contributors can be found here:
@@ -31,6 +31,12 @@ Previous list of Contributors:
31
31
  - Zhenqi Wang
32
32
  - Alexander Prostejovsky
33
33
  - Maryam Majidi
34
- - Martin Braun
35
- - Johann-Christian Töbermann
34
+ - Martin Braun
35
+ - Johann-Christian Töbermann
36
36
  - Stefan Gehler
37
+ - Mike Vogt
38
+ - Pawel Lytaev
39
+ - Dominik Hilbrich
40
+ - Mario Richter
41
+ - David Heck
42
+ - Hjalmar Körtge
@@ -1,8 +1,8 @@
1
- Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
1
+ Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
2
2
  and Energy System Technology (IEE) Kassel and individual contributors (see AUTHORS file for details).
3
3
  All rights reserved.
4
4
 
5
- Redistribution and use in source and binary forms, with or without modification, are permitted
5
+ Redistribution and use in source and binary forms, with or without modification, are permitted
6
6
  provided that the following conditions are met:
7
7
 
8
8
  1. Redistributions of source code must retain the above copyright notice, this list of conditions
@@ -12,14 +12,14 @@ and the following disclaimer.
12
12
  conditions and the following disclaimer in the documentation and/or other materials provided
13
13
  with the distribution.
14
14
 
15
- 3. Neither the name of the copyright holder nor the names of its contributors may be used to
15
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to
16
16
  endorse or promote products derived from this software without specific prior written permission.
17
17
 
18
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
21
21
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
23
  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24
24
  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
25
25
  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,35 +1,9 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: pandapower
3
- Version: 3.0.0.dev2
3
+ Version: 3.1.1
4
4
  Summary: An easy to use open source tool for power system modeling, analysis and optimization with a high degree of automation.
5
- Author-email: Leon Thurner <leon.thurner@retoflow.de>, Alexander Scheidler <alexander.scheidler@iee.fraunhofer.de>
5
+ Author-email: Leon Thurner <leon.thurner@retoflow.de>, Alexander Scheidler <alexander.scheidler@iee.fraunhofer.de>, Mike Vogt <mike.vogt@iee.fraunhofer.de>
6
6
  Maintainer-email: pandapower Developers <info@pandapower.org>
7
- License: Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
8
- and Energy System Technology (IEE) Kassel and individual contributors (see AUTHORS file for details).
9
- All rights reserved.
10
-
11
- Redistribution and use in source and binary forms, with or without modification, are permitted
12
- provided that the following conditions are met:
13
-
14
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions
15
- and the following disclaimer.
16
-
17
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of
18
- conditions and the following disclaimer in the documentation and/or other materials provided
19
- with the distribution.
20
-
21
- 3. Neither the name of the copyright holder nor the names of its contributors may be used to
22
- endorse or promote products derived from this software without specific prior written permission.
23
-
24
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
25
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
26
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
27
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
31
- WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
-
33
7
  Project-URL: Homepage, https://www.pandapower.org
34
8
  Project-URL: Documentation, https://pandapower.readthedocs.io
35
9
  Project-URL: Source, https://www.github.com/e2nIEE/pandapower
@@ -56,11 +30,9 @@ Requires-Python: >=3.9
56
30
  Description-Content-Type: text/x-rst
57
31
  License-File: LICENSE
58
32
  License-File: AUTHORS
59
- License-File: CHANGELOG.rst
60
- License-File: CITATION.bib
61
33
  Requires-Dist: pandas>=1.0
62
34
  Requires-Dist: networkx>=2.5
63
- Requires-Dist: scipy<1.14
35
+ Requires-Dist: scipy
64
36
  Requires-Dist: numpy
65
37
  Requires-Dist: packaging
66
38
  Requires-Dist: tqdm
@@ -120,6 +92,7 @@ Requires-Dist: cryptography; extra == "all"
120
92
  Requires-Dist: psycopg2; extra == "all"
121
93
  Requires-Dist: matpowercaseframes; extra == "all"
122
94
  Requires-Dist: power-grid-model-io; extra == "all"
95
+ Dynamic: license-file
123
96
 
124
97
 
125
98
  .. image:: https://www.pandapower.org/images/pp.svg
@@ -1,4 +1,4 @@
1
1
  import importlib.metadata
2
2
 
3
3
  __version__ = importlib.metadata.version("pandapower")
4
- __format_version__ = "3.0.0.dev0"
4
+ __format_version__ = "3.0.0"
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
 
@@ -27,33 +27,33 @@
27
27
  # (https://github.com/bcj/AttrDict/blob/master/LICENSE.txt)
28
28
 
29
29
  import copy
30
- from collections.abc import MutableMapping
30
+ import numbers
31
31
  import warnings
32
- from importlib.metadata import version as version_str
32
+ from collections.abc import MutableMapping
33
33
  from importlib.metadata import PackageNotFoundError
34
- from typing_extensions import deprecated
34
+ from importlib.metadata import version as version_str
35
35
 
36
- from geojson import loads, GeoJSON
37
36
  import numpy as np
38
37
  import pandas as pd
39
38
  from pandas.api.types import is_numeric_dtype, is_string_dtype, is_object_dtype
40
39
  # from pandas.api.types import is_integer_dtype, is_float_dtype
41
40
  import scipy as sp
42
- import numbers
41
+ from geojson import loads, GeoJSON
43
42
  from packaging.version import Version
43
+ from typing_extensions import deprecated
44
44
 
45
45
  from pandapower.pypower.idx_brch import F_BUS, T_BUS, BR_STATUS
46
46
  from pandapower.pypower.idx_brch_dc import DC_BR_STATUS, DC_F_BUS, DC_T_BUS
47
47
  from pandapower.pypower.idx_bus import BUS_I, BUS_TYPE, NONE, PD, QD, VM, VA, REF, PQ, VMIN, VMAX, PV
48
+ from pandapower.pypower.idx_bus_dc import DC_VMAX, DC_VMIN, DC_BUS_I, DC_BUS_TYPE, DC_NONE, DC_REF, DC_B2B, DC_P
48
49
  from pandapower.pypower.idx_gen import PMIN, PMAX, QMIN, QMAX
49
50
  from pandapower.pypower.idx_ssc import SSC_STATUS, SSC_BUS, SSC_INTERNAL_BUS
50
51
  from pandapower.pypower.idx_tcsc import TCSC_STATUS, TCSC_F_BUS, TCSC_T_BUS
51
- from pandapower.pypower.idx_vsc import VSC_STATUS, VSC_BUS, VSC_INTERNAL_BUS, VSC_BUS_DC, VSC_MODE_AC, VSC_MODE_AC_SL, \
52
- VSC_INTERNAL_BUS_DC
53
- from .pypower.idx_bus_dc import DC_VMAX, DC_VMIN, DC_BUS_I, DC_BUS_TYPE, DC_NONE, DC_REF, DC_B2B, DC_P
52
+ from pandapower.pypower.idx_vsc import VSC_STATUS, VSC_BUS, VSC_INTERNAL_BUS, VSC_BUS_DC, VSC_INTERNAL_BUS_DC
54
53
 
55
54
  try:
56
55
  from lightsim2grid.newtonpf import newtonpf_new as newtonpf_ls
56
+
57
57
  lightsim2grid_available = True
58
58
  except ImportError:
59
59
  lightsim2grid_available = False
@@ -64,6 +64,7 @@ except ImportError:
64
64
  try:
65
65
  from geopandas import GeoSeries
66
66
  from shapely import from_geojson
67
+
67
68
  geopandas_available = True
68
69
  except ImportError:
69
70
  geopandas_available = False
@@ -87,10 +88,9 @@ def log_to_level(msg, passed_logger, level):
87
88
 
88
89
 
89
90
  def version_check(package_name, level="UserWarning", ignore_not_installed=False):
90
-
91
91
  minimum_version = {'plotly': "3.1.1",
92
92
  'numba': "0.25",
93
- }
93
+ }
94
94
  if ignore_not_installed and package_name not in minimum_version.keys():
95
95
  return
96
96
 
@@ -110,6 +110,7 @@ def version_check(package_name, level="UserWarning", ignore_not_installed=False)
110
110
 
111
111
  try:
112
112
  from numba import jit
113
+
113
114
  try:
114
115
  version_check("numba")
115
116
  NUMBA_INSTALLED = True
@@ -119,6 +120,7 @@ try:
119
120
  NUMBA_INSTALLED = False
120
121
  except ImportError:
121
122
  from .pf.no_numba import jit
123
+
122
124
  NUMBA_INSTALLED = False
123
125
 
124
126
 
@@ -318,7 +320,7 @@ class pandapowerNet(ADict):
318
320
  for key in self:
319
321
  if isinstance(self[key], list):
320
322
  self[key] = pd.DataFrame(np.zeros(0, dtype=self[key]), index=pd.Index([],
321
- dtype=np.int64))
323
+ dtype=np.int64))
322
324
 
323
325
  @deprecated("Use copy.deepcopy(net) instead of net.deepcopy()")
324
326
  def deepcopy(self):
@@ -349,7 +351,7 @@ class pandapowerNet(ADict):
349
351
  if len(res):
350
352
  res = [" and the following results tables:"] + res
351
353
  lines = ["This pandapower network includes the following parameter tables:"] + \
352
- par + res + res_cost
354
+ par + res + res_cost
353
355
  return "\n".join(lines)
354
356
 
355
357
 
@@ -359,6 +361,7 @@ class GeoAccessor:
359
361
  pandas Series accessor for the geo column. It facilitates the use of geojson strings.
360
362
  NaN entrys are dropped using the accessor!
361
363
  """
364
+
362
365
  def __init__(self, pandas_obj):
363
366
  self._validate(pandas_obj)
364
367
  self._obj = pandas_obj
@@ -426,6 +429,7 @@ class GeoAccessor:
426
429
  if callable(geoms_item):
427
430
  def wrapper(*args, **kwargs):
428
431
  return geoms_item(*args, **kwargs)
432
+
429
433
  return wrapper
430
434
  else:
431
435
  return geoms_item
@@ -436,7 +440,6 @@ def plural_s(number):
436
440
  return "" if number == 1 else "s"
437
441
 
438
442
 
439
-
440
443
  def ets_to_element_types(ets=None):
441
444
  ser = pd.Series(["bus", "line", "trafo", "trafo3w", "impedance"],
442
445
  index=["b", "l", "t", "t3", "i"])
@@ -772,7 +775,7 @@ def _write_to_object_attribute(net, element, index, variable, values):
772
775
  def _set_isolated_nodes_out_of_service(ppc, bus_not_reachable, dc=False):
773
776
  isolated_nodes = np.where(bus_not_reachable)[0]
774
777
  if len(isolated_nodes) > 0:
775
- logger.debug("There are isolated buses in the network! (%i nodes in the PPC)"%len(isolated_nodes))
778
+ logger.debug("There are isolated buses in the network! (%i nodes in the PPC)" % len(isolated_nodes))
776
779
  # set buses in ppc out of service
777
780
  if dc:
778
781
  ppc['bus_dc'][isolated_nodes, DC_BUS_TYPE] = DC_NONE
@@ -1059,7 +1062,8 @@ def _select_is_elements_numba(net, isolated_nodes=None, isolated_nodes_dc=None,
1059
1062
  net._ppc["bus"][vsc_aux_isolated, BUS_TYPE] = NONE
1060
1063
  # if there are no in service VSC that define the DC slack node, we must change the DC slack to type P
1061
1064
  bus_dc_slack = net._ppc["bus_dc"][:, DC_BUS_TYPE] == DC_REF
1062
- bus_dc_with_vsc = np.r_[net._ppc["vsc"][is_elements["vsc"], VSC_BUS_DC], net._ppc["vsc"][is_elements["vsc"], VSC_INTERNAL_BUS_DC]]
1065
+ bus_dc_with_vsc = np.r_[
1066
+ net._ppc["vsc"][is_elements["vsc"], VSC_BUS_DC], net._ppc["vsc"][is_elements["vsc"], VSC_INTERNAL_BUS_DC]]
1063
1067
  bus_dc_to_change = bus_dc_slack & (~np.isin(net._ppc["bus_dc"][:, DC_BUS_I], bus_dc_with_vsc))
1064
1068
  net._ppc["bus_dc"][bus_dc_to_change, DC_BUS_TYPE] = DC_P
1065
1069
 
@@ -1245,11 +1249,12 @@ def _set_isolated_buses_out_of_service(net, ppc):
1245
1249
  # first check if buses are connected to branches
1246
1250
  # I don't know why this dance with [X, :][:, [Y, Z]] (instead of [X, [Y, Z]]) is necessary:
1247
1251
  disco = np.setxor1d(ppc["bus"][:, BUS_I].astype(np.int64),
1248
- ppc["branch"][ppc["branch"][:, BR_STATUS] == 1, :][:, [F_BUS,T_BUS]].real.astype(np.int64).flatten())
1252
+ ppc["branch"][ppc["branch"][:, BR_STATUS] == 1, :][:, [F_BUS, T_BUS]].real.astype(
1253
+ np.int64).flatten())
1249
1254
 
1250
1255
  # but also check if they may be the only connection to an ext_grid
1251
1256
  net._isolated_buses = np.setdiff1d(disco, ppc['bus'][ppc['bus'][:, BUS_TYPE] == REF,
1252
- BUS_I].real.astype(np.int64))
1257
+ BUS_I].real.astype(np.int64))
1253
1258
  ppc["bus"][net._isolated_buses, BUS_TYPE] = NONE
1254
1259
 
1255
1260
  # check DC buses - not connected to DC lines and not connected to VSC DC side
@@ -1260,7 +1265,7 @@ def _set_isolated_buses_out_of_service(net, ppc):
1260
1265
 
1261
1266
  # but also check if they may be the only connection to an ext_grid
1262
1267
  net._isolated_buses_dc = np.setdiff1d(disco_dc, ppc['bus_dc'][ppc['bus_dc'][:, DC_BUS_TYPE] == REF,
1263
- DC_BUS_I].real.astype(np.int64))
1268
+ DC_BUS_I].real.astype(np.int64))
1264
1269
  ppc["bus_dc"][net._isolated_buses_dc, DC_BUS_TYPE] = DC_NONE
1265
1270
 
1266
1271
 
@@ -1283,9 +1288,8 @@ def _check_if_numba_is_installed(level="warning"):
1283
1288
  return NUMBA_INSTALLED
1284
1289
 
1285
1290
 
1286
-
1287
1291
  def _check_lightsim2grid_compatibility(net, lightsim2grid, voltage_depend_loads, algorithm, distributed_slack, tdpf):
1288
- """
1292
+ r"""
1289
1293
  Implement some checks to decide whether the package lightsim2grid can be used. These checks are
1290
1294
  documentated in :code:`doc\powerflow\ac.rst` The package implements a backend for power flow
1291
1295
  calculation in C++ and provides a speed-up. If lightsim2grid
@@ -1839,7 +1843,6 @@ def _init_rundcopp_options(net, check_connectivity, switch_rx_ratio, delta, traf
1839
1843
 
1840
1844
  def _init_runse_options(net, v_start, delta_start, calculate_voltage_angles,
1841
1845
  **kwargs):
1842
-
1843
1846
  check_connectivity = kwargs.get("check_connectivity", True)
1844
1847
  trafo_model = kwargs.get("trafo_model", "t")
1845
1848
  trafo3w_losses = kwargs.get("trafo3w_losses", "hv")
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
  # Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
6
6
 
@@ -614,13 +614,14 @@ def _calc_tap_from_dataframe(net, trafo_df):
614
614
  if f'tap{t}_dependency_table' in trafo_df:
615
615
  tap_dependency_table = get_trafo_values(trafo_df, "tap_dependency_table")
616
616
  tap_dependency_table = np.array(
617
- [False if isinstance(x, float) and np.isnan(x) else x for x in tap_dependency_table])
617
+ [False if isinstance(x, float) and np.isnan(x) or x is None else x for x in
618
+ tap_dependency_table])
618
619
  else:
619
620
  tap_table = np.array([False])
620
621
  tap_dependency_table = np.array([False])
621
622
  # tap_changer_type = pd.Series(tap_changer_type)
622
- tap_table = np.logical_and(tap_dependency_table, np.logical_not(tap_changer_type == "None"))
623
- tap_no_table = np.logical_and(~tap_dependency_table, np.logical_not(tap_changer_type == "None"))
623
+ tap_table = np.logical_and(tap_dependency_table, tap_changer_type is not None)
624
+ tap_no_table = np.logical_and(~tap_dependency_table, tap_changer_type is not None)
624
625
  if any(tap_table):
625
626
  id_characteristic_table = get_trafo_values(trafo_df, "id_characteristic_table")
626
627
  if np.any(tap_dependency_table & pd.isna(id_characteristic_table)):
@@ -650,6 +651,17 @@ def _calc_tap_from_dataframe(net, trafo_df):
650
651
  ratio = [voltage_mapping.get(id_val, 1) for id_val in cleaned_id_characteristic]
651
652
  shift = [-shift_mapping.get(id_val, 1) for id_val in cleaned_id_characteristic]
652
653
 
654
+ if isinstance(trafo_df, dict):
655
+ # Invert ratio and shift if tap_at_star_point is true
656
+ relevant_tap_at_star_point = mask & trafo_df["tap_at_star_point"]
657
+ count_index = 0
658
+ for i in range(len(mask)):
659
+ if relevant_tap_at_star_point[i]:
660
+ ratio[count_index] = 1/ratio[count_index] # Invertieren des Wertes
661
+ shift[count_index] = -shift[count_index]
662
+ if mask[i]: # Increase index if mask[i] is True
663
+ count_index += 1
664
+
653
665
  vn[mask] = vn[mask] * ratio
654
666
  trafo_shift[mask] += shift
655
667
  if any(tap_no_table):
@@ -1386,7 +1398,8 @@ def _trafo_df_from_trafo3w(net, sequence=1):
1386
1398
  trafo2["vn_lv_kv"] = {side: t3["vn_%s_kv" % side].values for side in sides}
1387
1399
  trafo2["shift_degree"] = {"hv": np.zeros(nr_trafos), "mv": t3.shift_mv_degree.values,
1388
1400
  "lv": t3.shift_lv_degree.values}
1389
- for param in ["tap_changer_type", "tap_dependency_table", "id_characteristic_table", "tap_phase_shifter"]:
1401
+ for param in ["tap_changer_type", "tap_dependency_table", "id_characteristic_table",
1402
+ "tap_phase_shifter", "tap_at_star_point"]:
1390
1403
  if param in t3:
1391
1404
  trafo2[param] = {side: t3[param] for side in sides}
1392
1405
  trafo2["parallel"] = {side: np.ones(nr_trafos) for side in sides}
@@ -1506,7 +1519,7 @@ def _calculate_3w_tap_changers(t3, t2, sides):
1506
1519
  tap_arrays["tap_side"][side][tap_mask] = "hv" if side == "hv" else "lv"
1507
1520
 
1508
1521
  # t3 trafos with tap changer at star points
1509
- if any_at_star_point & np.any(mask_star_point := (tap_mask & at_star_point)):
1522
+ if any_at_star_point & np.any(mask_star_point := (tap_mask & at_star_point)):
1510
1523
  t = (tap_arrays["tap_step_percent"][side][mask_star_point] *
1511
1524
  np.exp(1j * np.deg2rad(tap_arrays["tap_step_degree"][side][mask_star_point])))
1512
1525
  tap_pos = tap_arrays["tap_pos"][side][mask_star_point]
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import warnings
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
 
@@ -216,7 +216,7 @@ def create_bus_lookup_numpy(net, bus_index, closed_bb_switch_mask):
216
216
  if nr_pv_bus > 0:
217
217
  # one pv bus. Get bus from pv_buses_in_set
218
218
  ref_bus = pv_buses_in_set.pop()
219
- else:
219
+ else:
220
220
  if nr_active_bus > 0:
221
221
  # no pv bus but another active bus. Get bus from active_buses_in_set
222
222
  ref_bus = active_buses_in_set.pop()
@@ -694,6 +694,9 @@ def _calc_shunts_and_add_on_ppc(net, ppc):
694
694
  s = net["shunt"]
695
695
  if len(s) > 0:
696
696
  vl = _is_elements["shunt"]
697
+ # fill missing vn_kv values in shunt table with rated voltage of connected bus
698
+ idx_s_vnkv_isnan = s.loc[np.isnan(s.vn_kv)].index
699
+ s.loc[idx_s_vnkv_isnan, "vn_kv"] = net.bus.loc[s.bus[idx_s_vnkv_isnan].values, "vn_kv"].values
697
700
  v_ratio = (ppc["bus"][bus_lookup[s["bus"].values], BASE_KV] / s["vn_kv"].values) ** 2 * base_multiplier
698
701
 
699
702
  if "step_dependency_table" in s:
@@ -1,10 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
 
7
7
  import numpy as np
8
+ import pandas as pd
8
9
 
9
10
  from pandapower.pf.ppci_variables import bustypes
10
11
  from pandapower.pypower.bustypes import bustypes_dc
@@ -28,7 +29,7 @@ logger = logging.getLogger(__name__)
28
29
  def _build_gen_ppc(net, ppc):
29
30
  '''
30
31
  Takes the empty ppc network and fills it with the gen values. The gen
31
- datatype will be float afterwards.
32
+ datatype will be floated afterwards.
32
33
 
33
34
  **INPUT**:
34
35
  **net** -The pandapower format network
@@ -188,7 +189,7 @@ def _enforce_controllable_vm_pu_p_mw(net, ppc, gen_is, f, t):
188
189
  controllable = net["gen"]["controllable"].values[gen_is]
189
190
  not_controllable = ~controllable.astype(bool)
190
191
 
191
- # if there are some non controllable gens -> set vm_pu and p_mw fixed
192
+ # if there are some non-controllable gens -> set vm_pu and p_mw fixed
192
193
  if np.any(not_controllable):
193
194
  bus = net["gen"]["bus"].values[not_controllable]
194
195
  vm_pu = net["gen"]["vm_pu"].values[not_controllable]
@@ -286,6 +287,11 @@ def add_q_constraints(net, element, is_element, ppc, f, t, delta, inverted=False
286
287
  else:
287
288
  ppc["gen"][f:t, QMAX] = tab["max_q_mvar"].values[is_element] + delta
288
289
 
290
+ # Add qmin and qmax limit from q_capability_curve_characteristic
291
+ if "q_capability_curve_characteristic" in net.keys() and net._options["enforce_q_lims"]:
292
+ _calculate_qmin_qmax_from_q_capability_curve_characteristics(net, element, is_element, ppc, f, t, delta,
293
+ inverted)
294
+
289
295
 
290
296
  def add_p_constraints(net, element, is_element, ppc, f, t, delta, inverted=False):
291
297
  tab = net[element]
@@ -400,7 +406,8 @@ def _gen_xward_mask(net, ppc):
400
406
 
401
407
 
402
408
  def _get_xward_pq_buses(net, ppc):
403
- # find the PQ and PV buses of the xwards; in build_branch.py the F_BUS is set to the PQ bus and T_BUS is set to the auxiliary PV bus
409
+ # find the PQ and PV buses of the xwards; in build_branch.py the F_BUS is set to the PQ bus and T_BUS is set to
410
+ # the auxiliary PV bus
404
411
  ft = net["_pd2ppc_lookups"].get('branch', dict()).get("xward", [])
405
412
  if len(ft) > 0:
406
413
  f, t = ft
@@ -414,14 +421,14 @@ def _get_xward_pq_buses(net, ppc):
414
421
 
415
422
 
416
423
  def _normalise_slack_weights(ppc, gen_mask, xward_mask, xward_pq_buses):
417
- """Unitise the slack contribution factors in each island to sum to 1."""
424
+ """Unitise the slack contribution factors on each island to sum to 1."""
418
425
  subnets = _subnetworks(ppc)
419
426
  gen_buses = ppc['gen'][gen_mask, GEN_BUS].astype(np.int64)
420
427
 
421
428
  # it is possible that xward and gen are at the same bus (but not reasonable)
422
429
  if len(np.intersect1d(gen_buses, xward_pq_buses)):
423
- raise NotImplementedError("Found some of the xward PQ buses with slack weight > 0 that coincide with PV or SL buses."
424
- "This configuration is not supported.")
430
+ raise NotImplementedError("Found some of the xward PQ buses with slack weight > 0 that coincide with PV or "
431
+ "SL buses. This configuration is not supported.")
425
432
 
426
433
  gen_buses = np.r_[gen_buses, xward_pq_buses]
427
434
  slack_weights_gen = np.r_[ppc['gen'][gen_mask, SL_FAC], ppc['gen'][xward_mask, SL_FAC]].astype(np.float64)
@@ -447,11 +454,50 @@ def _normalise_slack_weights(ppc, gen_mask, xward_mask, xward_pq_buses):
447
454
  else:
448
455
  # ppc['gen'][subnet_gen_mask, SL_FAC] /= sum_slack_weights
449
456
  slack_weights_gen /= sum_slack_weights
450
- buses, slack_weights_bus, _ = _sum_by_group(gen_buses[subnet_gen_mask], slack_weights_gen[subnet_gen_mask],
457
+ buses, slack_weights_bus, _ = _sum_by_group(gen_buses[subnet_gen_mask], slack_weights_gen[subnet_gen_mask],
451
458
  slack_weights_gen[subnet_gen_mask])
452
459
  ppc['bus'][buses, SL_FAC_BUS] = slack_weights_bus
453
460
 
454
461
  # raise NotImplementedError if there are several separate zones for distributed slack:
455
462
  if not np.isclose(sum(ppc['bus'][:, SL_FAC_BUS]), 1):
456
- raise NotImplementedError("Distributed slack calculation is not implemented for several separate zones at once, "
463
+ raise NotImplementedError("Distributed slack calculation is not implemented for several separate zones at once,"
457
464
  "please calculate the zones separately.")
465
+
466
+
467
+ def _calculate_qmin_qmax_from_q_capability_curve_characteristics(net, element, is_element, ppc, f, t, delta, inverted):
468
+ if element not in ["gen", "sgen"]:
469
+ logger.warning(f"The given element type is not valid for q_min and q_max reactive power capability calculation "
470
+ f"of the {element}. Please give gen or sgen as an argument of the function")
471
+ return
472
+
473
+ if len(net[element]) == 0:
474
+ logger.warning(f"No. of {element} elements is zero.")
475
+ return
476
+
477
+ # Filter rows with True 'reactive_capability_curve'
478
+ element_data = net[element].loc[net[element]['reactive_capability_curve'].fillna(False)]
479
+
480
+ if len(element_data) > 0:
481
+ # Extract the relevant data
482
+ q_table_ids = element_data['id_q_capability_curve_characteristic']
483
+ p_mw_values = element_data['p_mw']
484
+
485
+ # Retrieve the q_max and q_min characteristic functions as vectorized callables
486
+ q_max_funcs = net.q_capability_curve_characteristic.loc[q_table_ids, 'q_max_characteristic']
487
+ q_min_funcs = net.q_capability_curve_characteristic.loc[q_table_ids, 'q_min_characteristic']
488
+
489
+ # Vectorized function application using NumPy
490
+ calc_q_max = np.vectorize(lambda func, p: func(p))(q_max_funcs, p_mw_values)
491
+ calc_q_min = np.vectorize(lambda func, p: func(p))(q_min_funcs, p_mw_values)
492
+
493
+ if np.any(pd.isna(calc_q_min)) or np.any(pd.isna(calc_q_max)):
494
+ logger.warning(f"The reactive_capability_curve of {element} is True, but the relevant "
495
+ f"characteristic value is None. So default Q limit value has been used in the load flow.")
496
+
497
+ curve_q = net[element][["min_q_mvar", "max_q_mvar"]]
498
+ curve_q.loc[element_data.index] = np.column_stack((calc_q_min, calc_q_max))
499
+ sign = (1 - 2 * inverted)
500
+ ppc["gen"][f:t, [QMIN, QMAX]] = sign * curve_q.values[is_element] - (sign * delta)
501
+ else:
502
+ logger.warning(f"One of {element}(s) id characteristic or curve style of {element} is incorrect "
503
+ f"or not available even if the q_capability_curve_table is available.")
@@ -9,16 +9,12 @@ import pandas as pd
9
9
  import warnings
10
10
  from packaging.version import Version
11
11
 
12
- import pandapower as pp
13
-
14
12
  try:
15
13
  import pandaplan.core.pplog as logging
16
14
  except ImportError:
17
15
  import logging
18
16
 
19
17
  logger = logging.getLogger(__name__)
20
-
21
-
22
18
  try:
23
19
  import lightsim2grid
24
20
  v = Version(lightsim2grid.__version__)
@@ -41,9 +37,11 @@ try:
41
37
  except ImportError:
42
38
  KLU_solver_available = False
43
39
 
40
+ from pandapower.run import runpp
41
+
44
42
 
45
43
  def run_contingency(net, nminus1_cases, pf_options=None, pf_options_nminus1=None, write_to_net=True,
46
- contingency_evaluation_function=pp.runpp, **kwargs):
44
+ contingency_evaluation_function=runpp, **kwargs):
47
45
  """
48
46
  Obtain either loading (N-0) or max. loading (N-0 and all N-1 cases), and min/max bus voltage magnitude.
49
47
  The variable "temperature_degree_celsius" can be used in addition to "loading_percent" to obtain max. temperature.
@@ -141,7 +139,7 @@ def run_contingency(net, nminus1_cases, pf_options=None, pf_options_nminus1=None
141
139
  return contingency_results
142
140
 
143
141
 
144
- def run_contingency_ls2g(net, nminus1_cases, contingency_evaluation_function=pp.runpp, **kwargs):
142
+ def run_contingency_ls2g(net, nminus1_cases, contingency_evaluation_function=runpp, **kwargs):
145
143
  """
146
144
  Execute contingency analysis using the lightsim2grid library. This works much faster than using
147
145
  pandapower.
@@ -1,23 +1,25 @@
1
- from pandapower.auxiliary import ControllerNotConverged
2
-
3
1
  import pandapower.control.basic_controller
4
2
  import pandapower.control.controller
5
-
3
+ from pandapower.control.controller.DERController.der_control import DERController
4
+ from pandapower.control.controller.characteristic_control import CharacteristicControl
6
5
  # --- Controller ---
7
6
  from pandapower.control.controller.const_control import ConstControl
8
7
  from pandapower.control.controller.pq_control import PQController
9
- from pandapower.control.controller.characteristic_control import CharacteristicControl
8
+ from pandapower.control.controller.shunt_control import DiscreteShuntController
9
+ from pandapower.control.controller.station_control import BinarySearchControl, DroopControl
10
10
  from pandapower.control.controller.trafo.ContinuousTapControl import ContinuousTapControl
11
11
  from pandapower.control.controller.trafo.DiscreteTapControl import DiscreteTapControl
12
- from pandapower.control.controller.trafo.VmSetTapControl import VmSetTapControl
13
12
  from pandapower.control.controller.trafo.TapDependentImpedance import TapDependentImpedance
13
+ from pandapower.control.controller.trafo.VmSetTapControl import VmSetTapControl
14
14
  from pandapower.control.controller.trafo_control import TrafoController
15
- from pandapower.control.controller.station_control import BinarySearchControl, DroopControl
16
- from pandapower.control.controller.DERController.der_control import DERController
17
- from pandapower.control.controller.shunt_control import DiscreteShuntController
18
-
19
15
  # --- Other ---
20
16
  from pandapower.control.run_control import *
17
+ from pandapower.control.util.auxiliary import (
18
+ get_controller_index,
19
+ plot_characteristic,
20
+ _create_trafo_characteristics,
21
+ create_trafo_characteristic_object,
22
+ create_q_capability_curve_characteristics_object
23
+ )
21
24
  from pandapower.control.util.characteristic import Characteristic, SplineCharacteristic
22
- from pandapower.control.util.auxiliary import (plot_characteristic, _create_trafo_characteristics,
23
- create_trafo_characteristic_object)
25
+ from pandapower.control.util.diagnostic import control_diagnostic, trafo_characteristic_table_diagnostic
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
  import copy
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
  import numpy as np
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
  import numpy as np
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (c) 2016-2024 by University of Kassel and Fraunhofer Institute for Energy Economics
3
+ # Copyright (c) 2016-2025 by University of Kassel and Fraunhofer Institute for Energy Economics
4
4
  # and Energy System Technology (IEE), Kassel. All rights reserved.
5
5
 
6
6
  import numpy as np