GridCalEngine 5.0.0a18__tar.gz → 5.0.0a19__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 (389) hide show
  1. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/circuit_to_bentayga.py +0 -2
  2. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/circuit_to_data.py +17 -5
  3. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/circuit_to_newton_pa.py +4 -3
  4. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/__init__.py +1 -1
  5. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/base_diagram.py +7 -7
  6. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/graphic_location.py +1 -1
  7. GridCalEngine-5.0.0a19/GridCalEngine/Core/Devices/Diagrams/map_diagram.py +75 -0
  8. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/__init__.py +1 -0
  9. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/generator.py +15 -80
  10. GridCalEngine-5.0.0a19/GridCalEngine/Core/Devices/Injections/generator_q_curve.py +219 -0
  11. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/editable_device.py +9 -4
  12. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/multi_circuit.py +22 -5
  13. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/bus_bar_section.py +1 -1
  14. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/switch.py +1 -1
  15. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/topological_node.py +1 -1
  16. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/cim_devices.py +5 -4
  17. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/file_handler.py +13 -2
  18. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/excel_interface.py +5 -4
  19. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/pack_unpack.py +9 -1
  20. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/others/dpx_parser.py +4 -2
  21. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/raw_to_gridcal.py +1 -1
  22. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/rawx_parser_legacy.py +4 -2
  23. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ATC/available_transfer_capacity_driver.py +3 -4
  24. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ATC/available_transfer_capacity_ts_driver.py +2 -6
  25. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_driver.py +3 -3
  26. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_driver.py +0 -1
  27. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis_driver.py +12 -12
  28. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis_options.py +2 -1
  29. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis_results.py +24 -3
  30. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_driver.py +6 -7
  31. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/linear_opf_ts.py +63 -37
  32. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/opf_driver.py +16 -10
  33. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/opf_results.py +49 -1
  34. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/opf_ts_driver.py +17 -11
  35. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_driver.py +20 -19
  36. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_results.py +23 -0
  37. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_driver.py +16 -17
  38. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_worker.py +1 -1
  39. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit.py +7 -2
  40. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_driver.py +47 -36
  41. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_worker.py +31 -29
  42. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/StateEstimation/state_stimation_driver.py +12 -8
  43. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/driver_template.py +4 -1
  44. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/result_types.py +1 -1
  45. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/__version__.py +1 -1
  46. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/api.py +0 -9
  47. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/basic_structures.py +1 -1
  48. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/enumerations.py +3 -1
  49. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/PKG-INFO +1 -1
  50. GridCalEngine-5.0.0a18/GridCalEngine/Core/Devices/Diagrams/map_diagram.py +0 -35
  51. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/__init__.py +0 -0
  52. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/circuit_to_optimods.py +0 -0
  53. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Compilers/circuit_to_pgm.py +0 -0
  54. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/__init__.py +0 -0
  55. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/battery_data.py +0 -0
  56. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/branch_data.py +0 -0
  57. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/bus_data.py +0 -0
  58. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/generator_data.py +0 -0
  59. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/hvdc_data.py +0 -0
  60. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/load_data.py +0 -0
  61. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/numerical_circuit.py +0 -0
  62. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/DataStructures/shunt_data.py +0 -0
  63. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/__init__.py +0 -0
  64. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/area.py +0 -0
  65. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/contingency.py +0 -0
  66. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/contingency_group.py +0 -0
  67. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/country.py +0 -0
  68. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/emission_gas.py +0 -0
  69. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/fuel.py +0 -0
  70. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/investment.py +0 -0
  71. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/investments_group.py +0 -0
  72. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/technology.py +0 -0
  73. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Aggregation/zone.py +0 -0
  74. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Associations/__init__.py +0 -0
  75. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Associations/generator_emission.py +0 -0
  76. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Associations/generator_fuel.py +0 -0
  77. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Associations/generator_technology.py +0 -0
  78. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/branch.py +0 -0
  79. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/dc_line.py +0 -0
  80. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/hvdc_line.py +0 -0
  81. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/line.py +0 -0
  82. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/switch.py +0 -0
  83. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/tap_changer.py +0 -0
  84. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/__init__.py +0 -0
  85. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/line_template.py +0 -0
  86. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/overhead_line_type.py +0 -0
  87. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/parent_branch.py +0 -0
  88. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/sequence_line_type.py +0 -0
  89. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/transformer_type.py +0 -0
  90. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/templates/underground_line.py +0 -0
  91. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/transformer.py +0 -0
  92. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/transformer3w.py +0 -0
  93. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/upfc.py +0 -0
  94. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/vsc.py +0 -0
  95. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/winding.py +0 -0
  96. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Branches/wire.py +0 -0
  97. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/__init__.py +0 -0
  98. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/bus_branch_diagram.py +0 -0
  99. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/map_location.py +0 -0
  100. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Diagrams/node_breaker_diagram.py +0 -0
  101. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/battery.py +0 -0
  102. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/external_grid.py +0 -0
  103. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/injection_template.py +0 -0
  104. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/load.py +0 -0
  105. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/shunt.py +0 -0
  106. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Injections/static_generator.py +0 -0
  107. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Substation/__init__.py +0 -0
  108. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Substation/bus.py +0 -0
  109. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Substation/connectivity_node.py +0 -0
  110. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/Substation/substation.py +0 -0
  111. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/__init__.py +0 -0
  112. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/Devices/measurement.py +0 -0
  113. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/__init__.py +0 -0
  114. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/admittance_matrices.py +0 -0
  115. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Core/topology.py +0 -0
  116. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/__init__.py +0 -0
  117. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/base/__init__.py +0 -0
  118. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/base/base_circuit.py +0 -0
  119. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/base/base_device.py +0 -0
  120. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/base/base_property.py +0 -0
  121. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/base/units.py +0 -0
  122. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/__init__.py +0 -0
  123. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/__init__.py +0 -0
  124. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_circuit.py +0 -0
  125. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_data_parser.py +0 -0
  126. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_enums.py +0 -0
  127. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_poperty.py +0 -0
  128. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_to_gridcal.py +0 -0
  129. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/cgmes_writer.py +0 -0
  130. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/__init__.py +0 -0
  131. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/__init__.py +0 -0
  132. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/cgm_region.py +0 -0
  133. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/control_area.py +0 -0
  134. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/energy_area.py +0 -0
  135. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/geographical_region.py +0 -0
  136. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/load_area.py +0 -0
  137. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/merging_agent.py +0 -0
  138. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/modelling_authority.py +0 -0
  139. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/operational_limit_set.py +0 -0
  140. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/operational_limit_type.py +0 -0
  141. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/sub_geographical_region.py +0 -0
  142. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/aggregation/sub_load_area.py +0 -0
  143. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/base.py +0 -0
  144. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/__init__.py +0 -0
  145. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/current_limit.py +0 -0
  146. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/dipole.py +0 -0
  147. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/equivalent_branch.py +0 -0
  148. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/line/__init__.py +0 -0
  149. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/line/ac_line_segment.py +0 -0
  150. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/line/line.py +0 -0
  151. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/tie_flow.py +0 -0
  152. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/__init__.py +0 -0
  153. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer.py +0 -0
  154. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer_non_linear.py +0 -0
  155. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer_symmetrical.py +0 -0
  156. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer_table.py +0 -0
  157. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer_table_point.py +0 -0
  158. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/phase_tap_changer_tabular.py +0 -0
  159. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/power_transformer.py +0 -0
  160. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/power_transformer_end.py +0 -0
  161. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/ratio_tap_changer.py +0 -0
  162. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/ratio_tap_changer_table.py +0 -0
  163. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/ratio_tap_changer_table_point.py +0 -0
  164. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/tap_changer.py +0 -0
  165. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/branches/transformer/tap_changer_control.py +0 -0
  166. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/conducting_equipment.py +0 -0
  167. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/equipment.py +0 -0
  168. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/equipment_container.py +0 -0
  169. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/equivalent_equipment.py +0 -0
  170. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/full_model.py +0 -0
  171. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/identified_object.py +0 -0
  172. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/__init__.py +0 -0
  173. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/energy_scheduling_type.py +0 -0
  174. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/energy_source.py +0 -0
  175. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/__init__.py +0 -0
  176. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/control_area_generating_unit.py +0 -0
  177. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/fossil_fuel.py +0 -0
  178. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/fuel_type.py +0 -0
  179. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/generating_unit.py +0 -0
  180. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/hydro_generating_unit.py +0 -0
  181. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/hydro_power_plant.py +0 -0
  182. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/hydro_pump.py +0 -0
  183. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/nuclear_generating_unit.py +0 -0
  184. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/reactive_capability_curve.py +0 -0
  185. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/rotating_machine.py +0 -0
  186. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/solar_generating_unit.py +0 -0
  187. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/synchronous_machine.py +0 -0
  188. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/thermal_generating_unit.py +0 -0
  189. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/generation/wind_generating_unit.py +0 -0
  190. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/__init__.py +0 -0
  191. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/conform_load.py +0 -0
  192. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/conform_load_group.py +0 -0
  193. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/energy_consumer.py +0 -0
  194. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/equivalent_injection.py +0 -0
  195. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/equivalent_network.py +0 -0
  196. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/load_group.py +0 -0
  197. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/load_response_characteristic.py +0 -0
  198. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/non_conform_load.py +0 -0
  199. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/load/non_conform_load_group.py +0 -0
  200. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/monopole.py +0 -0
  201. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/power_systems_resource.py +0 -0
  202. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/regulating_cond_eq.py +0 -0
  203. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/regulating_control.py +0 -0
  204. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/shunt/__init__.py +0 -0
  205. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/shunt/linear_shunt_compensator.py +0 -0
  206. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/shunt/shunt_compensator.py +0 -0
  207. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/injections/shunt/static_var_compensator.py +0 -0
  208. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/inputs/__init__.py +0 -0
  209. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/inputs/curve.py +0 -0
  210. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/inputs/curve_data.py +0 -0
  211. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/__init__.py +0 -0
  212. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/sv_power_flow.py +0 -0
  213. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/sv_shunt_compensator_sections.py +0 -0
  214. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/sv_tap_step.py +0 -0
  215. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/sv_voltage.py +0 -0
  216. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/results/topological_island.py +0 -0
  217. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/__init__.py +0 -0
  218. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/acdc_terminal.py +0 -0
  219. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/base_voltage.py +0 -0
  220. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/breaker.py +0 -0
  221. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/bus_name_marker.py +0 -0
  222. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/connectivity_node.py +0 -0
  223. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/connectivity_node_container.py +0 -0
  224. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/connector.py +0 -0
  225. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/junction.py +0 -0
  226. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/load_breaker_switch.py +0 -0
  227. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/substation.py +0 -0
  228. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/voltage_level.py +0 -0
  229. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/substation/voltage_limit.py +0 -0
  230. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cgmes_2_4_15/devices/terminal.py +0 -0
  231. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/__init__.py +0 -0
  232. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/cim_circuit.py +0 -0
  233. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/cim_data_parser.py +0 -0
  234. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/cim_enums.py +0 -0
  235. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/cim16/cim_parser.py +0 -0
  236. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/__init__.py +0 -0
  237. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/base_db.py +0 -0
  238. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/cgmes_lookup_db.py +0 -0
  239. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/db_handler.py +0 -0
  240. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/file_system.py +0 -0
  241. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/cim/db/psse_lookup_db.py +0 -0
  242. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/dgs/__init__.py +0 -0
  243. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/dgs/dgs_parser.py +0 -0
  244. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/epc/__init__.py +0 -0
  245. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/epc/epc_parser.py +0 -0
  246. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/file_system.py +0 -0
  247. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/__init__.py +0 -0
  248. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/contingency_parser.py +0 -0
  249. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/generic_io_functions.py +0 -0
  250. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/h5_interface.py +0 -0
  251. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/json_parser.py +0 -0
  252. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/sqlite_interface.py +0 -0
  253. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/gridcal/zip_interface.py +0 -0
  254. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/__init__.py +0 -0
  255. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/matpower_branch_definitions.py +0 -0
  256. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/matpower_bus_definitions.py +0 -0
  257. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/matpower_gen_definitions.py +0 -0
  258. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/matpower_parser.py +0 -0
  259. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/matpower/matpower_storage_definitions.py +0 -0
  260. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/others/__init__.py +0 -0
  261. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/others/ipa_parser.py +0 -0
  262. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/others/plx_parser.py +0 -0
  263. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/others/pypsa_parser.py +0 -0
  264. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/__init__.py +0 -0
  265. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/__init__.py +0 -0
  266. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/area.py +0 -0
  267. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/branch.py +0 -0
  268. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/bus.py +0 -0
  269. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/facts.py +0 -0
  270. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/fixed_shunt.py +0 -0
  271. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/generator.py +0 -0
  272. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/gne_device.py +0 -0
  273. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/induction_machine.py +0 -0
  274. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/inter_area.py +0 -0
  275. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/load.py +0 -0
  276. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/node.py +0 -0
  277. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/owner.py +0 -0
  278. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/psse_circuit.py +0 -0
  279. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/psse_object.py +0 -0
  280. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/psse_property.py +0 -0
  281. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/substation.py +0 -0
  282. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/switched_shunt.py +0 -0
  283. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/system_switching_device.py +0 -0
  284. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/transformer.py +0 -0
  285. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/two_terminal_dc_line.py +0 -0
  286. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/vsc_dc_line.py +0 -0
  287. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/devices/zone.py +0 -0
  288. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/gridcal_to_raw.py +0 -0
  289. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/raw_functions.py +0 -0
  290. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/raw_parser_legacy.py +0 -0
  291. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/raw_parser_writer.py +0 -0
  292. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/IO/raw/rawx_parser_writer.py +0 -0
  293. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/LICENSE.txt +0 -0
  294. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ATC/__init__.py +0 -0
  295. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Clustering/__init__.py +0 -0
  296. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Clustering/clustering.py +0 -0
  297. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Clustering/clustering_driver.py +0 -0
  298. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Clustering/clustering_options.py +0 -0
  299. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Clustering/clustering_results.py +0 -0
  300. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/__init__.py +0 -0
  301. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingencies_report.py +0 -0
  302. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_options.py +0 -0
  303. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_results.py +0 -0
  304. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_results.py +0 -0
  305. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_plan.py +0 -0
  306. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContingencyAnalysis/helm_contingencies.py +0 -0
  307. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContinuationPowerFlow/__init__.py +0 -0
  308. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow.py +0 -0
  309. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_driver.py +0 -0
  310. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Dynamics/__init__.py +0 -0
  311. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Dynamics/dynamic_modules.py +0 -0
  312. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Dynamics/transient_stability_driver.py +0 -0
  313. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InputsAnalysis/__init__.py +0 -0
  314. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InputsAnalysis/inputs_analysis_driver.py +0 -0
  315. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InvestmentsEvaluation/MVRSM.py +0 -0
  316. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InvestmentsEvaluation/__init__.py +0 -0
  317. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_driver.py +0 -0
  318. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_results.py +0 -0
  319. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/InvestmentsEvaluation/stop_crits.py +0 -0
  320. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/__init__.py +0 -0
  321. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis.py +0 -0
  322. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_results.py +0 -0
  323. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/__init__.py +0 -0
  324. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_driver.py +0 -0
  325. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_opf.py +0 -0
  326. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_options.py +0 -0
  327. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_results.py +0 -0
  328. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_ts_driver.py +0 -0
  329. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/NTC/ntc_ts_results.py +0 -0
  330. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/__init__.py +0 -0
  331. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/opf_options.py +0 -0
  332. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/opf_ts_results.py +0 -0
  333. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/OPF/simple_dispatch_ts.py +0 -0
  334. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/__init__.py +0 -0
  335. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/ac_jacobian.py +0 -0
  336. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/acdc_jacobian.py +0 -0
  337. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/common_functions.py +0 -0
  338. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/derivatives.py +0 -0
  339. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/discrete_controls.py +0 -0
  340. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/fast_decoupled.py +0 -0
  341. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/gauss_power_flow.py +0 -0
  342. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/helm_power_flow.py +0 -0
  343. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/iwamoto_newton_raphson.py +0 -0
  344. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/levenberg_marquardt.py +0 -0
  345. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/levenberg_marquardt_acdc.py +0 -0
  346. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/linearized_power_flow.py +0 -0
  347. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson.py +0 -0
  348. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_acdc.py +0 -0
  349. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_current.py +0 -0
  350. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_decoupled.py +0 -0
  351. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_ode.py +0 -0
  352. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/__init__.py +0 -0
  353. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_options.py +0 -0
  354. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_input.py +0 -0
  355. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_results.py +0 -0
  356. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ShortCircuitStudies/__init__.py +0 -0
  357. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_results.py +0 -0
  358. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/SigmaAnalysis/__init__.py +0 -0
  359. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/SigmaAnalysis/sigma_analysis_driver.py +0 -0
  360. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/StateEstimation/__init__.py +0 -0
  361. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/StateEstimation/state_estimation.py +0 -0
  362. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/__init__.py +0 -0
  363. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/blackout_driver.py +0 -0
  364. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/latin_hypercube_sampling.py +0 -0
  365. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/reliability_driver.py +0 -0
  366. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_driver.py +0 -0
  367. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_input.py +0 -0
  368. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_results.py +0 -0
  369. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Topology/__init__.py +0 -0
  370. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/Topology/topology_driver.py +0 -0
  371. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/__init__.py +0 -0
  372. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/driver_types.py +0 -0
  373. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/results_table.py +0 -0
  374. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/results_template.py +0 -0
  375. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Simulations/sparse_solve.py +0 -0
  376. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Sparse/__init__.py +0 -0
  377. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Sparse/csc.py +0 -0
  378. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Sparse/csc_numba.py +0 -0
  379. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/Sparse/utils.py +0 -0
  380. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/ThirdParty/SyntheticNetworks/__init__.py +0 -0
  381. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/ThirdParty/SyntheticNetworks/rpgm_algo.py +0 -0
  382. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/ThirdParty/__init__.py +0 -0
  383. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/ThirdParty/ortools/__init__.py +0 -0
  384. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/ThirdParty/ortools/ortools_extra.py +0 -0
  385. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/__init__.py +0 -0
  386. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/data_logger.py +0 -0
  387. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/GridCalEngine/grid_analysis.py +0 -0
  388. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/setup.cfg +0 -0
  389. {GridCalEngine-5.0.0a18 → GridCalEngine-5.0.0a19}/setup.py +0 -0
@@ -694,11 +694,9 @@ def bentayga_linear_matrices(circuit: MultiCircuit, distributed_slack=False):
694
694
  def translate_bentayga_pf_results(grid: MultiCircuit, res) -> PowerFlowResults:
695
695
  results = PowerFlowResults(n=grid.get_bus_number(),
696
696
  m=grid.get_branch_number_wo_hvdc(),
697
- n_tr=grid.get_transformers2w_number(),
698
697
  n_hvdc=grid.get_hvdc_number(),
699
698
  bus_names=res.names,
700
699
  branch_names=res.names,
701
- transformer_names=[],
702
700
  hvdc_names=res.hvdc_names,
703
701
  bus_types=res.bus_types)
704
702
 
@@ -292,8 +292,7 @@ def get_generator_data(circuit: MultiCircuit,
292
292
  data.names[k] = elm.name
293
293
  data.idtag[k] = elm.idtag
294
294
 
295
- data.qmin[k] = elm.Qmin
296
- data.qmax[k] = elm.Qmax
295
+
297
296
  data.controllable[k] = elm.is_controlled
298
297
  data.installed_p[k] = elm.Snom
299
298
 
@@ -363,6 +362,14 @@ def get_generator_data(circuit: MultiCircuit,
363
362
  elif elm.Vset != Vbus[i]:
364
363
  logger.add_error('Different set points', elm.bus.name, elm.Vset, Vbus[i])
365
364
 
365
+ # reactive power limits, for the given power value
366
+ if elm.use_reactive_power_curve:
367
+ data.qmin[k] = elm.q_curve.get_qmin(data.p[i])
368
+ data.qmax[k] = elm.q_curve.get_qmax(data.p[i])
369
+ else:
370
+ data.qmin[k] = elm.Qmin
371
+ data.qmax[k] = elm.Qmax
372
+
366
373
  data.C_bus_elm[i, k] = 1
367
374
 
368
375
  return data
@@ -402,9 +409,6 @@ def get_battery_data(circuit: MultiCircuit,
402
409
  data.names[k] = elm.name
403
410
  data.idtag[k] = elm.idtag
404
411
 
405
- data.qmin[k] = elm.Qmin
406
- data.qmax[k] = elm.Qmax
407
-
408
412
  data.controllable[k] = elm.is_controlled
409
413
  data.installed_p[k] = elm.Snom
410
414
 
@@ -481,6 +485,14 @@ def get_battery_data(circuit: MultiCircuit,
481
485
  elif elm.Vset != Vbus[i]:
482
486
  logger.add_error('Different set points', elm.bus.name, elm.Vset, Vbus[i])
483
487
 
488
+ # reactive power limits, for the given power value
489
+ if elm.use_reactive_power_curve:
490
+ data.qmin[k] = elm.q_curve.get_qmin(data.p[i])
491
+ data.qmax[k] = elm.q_curve.get_qmax(data.p[i])
492
+ else:
493
+ data.qmin[k] = elm.Qmin
494
+ data.qmax[k] = elm.Qmax
495
+
484
496
  data.C_bus_elm[i, k] = 1
485
497
 
486
498
  return data
@@ -1130,8 +1130,8 @@ def get_newton_pa_linear_opf_options(opf_opt: "OptimalPowerFlowOptions",
1130
1130
  bs.TimeGrouping.Monthly: npa.TimeGrouping.Monthly,
1131
1131
  bs.TimeGrouping.Hourly: npa.TimeGrouping.Hourly}
1132
1132
 
1133
- opt = npa.LinearOpfOptions()
1134
- opt.solver = solver_dict[opf_opt.mip_solver]
1133
+ opt = npa.LinearOpfOptions(solver=solver_dict[opf_opt.mip_solver])
1134
+ # opt.solver = solver_dict[opf_opt.mip_solver]
1135
1135
  opt.grouping = grouping_dict[opf_opt.grouping]
1136
1136
  opt.unit_commitment = False
1137
1137
  opt.compute_flows = opf_opt.zonal_grouping == ZonalGrouping.NoGrouping
@@ -1434,7 +1434,8 @@ def translate_newton_pa_opf_results(grid: MultiCircuit, res: "npa.NonlinearOpfRe
1434
1434
  F=res.F,
1435
1435
  T=res.T,
1436
1436
  F_hvdc=res.hvdc_F,
1437
- T_hvdc=res.hvdc_T)
1437
+ T_hvdc=res.hvdc_T,
1438
+ bus_area_indices=grid.get_bus_area_indices())
1438
1439
 
1439
1440
  results.Sbus = res.Scalc[0, :],
1440
1441
  results.voltage = res.voltage[0, :],
@@ -16,7 +16,7 @@
16
16
  # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
 
18
18
 
19
- from GridCalEngine.Core.Devices.Branches.branch import Branch, BranchTemplate
19
+ from GridCalEngine.Core.Devices.Branches.branch import Branch, BranchTemplate, BranchType
20
20
  from GridCalEngine.Core.Devices.Branches.dc_line import DcLine
21
21
  from GridCalEngine.Core.Devices.Branches.line import Line
22
22
  from GridCalEngine.Core.Devices.Branches.hvdc_line import HvdcLine
@@ -29,7 +29,7 @@ class PointsGroup:
29
29
  Diagram
30
30
  """
31
31
 
32
- def __init__(self, name=''):
32
+ def __init__(self, name: str = '') -> None:
33
33
  """
34
34
 
35
35
  :param name: Diagram name
@@ -76,7 +76,8 @@ class PointsGroup:
76
76
 
77
77
  return points
78
78
 
79
- def parse_data(self, data: Dict[str, Dict[str, Union[int, float, List[Tuple[float, float]]]]],
79
+ def parse_data(self,
80
+ data: Dict[str, Dict[str, Union[int, float, List[Tuple[float, float]]]]],
80
81
  obj_dict: Dict[str, EditableDevice]):
81
82
  """
82
83
  Parse file data ito this class
@@ -176,10 +177,10 @@ class BaseDiagram:
176
177
  # search for the device idtag and return the location, if not found return None
177
178
  return group.query_point(device)
178
179
 
179
- def get_properties_dict(self) -> Dict[str, Dict[str, Union[GraphicLocation, MapLocation]]]:
180
+ def get_properties_dict(self) -> Dict[str, Union[str, int, float, Dict[str, Union[GraphicLocation, MapLocation]]]]:
180
181
  """
181
-
182
- :return:
182
+ get the properties dictionary to save
183
+ :return: dictionary to serialize
183
184
  """
184
185
  data = {category: group.get_dict() for category, group in self.data.items()}
185
186
 
@@ -205,8 +206,7 @@ class BaseDiagram:
205
206
  for category, loc_dict in data['data'].items():
206
207
 
207
208
  points_group = PointsGroup(name=category)
208
- points_group.parse_data(data=loc_dict,
209
- obj_dict=obj_dict.get(category, dict()))
209
+ points_group.parse_data(data=loc_dict, obj_dict=obj_dict.get(category, dict()))
210
210
  self.data[category] = points_group
211
211
 
212
212
  def build_graph(self):
@@ -33,7 +33,7 @@ class GraphicLocation:
33
33
  api_object: EditableDevice = None,
34
34
  graphic_object: object = None):
35
35
  """
36
-
36
+ GraphicLocation
37
37
  :param x: x position (px)
38
38
  :param y: y position (px)
39
39
  :param h: height (px)
@@ -0,0 +1,75 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2023 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ from typing import Dict, Union, List, Tuple
18
+ from GridCalEngine.Core.Devices.Diagrams.base_diagram import BaseDiagram, PointsGroup
19
+ from GridCalEngine.Core.Devices.Diagrams.graphic_location import GraphicLocation
20
+ from GridCalEngine.Core.Devices.Diagrams.map_location import MapLocation
21
+ from GridCalEngine.Core.Devices.editable_device import EditableDevice
22
+ from GridCalEngine.enumerations import DiagramType, DeviceType
23
+
24
+
25
+ class MapDiagram(BaseDiagram):
26
+ """
27
+ MapDiagram
28
+ """
29
+
30
+ def __init__(self, idtag: Union[None, str] = None, name: str = '',
31
+ tile_source: str = '', start_level: int = 11,
32
+ longitude: float = -15.41, latitude: float = 40.11) -> None:
33
+ """
34
+ MapDiagram
35
+ :param idtag: uuid
36
+ :param name: name of the diagram
37
+ :param tile_source: tiles' source
38
+ :param start_level: zoom level
39
+ """
40
+ BaseDiagram.__init__(self, idtag=idtag, name=name, diagram_type=DiagramType.SubstationLineMap)
41
+
42
+ self.tile_source = tile_source
43
+
44
+ self.start_level = start_level
45
+
46
+ self.longitude = longitude # longitude
47
+
48
+ self.latitude = latitude # latitude
49
+
50
+ def get_properties_dict(self) -> Dict[str, Union[str, int, float, Dict[str, Union[GraphicLocation, MapLocation]]]]:
51
+ """
52
+ get the properties dictionary to save
53
+ :return: dictionary to serialize
54
+ """
55
+ data = super().get_properties_dict()
56
+ data['tile_source'] = self.tile_source
57
+ data['start_level'] = self.start_level
58
+ data['longitude'] = self.longitude
59
+ data['latitude'] = self.latitude
60
+ return data
61
+
62
+ def parse_data(self,
63
+ data: Dict[str, Dict[str, Dict[str, Union[int, float]]]],
64
+ obj_dict: Dict[str, Dict[str, EditableDevice]]):
65
+ """
66
+ Parse file data ito this class
67
+ :param data: json dictionary
68
+ :param obj_dict: dictionary of circuit objects by type to fincd the api objects back from file loading
69
+ """
70
+ super().parse_data(data=data, obj_dict=obj_dict)
71
+
72
+ self.tile_source = data.get('tile_source', '')
73
+ self.start_level = data.get('start_level', 11)
74
+ self.longitude = data.get('longitude', -15.41)
75
+ self.latitude = data.get('latitude', 40.11)
@@ -21,3 +21,4 @@ from GridCalEngine.Core.Devices.Injections.generator import Generator
21
21
  from GridCalEngine.Core.Devices.Injections.load import Load
22
22
  from GridCalEngine.Core.Devices.Injections.shunt import Shunt
23
23
  from GridCalEngine.Core.Devices.Injections.static_generator import StaticGenerator
24
+ from GridCalEngine.Core.Devices.Injections.generator_q_curve import GeneratorQCurve
@@ -23,70 +23,7 @@ from GridCalEngine.basic_structures import Logger, Vec, Mat
23
23
  from GridCalEngine.enumerations import DeviceType, BuildStatus
24
24
  from GridCalEngine.Core.Devices.Aggregation.technology import Technology
25
25
  from GridCalEngine.Core.Devices.Injections.injection_template import InjectionTemplate
26
-
27
-
28
- def make_default_q_curve(Snom: float, Qmin: float, Qmax: float, n: int = 3) -> Mat:
29
- """
30
- Compute the generator capability curve
31
- :param Snom: Nominal power
32
- :param Qmin: Minimum reactive power
33
- :param Qmax: Maximum reactive power
34
- :param n: number of points, at least 3
35
- :return: Array of points [(P1, Qmin1, Qmax1), (P2, Qmin2, Qmax2), ...]
36
- """
37
- assert (n > 2)
38
- pts = np.zeros((n, 3))
39
- s2 = Snom * Snom
40
-
41
- Qmax2 = Qmax if Qmax < Snom else Snom
42
- Qmin2 = Qmin if Qmin > -Snom else -Snom
43
-
44
- # Compute the intersections of the Qlimits with the natural curve
45
- p0_max = np.sqrt(s2 - Qmax2 * Qmax2)
46
- p0_min = np.sqrt(s2 - Qmin2 * Qmin2)
47
- p0 = min(p0_max, p0_min) # pick the lower limit as the starting point for sampling
48
-
49
- pts[1:, 0] = np.linspace(p0, Snom, n - 1)
50
- pts[0, 0] = 0
51
- pts[0, 1] = Qmin2
52
- pts[0, 2] = Qmax2
53
-
54
- for i in range(1, n):
55
- p2 = pts[i, 0] * pts[i, 0] # P^2
56
- q = np.sqrt(s2 - p2) # point that naturally matches Q = sqrt(S^2 - P^2)
57
-
58
- # assign the natural point if it does not violates the limits imposes, else set the limit
59
- qmin = -q if -q > Qmin2 else Qmin2
60
- qmax = q if q < Qmax2 else Qmax2
61
-
62
- # Enforce that Qmax > Qmin
63
- if qmax < qmin:
64
- qmax = qmin
65
- if qmin > qmax:
66
- qmin = qmax
67
-
68
- # Assign the points
69
- pts[i, 1] = qmin
70
- pts[i, 2] = qmax
71
-
72
- return pts
73
-
74
-
75
- def get_q_limits(q_points: Mat, p: Vec) -> Tuple[Vec, Vec]:
76
- """
77
- Get the reactive power limits
78
- :param q_points: Array of points [(P1, Qmin1, Qmax1), (P2, Qmin2, Qmax2), ...]
79
- :param p: active power value (or array)
80
- :return:
81
- """
82
- all_p = q_points[:, 0]
83
- all_qmin = q_points[:, 1]
84
- all_qmax = q_points[:, 2]
85
-
86
- qmin = np.interp(p, all_p, all_qmin)
87
- qmax = np.interp(p, all_p, all_qmax)
88
-
89
- return qmin, qmax
26
+ from GridCalEngine.Core.Devices.Injections.generator_q_curve import GeneratorQCurve
90
27
 
91
28
 
92
29
  class Generator(InjectionTemplate):
@@ -246,11 +183,14 @@ class Generator(InjectionTemplate):
246
183
  # Maximum reactive power in MVAr
247
184
  self.qmax_set = Qmax
248
185
 
186
+ # declare the generation curve
187
+ self.q_curve = GeneratorQCurve()
188
+
249
189
  if q_points is not None:
250
- self.q_points = np.array(q_points)
190
+ self.q_curve.set_data(np.array(q_points))
251
191
  self.custom_q_points = True
252
192
  else:
253
- self.q_points = make_default_q_curve(self.Snom, self.qmin_set, self.qmax_set)
193
+ self.q_curve.make_default_q_curve(self.Snom, self.qmin_set, self.qmax_set, n=1)
254
194
  self.custom_q_points = False
255
195
 
256
196
  self.Cost2 = 0.0 # Cost of operation €/MW²
@@ -298,6 +238,9 @@ class Generator(InjectionTemplate):
298
238
  self.register(key='Qmax', units='MVAr', tpe=float, definition='Maximum reactive power.')
299
239
  self.register(key='use_reactive_power_curve', units='', tpe=bool,
300
240
  definition='Use the reactive power capability curve?')
241
+ self.register(key='q_curve', units='MVAr', tpe=DeviceType.GeneratorQCurve,
242
+ definition='Capability curve data (double click on the generator to edit)',
243
+ editable=False, display=False)
301
244
  self.register(key='Pmin', units='MW', tpe=float, definition='Minimum active power. Used in OPF.')
302
245
  self.register(key='Pmax', units='MW', tpe=float, definition='Maximum active power. Used in OPF.')
303
246
  self.register(key='R1', units='p.u.', tpe=float, definition='Total positive sequence resistance.')
@@ -429,6 +372,8 @@ class Generator(InjectionTemplate):
429
372
  'snom': self.Snom,
430
373
  'qmin': self.Qmin,
431
374
  'qmax': self.Qmax,
375
+ 'q_curve': self.q_curve.str(),
376
+
432
377
  'pmin': self.Pmin,
433
378
  'pmax': self.Pmax,
434
379
  'cost2': self.Cost2,
@@ -558,12 +503,7 @@ class Generator(InjectionTemplate):
558
503
  Return the reactive power upper limit
559
504
  :return: value
560
505
  """
561
- if self.use_reactive_power_curve:
562
- all_p = self.q_points[:, 0]
563
- all_qmax = self.q_points[:, 2]
564
- return np.interp(self.P, all_p, all_qmax)
565
- else:
566
- return self.qmax_set
506
+ return self.qmax_set
567
507
 
568
508
  @Qmax.setter
569
509
  def Qmax(self, val):
@@ -575,12 +515,7 @@ class Generator(InjectionTemplate):
575
515
  Return the reactive power lower limit
576
516
  :return: value
577
517
  """
578
- if self.use_reactive_power_curve:
579
- all_p = self.q_points[:, 0]
580
- all_qmin = self.q_points[:, 1]
581
- return np.interp(self.P, all_p, all_qmin)
582
- else:
583
- return self.qmin_set
518
+ return self.qmin_set
584
519
 
585
520
  @Qmin.setter
586
521
  def Qmin(self, val):
@@ -602,5 +537,5 @@ class Generator(InjectionTemplate):
602
537
  :param val: float value
603
538
  """
604
539
  self._Snom = val
605
- if not self.custom_q_points:
606
- self.q_points = make_default_q_curve(self._Snom, self.qmin_set, self.qmax_set)
540
+ # if not self.custom_q_points:
541
+ # self.q_curve.make_default_q_curve(self._Snom, self.qmin_set, self.qmax_set)
@@ -0,0 +1,219 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2023 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ import json
18
+ import numpy as np
19
+ from typing import Tuple
20
+ from matplotlib.pyplot import axis
21
+ from matplotlib import pyplot as plt
22
+ from GridCalEngine.basic_structures import Mat
23
+
24
+
25
+ class GeneratorQCurve:
26
+ """
27
+ GeneratorQCurve
28
+ """
29
+
30
+ def __init__(self):
31
+
32
+ # Array of points [(P1, Qmin1, Qmax1), (P2, Qmin2, Qmax2), ...]
33
+ self._q_points: Mat = np.zeros((0, 3))
34
+
35
+ def set_data(self, data: Mat):
36
+ """
37
+ Set the data
38
+ :param data: numpy array with [(P1, Qmin1, Qmax1), (P2, Qmin2, Qmax2), ...], must have 3 rows or more
39
+ """
40
+ assert data.shape[1] == 3 # must have exactly 3 columns: P, Qmin, Qmax
41
+ assert data.shape[0] > 0 # must have at leat one point
42
+ self._q_points = data
43
+
44
+ def get_data(self):
45
+ return self._q_points
46
+
47
+ def get_data_by_type(self):
48
+
49
+ return self._q_points[:, 0], self._q_points[:, 1], self._q_points[:, 2]
50
+
51
+ def make_default_q_curve(self, Snom: float, Qmin: float, Qmax: float, n: int = 3):
52
+ """
53
+ Compute the theoretical generator capability curve
54
+ :param Snom: Nominal power
55
+ :param Qmin: Minimum reactive power
56
+ :param Qmax: Maximum reactive power
57
+ :param n: number of points, at least 3
58
+ """
59
+ self._q_points = np.zeros((n, 3))
60
+
61
+ if n > 1:
62
+
63
+ s2 = Snom * Snom
64
+
65
+ Qmax2 = Qmax if Qmax < Snom else Snom
66
+ Qmin2 = Qmin if Qmin > -Snom else -Snom
67
+
68
+ # Compute the intersections of the Qlimits with the natural curve
69
+ p0_max = np.sqrt(s2 - Qmax2 * Qmax2)
70
+ p0_min = np.sqrt(s2 - Qmin2 * Qmin2)
71
+ p0 = min(p0_max, p0_min) # pick the lower limit as the starting point for sampling
72
+
73
+ # generate evenly spaced active power points from 0 to Snom
74
+ self._q_points[1:, 0] = np.linspace(p0, Snom, n - 1)
75
+
76
+ # enter the base points
77
+ self._q_points[0, 0] = 0
78
+ self._q_points[0, 1] = Qmin2
79
+ self._q_points[0, 2] = Qmax2
80
+
81
+ for i in range(1, n):
82
+ p2 = self._q_points[i, 0] * self._q_points[i, 0] # P^2
83
+ q = np.sqrt(s2 - p2) # point that naturally matches Q = sqrt(S^2 - P^2)
84
+
85
+ # assign the natural point if it does not violates the limits imposes, else set the limit
86
+ qmin = -q if -q > Qmin2 else Qmin2
87
+ qmax = q if q < Qmax2 else Qmax2
88
+
89
+ # Enforce that Qmax > Qmin
90
+ if qmax < qmin:
91
+ qmax = qmin
92
+ if qmin > qmax:
93
+ qmin = qmax
94
+
95
+ # Assign the points
96
+ self._q_points[i, 1] = qmin
97
+ self._q_points[i, 2] = qmax
98
+
99
+ else:
100
+ self._q_points[0, 0] = 0
101
+ self._q_points[0, 1] = Qmin
102
+ self._q_points[0, 2] = Qmax
103
+
104
+ def get_q_limits(self, p: float) -> Tuple[float, float]:
105
+ """
106
+ Get the reactive power limits
107
+ :param p: active power value (or array)
108
+ :return: Qmin (float), Qmax (float)
109
+ """
110
+ if self._q_points.shape[0] > 1:
111
+ all_p = self._q_points[:, 0]
112
+ all_qmin = self._q_points[:, 1]
113
+ all_qmax = self._q_points[:, 2]
114
+
115
+ qmin = np.interp(p, all_p, all_qmin)
116
+ qmax = np.interp(p, all_p, all_qmax)
117
+
118
+ return qmin, qmax
119
+ else:
120
+ return self._q_points[0, 1], self._q_points[0, 2]
121
+
122
+ def get_qmax(self, p: float) -> float:
123
+ """
124
+ Get Qmax
125
+ :param p: active power value in MW
126
+ :return: Qmax in MVAr
127
+ """
128
+ if self._q_points.shape[0] > 1:
129
+ return np.interp(p, self._q_points[:, 0], self._q_points[:, 2])
130
+ else:
131
+ return self._q_points[0, 2]
132
+
133
+ def get_qmin(self, p: float) -> float:
134
+ """
135
+ Get Qmin
136
+ :param p: active power value in MW
137
+ :return: Qmin in MVAr
138
+ """
139
+ if self._q_points.shape[0] > 1:
140
+ return np.interp(p, self._q_points[:, 0], self._q_points[:, 1])
141
+ else:
142
+ return self._q_points[0, 1]
143
+
144
+ def __str__(self):
145
+ """
146
+ Get string representation of the curve
147
+ :return: json string of list of lists: "[[P1, Qmin1, Qmax1], [P2, Qmin2, Qmax2], ...]"
148
+ """
149
+ return self.str()
150
+
151
+ def str(self) -> str:
152
+ """
153
+ Get string representation of the curve
154
+ :return: json string of list of lists: "[[P1, Qmin1, Qmax1], [P2, Qmin2, Qmax2], ...]"
155
+ """
156
+ return json.dumps(self._q_points.tolist())
157
+
158
+ def parse(self, val: str):
159
+ """
160
+ Parse json curve data
161
+ :param val: string value: "[[P1, Qmin1, Qmax1], [P2, Qmin2, Qmax2], ...]"
162
+ """
163
+ data = json.loads(val)
164
+ n = len(data)
165
+ self._q_points = np.zeros((n, 3))
166
+ for i, row in enumerate(data):
167
+ self._q_points[i, 0] = row[0]
168
+ self._q_points[i, 1] = row[1]
169
+ self._q_points[i, 2] = row[2]
170
+
171
+ def get_Qmin(self):
172
+
173
+ return self._q_points[:, 1].min()
174
+
175
+ def get_Qmax(self):
176
+
177
+ return self._q_points[:, 2].max()
178
+
179
+ def get_Pmin(self):
180
+
181
+ return self._q_points[:, 0].min()
182
+
183
+ def get_Pmax(self):
184
+
185
+ return self._q_points[:, 0].max()
186
+
187
+ def get_Snom(self):
188
+
189
+ qmin = self._q_points[:, 1].min()
190
+ qmax = self._q_points[:, 2].max()
191
+
192
+ qfinal = max(abs(qmin), abs(qmax))
193
+ pmax = self._q_points[:, 0].max()
194
+
195
+ return np.sqrt(pmax * pmax + qfinal * qfinal)
196
+
197
+ def plot(self, ax: plt.axis):
198
+ """
199
+
200
+ :param ax:
201
+ :return:
202
+ """
203
+ x = self._q_points[:, 0]
204
+ y1 = self._q_points[:, 1]
205
+ y2 = self._q_points[:, 2]
206
+ ax.plot(x, y1,
207
+ color='red',
208
+ marker='o',
209
+ linestyle='solid',
210
+ linewidth=2,
211
+ markersize=4)
212
+ ax.plot(x, y2,
213
+ color='red',
214
+ marker='o',
215
+ linestyle='solid',
216
+ linewidth=2,
217
+ markersize=4)
218
+ ax.set_xlabel("Q (MVAr)")
219
+ ax.set_ylabel("P (MW)")
@@ -277,15 +277,17 @@ class EditableDevice:
277
277
  data = list()
278
278
  for name, properties in self.editable_headers.items():
279
279
  obj = getattr(self, name)
280
- if properties.tpe not in [str, float, int, bool]:
280
+ if properties.tpe in [str, float, int, bool]:
281
+ data.append(obj)
282
+ elif properties.tpe == DeviceType.GeneratorQCurve:
283
+ data.append(obj.str())
284
+ else:
281
285
  # if the object is not of a primary type, get the idtag instead
282
286
  if hasattr(obj, 'idtag'):
283
287
  data.append(obj.idtag)
284
288
  else:
285
289
  # some data types might not have the idtag, ten just use the str method
286
290
  data.append(str(obj))
287
- else:
288
- data.append(obj)
289
291
  return data
290
292
 
291
293
  def get_headers(self) -> List[AnyStr]:
@@ -421,7 +423,10 @@ class EditableDevice:
421
423
  """
422
424
  tpe = type(self)
423
425
 
424
- new_obj = tpe()
426
+ new_obj = tpe(name=self.name,
427
+ idtag=self.idtag,
428
+ device_type=self.device_type,
429
+ code=self.code)
425
430
 
426
431
  for prop_name, value in self.__dict__.items():
427
432
  setattr(new_obj, prop_name, value)