GridCalEngine 5.3.19__tar.gz → 5.3.20__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 (778) hide show
  1. gridcalengine-5.3.20/GridCalEngine/Compilers/circuit_to_gslv.py +2434 -0
  2. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/overhead_line_type.py +405 -166
  3. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/wire.py +55 -12
  4. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/editable_device.py +3 -0
  5. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/assets.py +58 -25
  6. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/multi_circuit.py +8 -4
  7. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/catalogue.py +2 -5
  8. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/excel_interface.py +2 -2
  9. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Derivatives/csc_derivatives.py +31 -30
  10. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_advanced_formulation.py +9 -6
  11. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_driver.py +68 -3
  12. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/selected_interface.py +0 -1
  13. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/__version__.py +1 -1
  14. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/PKG-INFO +1 -1
  15. gridcalengine-5.3.19/GridCalEngine/Compilers/circuit_to_gslv.py +0 -1581
  16. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/__init__.py +0 -0
  17. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/circuit_to_bentayga.py +0 -0
  18. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/circuit_to_data.py +0 -0
  19. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/circuit_to_newton_pa.py +0 -0
  20. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/circuit_to_optimods.py +0 -0
  21. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Compilers/circuit_to_pgm.py +0 -0
  22. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/__init__.py +0 -0
  23. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/active_branch_data.py +0 -0
  24. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/battery_data.py +0 -0
  25. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/branch_parent_data.py +0 -0
  26. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/bus_data.py +0 -0
  27. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/fluid_node_data.py +0 -0
  28. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/fluid_p2x_data.py +0 -0
  29. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/fluid_path_data.py +0 -0
  30. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/fluid_pump_data.py +0 -0
  31. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/fluid_turbine_data.py +0 -0
  32. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/generator_data.py +0 -0
  33. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/hvdc_data.py +0 -0
  34. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/load_data.py +0 -0
  35. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/numerical_circuit.py +0 -0
  36. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/passive_branch_data.py +0 -0
  37. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/shunt_data.py +0 -0
  38. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/DataStructures/vsc_data.py +0 -0
  39. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/__init__.py +0 -0
  40. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/area.py +0 -0
  41. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/branch_group.py +0 -0
  42. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/community.py +0 -0
  43. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/contingency.py +0 -0
  44. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/contingency_group.py +0 -0
  45. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/country.py +0 -0
  46. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/facility.py +0 -0
  47. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/inter_aggregation_info.py +0 -0
  48. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/investment.py +0 -0
  49. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/investments_group.py +0 -0
  50. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/modelling_authority.py +0 -0
  51. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/municipality.py +0 -0
  52. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/region.py +0 -0
  53. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/remedial_action.py +0 -0
  54. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/remedial_action_group.py +0 -0
  55. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Aggregation/zone.py +0 -0
  56. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Associations/__init__.py +0 -0
  57. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Associations/association.py +0 -0
  58. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Associations/emission_gas.py +0 -0
  59. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Associations/fuel.py +0 -0
  60. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Associations/technology.py +0 -0
  61. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/__init__.py +0 -0
  62. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/branch.py +0 -0
  63. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/dc_line.py +0 -0
  64. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/hvdc_line.py +0 -0
  65. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/line.py +0 -0
  66. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/line_locations.py +0 -0
  67. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/sequence_line_type.py +0 -0
  68. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/series_reactance.py +0 -0
  69. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/switch.py +0 -0
  70. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/tap_changer.py +0 -0
  71. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/transformer.py +0 -0
  72. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/transformer3w.py +0 -0
  73. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/transformer_type.py +0 -0
  74. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/underground_line_type.py +0 -0
  75. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/upfc.py +0 -0
  76. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/vsc.py +0 -0
  77. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Branches/winding.py +0 -0
  78. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/__init__.py +0 -0
  79. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/base_diagram.py +0 -0
  80. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/graphic_location.py +0 -0
  81. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/map_diagram.py +0 -0
  82. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/map_location.py +0 -0
  83. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/palettes.py +0 -0
  84. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Diagrams/schematic_diagram.py +0 -0
  85. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/__init__.py +0 -0
  86. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_injection_template.py +0 -0
  87. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_node.py +0 -0
  88. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_p2x.py +0 -0
  89. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_path.py +0 -0
  90. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_pump.py +0 -0
  91. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Fluid/fluid_turbine.py +0 -0
  92. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/__init__.py +0 -0
  93. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/battery.py +0 -0
  94. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/controllable_shunt.py +0 -0
  95. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/current_injection.py +0 -0
  96. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/external_grid.py +0 -0
  97. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/generator.py +0 -0
  98. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/generator_q_curve.py +0 -0
  99. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/load.py +0 -0
  100. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/shunt.py +0 -0
  101. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Injections/static_generator.py +0 -0
  102. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/__init__.py +0 -0
  103. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/branch_parent.py +0 -0
  104. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/controllable_branch_parent.py +0 -0
  105. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/generator_parent.py +0 -0
  106. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/injection_parent.py +0 -0
  107. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/load_parent.py +0 -0
  108. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/physical_device.py +0 -0
  109. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Parents/shunt_parent.py +0 -0
  110. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/__init__.py +0 -0
  111. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/bus.py +0 -0
  112. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/busbar.py +0 -0
  113. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/connectivity_node.py +0 -0
  114. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/substation.py +0 -0
  115. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/Substation/voltage_level.py +0 -0
  116. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/__init__.py +0 -0
  117. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/admittance_matrix.py +0 -0
  118. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/comparison.py +0 -0
  119. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/measurement.py +0 -0
  120. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/profile.py +0 -0
  121. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Devices/types.py +0 -0
  122. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/__init__.py +0 -0
  123. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/base/__init__.py +0 -0
  124. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/base/base_circuit.py +0 -0
  125. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/base/base_device.py +0 -0
  126. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/base/base_property.py +0 -0
  127. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/base/units.py +0 -0
  128. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/__init__.py +0 -0
  129. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/__init__.py +0 -0
  130. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/base.py +0 -0
  131. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_assets/__init__.py +0 -0
  132. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_2_4_15_assets.py +0 -0
  133. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_3_0_0_assets.py +0 -0
  134. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_circuit.py +0 -0
  135. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_create_instances.py +0 -0
  136. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_data_parser.py +0 -0
  137. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_data_validator.py +0 -0
  138. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_enums.py +0 -0
  139. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_export.py +0 -0
  140. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_property.py +0 -0
  141. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_to_gridcal.py +0 -0
  142. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_utils.py +0 -0
  143. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/__init__.py +0 -0
  144. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/__init__.py +0 -0
  145. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ac_line_segment.py +0 -0
  146. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converter.py +0 -0
  147. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converterdc_terminal.py +0 -0
  148. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_terminal.py +0 -0
  149. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/active_power_limit.py +0 -0
  150. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/analog_control.py +0 -0
  151. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/apparent_power_limit.py +0 -0
  152. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/asynchronous_machine.py +0 -0
  153. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/base_voltage.py +0 -0
  154. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/basic_interval_schedule.py +0 -0
  155. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bay.py +0 -0
  156. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/breaker.py +0 -0
  157. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bus_name_marker.py +0 -0
  158. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/busbar_section.py +0 -0
  159. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conducting_equipment.py +0 -0
  160. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conductor.py +0 -0
  161. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load.py +0 -0
  162. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load_group.py +0 -0
  163. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node.py +0 -0
  164. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node_container.py +0 -0
  165. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connector.py +0 -0
  166. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control.py +0 -0
  167. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area.py +0 -0
  168. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area_generating_unit.py +0 -0
  169. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/coordinate_system.py +0 -0
  170. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/cs_converter.py +0 -0
  171. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/current_limit.py +0 -0
  172. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve.py +0 -0
  173. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve_data.py +0 -0
  174. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_base_terminal.py +0 -0
  175. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_breaker.py +0 -0
  176. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_busbar.py +0 -0
  177. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_chopper.py +0 -0
  178. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_conducting_equipment.py +0 -0
  179. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_converter_unit.py +0 -0
  180. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_disconnector.py +0 -0
  181. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_equipment_container.py +0 -0
  182. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_ground.py +0 -0
  183. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line.py +0 -0
  184. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line_segment.py +0 -0
  185. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_node.py +0 -0
  186. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_series_device.py +0 -0
  187. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_shunt.py +0 -0
  188. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_switch.py +0 -0
  189. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_terminal.py +0 -0
  190. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_island.py +0 -0
  191. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_node.py +0 -0
  192. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/disconnector.py +0 -0
  193. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/earth_fault_compensator.py +0 -0
  194. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_area.py +0 -0
  195. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_consumer.py +0 -0
  196. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_scheduling_type.py +0 -0
  197. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_source.py +0 -0
  198. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment.py +0 -0
  199. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment_container.py +0 -0
  200. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_branch.py +0 -0
  201. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_equipment.py +0 -0
  202. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_injection.py +0 -0
  203. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_network.py +0 -0
  204. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_shunt.py +0 -0
  205. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/external_network_injection.py +0 -0
  206. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/fossil_fuel.py +0 -0
  207. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/full_model.py +0 -0
  208. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/generating_unit.py +0 -0
  209. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/geographical_region.py +0 -0
  210. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground.py +0 -0
  211. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground_disconnector.py +0 -0
  212. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/grounding_impedance.py +0 -0
  213. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_generating_unit.py +0 -0
  214. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_power_plant.py +0 -0
  215. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_pump.py +0 -0
  216. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/identified_object.py +0 -0
  217. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/junction.py +0 -0
  218. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit.py +0 -0
  219. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit_set.py +0 -0
  220. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/line.py +0 -0
  221. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/linear_shunt_compensator.py +0 -0
  222. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_area.py +0 -0
  223. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_break_switch.py +0 -0
  224. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_group.py +0 -0
  225. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_response_characteristic.py +0 -0
  226. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/location.py +0 -0
  227. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement.py +0 -0
  228. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement_value.py +0 -0
  229. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/mutual_coupling.py +0 -0
  230. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load.py +0 -0
  231. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load_group.py +0 -0
  232. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator.py +0 -0
  233. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator_point.py +0 -0
  234. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nuclear_generating_unit.py +0 -0
  235. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit.py +0 -0
  236. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_set.py +0 -0
  237. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_type.py +0 -0
  238. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/per_lengthdc_line_parameter.py +0 -0
  239. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/petersen_coil.py +0 -0
  240. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer.py +0 -0
  241. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_asymmetrical.py +0 -0
  242. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_linear.py +0 -0
  243. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_non_linear.py +0 -0
  244. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_symmetrical.py +0 -0
  245. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table.py +0 -0
  246. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table_point.py +0 -0
  247. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_tabular.py +0 -0
  248. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/position_point.py +0 -0
  249. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_system_resource.py +0 -0
  250. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer.py +0 -0
  251. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer_end.py +0 -0
  252. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/protected_switch.py +0 -0
  253. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/quality61850.py +0 -0
  254. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer.py +0 -0
  255. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table.py +0 -0
  256. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table_point.py +0 -0
  257. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reactive_capability_curve.py +0 -0
  258. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regular_interval_schedule.py +0 -0
  259. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_cond_eq.py +0 -0
  260. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_control.py +0 -0
  261. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reporting_group.py +0 -0
  262. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/rotating_machine.py +0 -0
  263. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/season_day_type_schedule.py +0 -0
  264. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/series_compensator.py +0 -0
  265. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/shunt_compensator.py +0 -0
  266. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/solar_generating_unit.py +0 -0
  267. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/static_var_compensator.py +0 -0
  268. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_geographical_region.py +0 -0
  269. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_load_area.py +0 -0
  270. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/substation.py +0 -0
  271. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_injection.py +0 -0
  272. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_power_flow.py +0 -0
  273. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_shunt_compensator_sections.py +0 -0
  274. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_status.py +0 -0
  275. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_tap_step.py +0 -0
  276. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_voltage.py +0 -0
  277. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/switch.py +0 -0
  278. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/synchronous_machine.py +0 -0
  279. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer.py +0 -0
  280. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_control.py +0 -0
  281. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_table_point.py +0 -0
  282. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/terminal.py +0 -0
  283. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/thermal_generating_unit.py +0 -0
  284. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tie_flow.py +0 -0
  285. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_island.py +0 -0
  286. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_node.py +0 -0
  287. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/transformer_end.py +0 -0
  288. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_level.py +0 -0
  289. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_limit.py +0 -0
  290. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_capability_curve.py +0 -0
  291. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_converter.py +0 -0
  292. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/wind_generating_unit.py +0 -0
  293. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/__init__.py +0 -0
  294. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/__init__.py +0 -0
  295. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ac_line_segment.py +0 -0
  296. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_converter.py +0 -0
  297. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_converterdc_terminal.py +0 -0
  298. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_terminal.py +0 -0
  299. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/active_power_limit.py +0 -0
  300. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/analog_control.py +0 -0
  301. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/apparent_power_limit.py +0 -0
  302. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/asynchronous_machine.py +0 -0
  303. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/auxiliary_equipment.py +0 -0
  304. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/base_voltage.py +0 -0
  305. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/basic_interval_schedule.py +0 -0
  306. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/battery_unit.py +0 -0
  307. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bay.py +0 -0
  308. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/boundary_point.py +0 -0
  309. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/breaker.py +0 -0
  310. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bus_name_marker.py +0 -0
  311. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/busbar_section.py +0 -0
  312. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/caes_plant.py +0 -0
  313. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/clamp.py +0 -0
  314. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cogeneration_plant.py +0 -0
  315. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/combined_cycle_plant.py +0 -0
  316. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conducting_equipment.py +0 -0
  317. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conductor.py +0 -0
  318. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load.py +0 -0
  319. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load_group.py +0 -0
  320. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node.py +0 -0
  321. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node_container.py +0 -0
  322. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connector.py +0 -0
  323. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control.py +0 -0
  324. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area.py +0 -0
  325. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area_generating_unit.py +0 -0
  326. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/coordinate_system.py +0 -0
  327. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cs_converter.py +0 -0
  328. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_limit.py +0 -0
  329. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_transformer.py +0 -0
  330. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve.py +0 -0
  331. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve_data.py +0 -0
  332. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cut.py +0 -0
  333. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_base_terminal.py +0 -0
  334. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_breaker.py +0 -0
  335. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_busbar.py +0 -0
  336. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_chopper.py +0 -0
  337. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_conducting_equipment.py +0 -0
  338. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_converter_unit.py +0 -0
  339. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_disconnector.py +0 -0
  340. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_equipment_container.py +0 -0
  341. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_ground.py +0 -0
  342. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line.py +0 -0
  343. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line_segment.py +0 -0
  344. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_node.py +0 -0
  345. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_series_device.py +0 -0
  346. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_shunt.py +0 -0
  347. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_switch.py +0 -0
  348. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_terminal.py +0 -0
  349. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_island.py +0 -0
  350. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_node.py +0 -0
  351. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnecting_circuit_breaker.py +0 -0
  352. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnector.py +0 -0
  353. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/earth_fault_compensator.py +0 -0
  354. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_area.py +0 -0
  355. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_connection.py +0 -0
  356. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_consumer.py +0 -0
  357. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_scheduling_type.py +0 -0
  358. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_source.py +0 -0
  359. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment.py +0 -0
  360. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment_container.py +0 -0
  361. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_branch.py +0 -0
  362. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_equipment.py +0 -0
  363. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_injection.py +0 -0
  364. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_network.py +0 -0
  365. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_shunt.py +0 -0
  366. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/external_network_injection.py +0 -0
  367. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fault_indicator.py +0 -0
  368. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fossil_fuel.py +0 -0
  369. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fuse.py +0 -0
  370. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/generating_unit.py +0 -0
  371. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/geographical_region.py +0 -0
  372. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground.py +0 -0
  373. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground_disconnector.py +0 -0
  374. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/grounding_impedance.py +0 -0
  375. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_generating_unit.py +0 -0
  376. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_power_plant.py +0 -0
  377. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_pump.py +0 -0
  378. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/identified_object.py +0 -0
  379. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/io_point.py +0 -0
  380. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/jumper.py +0 -0
  381. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/junction.py +0 -0
  382. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit.py +0 -0
  383. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit_set.py +0 -0
  384. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/line.py +0 -0
  385. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/linear_shunt_compensator.py +0 -0
  386. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_area.py +0 -0
  387. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_break_switch.py +0 -0
  388. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_group.py +0 -0
  389. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_response_characteristic.py +0 -0
  390. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/location.py +0 -0
  391. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement.py +0 -0
  392. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement_value.py +0 -0
  393. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/mutual_coupling.py +0 -0
  394. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load.py +0 -0
  395. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load_group.py +0 -0
  396. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator.py +0 -0
  397. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator_point.py +0 -0
  398. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nuclear_generating_unit.py +0 -0
  399. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit.py +0 -0
  400. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_set.py +0 -0
  401. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_type.py +0 -0
  402. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/petersen_coil.py +0 -0
  403. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer.py +0 -0
  404. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_asymmetrical.py +0 -0
  405. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_linear.py +0 -0
  406. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_non_linear.py +0 -0
  407. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_symmetrical.py +0 -0
  408. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table.py +0 -0
  409. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table_point.py +0 -0
  410. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_tabular.py +0 -0
  411. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/photo_voltaic_unit.py +0 -0
  412. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/position_point.py +0 -0
  413. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/post_line_sensor.py +0 -0
  414. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/potential_transformer.py +0 -0
  415. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_connection.py +0 -0
  416. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_unit.py +0 -0
  417. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_wind_unit.py +0 -0
  418. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_system_resource.py +0 -0
  419. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer.py +0 -0
  420. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer_end.py +0 -0
  421. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/protected_switch.py +0 -0
  422. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer.py +0 -0
  423. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table.py +0 -0
  424. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table_point.py +0 -0
  425. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reactive_capability_curve.py +0 -0
  426. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regular_interval_schedule.py +0 -0
  427. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_cond_eq.py +0 -0
  428. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_control.py +0 -0
  429. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reporting_group.py +0 -0
  430. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/rotating_machine.py +0 -0
  431. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/season_day_type_schedule.py +0 -0
  432. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sensor.py +0 -0
  433. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/series_compensator.py +0 -0
  434. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/service_location.py +0 -0
  435. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/shunt_compensator.py +0 -0
  436. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_generating_unit.py +0 -0
  437. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_power_plant.py +0 -0
  438. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/static_var_compensator.py +0 -0
  439. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_geographical_region.py +0 -0
  440. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_load_area.py +0 -0
  441. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/substation.py +0 -0
  442. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/surge_arrester.py +0 -0
  443. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_injection.py +0 -0
  444. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_power_flow.py +0 -0
  445. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_shunt_compensator_sections.py +0 -0
  446. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_status.py +0 -0
  447. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_switch.py +0 -0
  448. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_tap_step.py +0 -0
  449. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_voltage.py +0 -0
  450. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/switch.py +0 -0
  451. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/synchronous_machine.py +0 -0
  452. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer.py +0 -0
  453. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_control.py +0 -0
  454. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_table_point.py +0 -0
  455. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/terminal.py +0 -0
  456. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/thermal_generating_unit.py +0 -0
  457. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tie_flow.py +0 -0
  458. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_island.py +0 -0
  459. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_node.py +0 -0
  460. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/transformer_end.py +0 -0
  461. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_level.py +0 -0
  462. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_limit.py +0 -0
  463. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_capability_curve.py +0 -0
  464. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_converter.py +0 -0
  465. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wave_trap.py +0 -0
  466. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_generating_unit.py +0 -0
  467. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_power_plant.py +0 -0
  468. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/work_location.py +0 -0
  469. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/cgmes_writer.py +0 -0
  470. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/gridcal_to_cgmes.py +0 -0
  471. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/rdfs_infos.py +0 -0
  472. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cgmes/rdfs_serializations.py +0 -0
  473. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/__init__.py +0 -0
  474. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/cim_circuit.py +0 -0
  475. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/cim_data_parser.py +0 -0
  476. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/cim_devices.py +0 -0
  477. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/cim_enums.py +0 -0
  478. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/cim16/cim_parser.py +0 -0
  479. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/__init__.py +0 -0
  480. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/base_db.py +0 -0
  481. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/cgmes_lookup_db.py +0 -0
  482. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/db_handler.py +0 -0
  483. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/file_system.py +0 -0
  484. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/cim/db/psse_lookup_db.py +0 -0
  485. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/dgs/__init__.py +0 -0
  486. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/dgs/dgs_parser.py +0 -0
  487. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/epc/__init__.py +0 -0
  488. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/epc/epc_parser.py +0 -0
  489. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/file_handler.py +0 -0
  490. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/file_system.py +0 -0
  491. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/__init__.py +0 -0
  492. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/contingency_parser.py +0 -0
  493. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/generic_io_functions.py +0 -0
  494. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/h5_interface.py +0 -0
  495. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/json_parser.py +0 -0
  496. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/pack_unpack.py +0 -0
  497. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/remote.py +0 -0
  498. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/results_export.py +0 -0
  499. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/sqlite_interface.py +0 -0
  500. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/gridcal/zip_interface.py +0 -0
  501. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/__init__.py +0 -0
  502. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/area.py +0 -0
  503. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/branch.py +0 -0
  504. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/branch_dc.py +0 -0
  505. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/bus.py +0 -0
  506. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/bus_dc.py +0 -0
  507. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/converter_dc.py +0 -0
  508. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/generator.py +0 -0
  509. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/legacy/__init__.py +0 -0
  510. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/legacy/matpower_branch_definitions.py +0 -0
  511. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/legacy/matpower_bus_definitions.py +0 -0
  512. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/legacy/matpower_gen_definitions.py +0 -0
  513. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/legacy/matpower_parser.py +0 -0
  514. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/matpower_circuit.py +0 -0
  515. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/matpower_to_gridcal.py +0 -0
  516. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/matpower/matpower_utils.py +0 -0
  517. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/__init__.py +0 -0
  518. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/dpx_parser.py +0 -0
  519. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/ipa_parser.py +0 -0
  520. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/pandapower_parser.py +0 -0
  521. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/plx_parser.py +0 -0
  522. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/others/pypsa_parser.py +0 -0
  523. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/__init__.py +0 -0
  524. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/__init__.py +0 -0
  525. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/area.py +0 -0
  526. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/branch.py +0 -0
  527. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/bus.py +0 -0
  528. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/facts.py +0 -0
  529. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/fixed_shunt.py +0 -0
  530. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/generator.py +0 -0
  531. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/gne_device.py +0 -0
  532. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/impedance_correction_table.py +0 -0
  533. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/induction_machine.py +0 -0
  534. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/inter_area.py +0 -0
  535. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/load.py +0 -0
  536. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/multi_section_line.py +0 -0
  537. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/node.py +0 -0
  538. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/owner.py +0 -0
  539. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/psse_circuit.py +0 -0
  540. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/psse_object.py +0 -0
  541. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/psse_property.py +0 -0
  542. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/substation.py +0 -0
  543. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/switched_shunt.py +0 -0
  544. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/system_switching_device.py +0 -0
  545. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/transformer.py +0 -0
  546. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/two_terminal_dc_line.py +0 -0
  547. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/vsc_dc_line.py +0 -0
  548. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/devices/zone.py +0 -0
  549. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/gridcal_to_raw.py +0 -0
  550. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/raw_functions.py +0 -0
  551. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/raw_parser_writer.py +0 -0
  552. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/raw_to_gridcal.py +0 -0
  553. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/raw_writer_comment_map.py +0 -0
  554. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/raw/rawx_parser_writer.py +0 -0
  555. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/__init__.py +0 -0
  556. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/__init__.py +0 -0
  557. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_base.py +0 -0
  558. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_circuit.py +0 -0
  559. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_comment.py +0 -0
  560. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_exchange_power.py +0 -0
  561. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_line.py +0 -0
  562. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_node.py +0 -0
  563. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_transformer.py +0 -0
  564. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_transformer_regulation.py +0 -0
  565. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/devices/ucte_transformer_tap_table.py +0 -0
  566. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/IO/ucte/ucte_to_gridcal.py +0 -0
  567. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/LICENSE.txt +0 -0
  568. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ATC/__init__.py +0 -0
  569. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ATC/available_transfer_capacity_driver.py +0 -0
  570. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ATC/available_transfer_capacity_options.py +0 -0
  571. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ATC/available_transfer_capacity_ts_driver.py +0 -0
  572. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Clustering/__init__.py +0 -0
  573. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Clustering/clustering.py +0 -0
  574. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Clustering/clustering_driver.py +0 -0
  575. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Clustering/clustering_options.py +0 -0
  576. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Clustering/clustering_results.py +0 -0
  577. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/__init__.py +0 -0
  578. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/helm_contingencies.py +0 -0
  579. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/helm_contingency_analysis.py +0 -0
  580. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/linear_contingency_analysis.py +0 -0
  581. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/nonlinear_contingency_analysis.py +0 -0
  582. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/optimal_linear_contingency_analysis.py +0 -0
  583. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/srap.py +0 -0
  584. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/__init__.py +0 -0
  585. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingencies_report.py +0 -0
  586. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_driver.py +0 -0
  587. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_options.py +0 -0
  588. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_results.py +0 -0
  589. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_driver.py +0 -0
  590. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_results.py +0 -0
  591. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_plan.py +0 -0
  592. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/__init__.py +0 -0
  593. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow.py +0 -0
  594. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_driver.py +0 -0
  595. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_input.py +0 -0
  596. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_options.py +0 -0
  597. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_results.py +0 -0
  598. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Derivatives/__init__.py +0 -0
  599. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Derivatives/ac_jacobian.py +0 -0
  600. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Derivatives/csr_derivatives.py +0 -0
  601. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Derivatives/matpower_derivatives.py +0 -0
  602. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Dynamics/__init__.py +0 -0
  603. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Dynamics/dynamic_modules.py +0 -0
  604. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Dynamics/transient_stability_driver.py +0 -0
  605. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InputsAnalysis/__init__.py +0 -0
  606. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InputsAnalysis/inputs_analysis_driver.py +0 -0
  607. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/NSGA_3.py +0 -0
  608. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/__init__.py +0 -0
  609. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/mixed_variable_NSGA_2.py +0 -0
  610. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/random_eval.py +0 -0
  611. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/stop_crits.py +0 -0
  612. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/__init__.py +0 -0
  613. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_driver.py +0 -0
  614. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_options.py +0 -0
  615. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_results.py +0 -0
  616. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/__init__.py +0 -0
  617. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis.py +0 -0
  618. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis_driver.py +0 -0
  619. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis_options.py +0 -0
  620. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis_results.py +0 -0
  621. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_driver.py +0 -0
  622. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_results.py +0 -0
  623. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/__init__.py +0 -0
  624. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_driver.py +0 -0
  625. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_opf.py +0 -0
  626. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_options.py +0 -0
  627. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_results.py +0 -0
  628. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_ts_driver.py +0 -0
  629. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NTC/ntc_ts_results.py +0 -0
  630. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NodalCapacity/__init__.py +0 -0
  631. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_options.py +0 -0
  632. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_ts_driver.py +0 -0
  633. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_ts_results.py +0 -0
  634. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/Formulations/__init__.py +0 -0
  635. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/Formulations/ac_opf_problem.py +0 -0
  636. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/NumericalMethods/__init__.py +0 -0
  637. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf.py +0 -0
  638. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf_derivatives.py +0 -0
  639. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf_new.py +0 -0
  640. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/NumericalMethods/newton_raphson_ips_fx.py +0 -0
  641. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/__init__.py +0 -0
  642. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/linear_opf_ts.py +0 -0
  643. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/opf_driver.py +0 -0
  644. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/opf_options.py +0 -0
  645. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/opf_results.py +0 -0
  646. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/opf_ts_driver.py +0 -0
  647. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/opf_ts_results.py +0 -0
  648. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/OPF/simple_dispatch_ts.py +0 -0
  649. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/Formulations/__init__.py +0 -0
  650. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_basic_formulation.py +0 -0
  651. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_formulation_template.py +0 -0
  652. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_generalized_formulation.py +0 -0
  653. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/__init__.py +0 -0
  654. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/common_functions.py +0 -0
  655. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/discrete_controls.py +0 -0
  656. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/fast_decoupled.py +0 -0
  657. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/gauss_power_flow.py +0 -0
  658. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/helm_power_flow.py +0 -0
  659. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/iwamoto_newton_raphson.py +0 -0
  660. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/levenberg_marquadt_fx.py +0 -0
  661. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/linearized_power_flow.py +0 -0
  662. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_fx.py +0 -0
  663. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/powell_fx.py +0 -0
  664. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/__init__.py +0 -0
  665. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/grid_analysis.py +0 -0
  666. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_driver.py +0 -0
  667. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_options.py +0 -0
  668. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_results.py +0 -0
  669. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_input.py +0 -0
  670. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_results.py +0 -0
  671. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/PowerFlow/power_flow_worker.py +0 -0
  672. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/__init__.py +0 -0
  673. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit.py +0 -0
  674. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_driver.py +0 -0
  675. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_options.py +0 -0
  676. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_results.py +0 -0
  677. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_worker.py +0 -0
  678. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/SigmaAnalysis/__init__.py +0 -0
  679. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/SigmaAnalysis/sigma_analysis_driver.py +0 -0
  680. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/StateEstimation/__init__.py +0 -0
  681. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/StateEstimation/state_estimation.py +0 -0
  682. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/StateEstimation/state_estimation_inputs.py +0 -0
  683. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/StateEstimation/state_stimation_driver.py +0 -0
  684. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/__init__.py +0 -0
  685. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/blackout_driver.py +0 -0
  686. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/latin_hypercube_sampling.py +0 -0
  687. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/reliability_driver.py +0 -0
  688. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/reliability_iterable.py +0 -0
  689. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_driver.py +0 -0
  690. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_input.py +0 -0
  691. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_results.py +0 -0
  692. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Topology/__init__.py +0 -0
  693. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Topology/node_groups_driver.py +0 -0
  694. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Topology/topology_processor_driver.py +0 -0
  695. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/Topology/topology_reduction_driver.py +0 -0
  696. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/__init__.py +0 -0
  697. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/driver_handler.py +0 -0
  698. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/driver_template.py +0 -0
  699. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/options_template.py +0 -0
  700. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/results_table.py +0 -0
  701. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/results_template.py +0 -0
  702. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Simulations/types.py +0 -0
  703. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/__init__.py +0 -0
  704. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/admittance_matrices.py +0 -0
  705. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/detect_substations.py +0 -0
  706. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/simulation_indices.py +0 -0
  707. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/topology.py +0 -0
  708. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Topology/topology_processor.py +0 -0
  709. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Filtering/__init__.py +0 -0
  710. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Filtering/filtering.py +0 -0
  711. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Filtering/objects_filtering.py +0 -0
  712. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Filtering/results_table_filtering.py +0 -0
  713. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Filtering/timeseries_filtering.py +0 -0
  714. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/SimpleMip/__init__.py +0 -0
  715. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/SimpleMip/highs.py +0 -0
  716. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/SimpleMip/lpmodel.py +0 -0
  717. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/SimpleMip/lpobjects.py +0 -0
  718. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/__init__.py +0 -0
  719. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/MIP/pulp_interface.py +0 -0
  720. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/MVRSM_mo_pareto.py +0 -0
  721. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/MVRSM_mo_scaled.py +0 -0
  722. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/MVRSM_original.py +0 -0
  723. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/__init__.py +0 -0
  724. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/autodiff.py +0 -0
  725. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/common.py +0 -0
  726. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/ips.py +0 -0
  727. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/iwamoto.py +0 -0
  728. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/levenberg_marquadt.py +0 -0
  729. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/newton_raphson.py +0 -0
  730. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/newton_raphson_ode.py +0 -0
  731. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/non_dominated_sorting.py +0 -0
  732. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/nsga3.py +0 -0
  733. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/numerical_stability.py +0 -0
  734. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/powell.py +0 -0
  735. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/sparse_solve.py +0 -0
  736. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/NumericalMethods/weldorf_online_stddev.py +0 -0
  737. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/__init__.py +0 -0
  738. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/csc.py +0 -0
  739. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/csc2.py +0 -0
  740. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/csc_numba.py +0 -0
  741. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/sparse_array.py +0 -0
  742. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/Sparse/utils.py +0 -0
  743. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/SyntheticNetworks/__init__.py +0 -0
  744. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/SyntheticNetworks/rpgm_algo.py +0 -0
  745. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/__init__.py +0 -0
  746. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/__init__.py +0 -0
  747. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/__init__.py +0 -0
  748. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/copt_api.py +0 -0
  749. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/cplex_cmd.py +0 -0
  750. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/cplex_py.py +0 -0
  751. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/gurobi_cmd.py +0 -0
  752. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/gurobi_py.py +0 -0
  753. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_cmd.py +0 -0
  754. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_py.py +0 -0
  755. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver.py +0 -0
  756. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver_cmd.py +0 -0
  757. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/scip_api.py +0 -0
  758. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/apis/xpress_api.py +0 -0
  759. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/constants.py +0 -0
  760. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/model/__init__.py +0 -0
  761. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/model/lp_objects.py +0 -0
  762. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/model/lp_problem.py +0 -0
  763. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/mps_lp.py +0 -0
  764. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/paths.py +0 -0
  765. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/pulp.py +0 -0
  766. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/sparse.py +0 -0
  767. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/ThirdParty/pulp/utilities.py +0 -0
  768. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/__init__.py +0 -0
  769. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/progress_bar.py +0 -0
  770. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/scores.py +0 -0
  771. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/Utils/zip_file_mgmt.py +0 -0
  772. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/__init__.py +0 -0
  773. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/api.py +0 -0
  774. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/basic_structures.py +0 -0
  775. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/data_logger.py +0 -0
  776. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/GridCalEngine/enumerations.py +0 -0
  777. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/setup.cfg +0 -0
  778. {gridcalengine-5.3.19 → gridcalengine-5.3.20}/setup.py +0 -0
@@ -0,0 +1,2434 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ # SPDX-License-Identifier: MPL-2.0
5
+ from __future__ import annotations
6
+ import os.path
7
+ import warnings
8
+ import numpy as np
9
+ from typing import List, Dict, Union, Tuple, TYPE_CHECKING
10
+
11
+ import GridCalEngine
12
+ from GridCalEngine import TapModuleControl, TapPhaseControl
13
+ from GridCalEngine.basic_structures import IntVec, Vec
14
+ from GridCalEngine.Devices.profile import Profile
15
+ from GridCalEngine.Devices.multi_circuit import MultiCircuit
16
+ from GridCalEngine.enumerations import (HvdcControlType, SolverType, TimeGrouping,
17
+ ZonalGrouping, MIPSolvers, ContingencyMethod, ContingencyOperationTypes,
18
+ BuildStatus, BranchGroupTypes)
19
+ import GridCalEngine.Devices as dev
20
+ from GridCalEngine.Simulations.PowerFlow.power_flow_options import PowerFlowOptions
21
+ from GridCalEngine.Simulations.PowerFlow.power_flow_results import PowerFlowResults
22
+
23
+ from GridCalEngine.DataStructures.numerical_circuit import NumericalCircuit
24
+
25
+ from GridCalEngine.IO.file_system import get_create_gridcal_folder
26
+ from GridCalEngine.basic_structures import ConvergenceReport
27
+
28
+ if TYPE_CHECKING: # Only imports the below statements during type checking
29
+ from GridCalEngine.Simulations.OPF.opf_results import OptimalPowerFlowResults
30
+ from GridCalEngine.Simulations.OPF.opf_options import OptimalPowerFlowOptions
31
+ from GridCalEngine.Simulations.LinearFactors.linear_analysis_options import LinearAnalysisOptions
32
+ from GridCalEngine.Simulations.ContingencyAnalysis.contingency_analysis_options import ContingencyAnalysisOptions
33
+ from GridCalEngine.Simulations.ContingencyAnalysis.contingency_analysis_results import ContingencyAnalysisResults
34
+
35
+ GSLV_RECOMMENDED_VERSION = "0.0.4"
36
+ GSLV_VERSION = ''
37
+ GSLV_AVAILABLE = False
38
+ try:
39
+ import pygslv as pg
40
+
41
+ pg.activate(os.path.join(get_create_gridcal_folder(), "license.gslv"), verbose=True)
42
+
43
+ # activate
44
+ if not pg.isLicensed():
45
+ # license not found
46
+ GSLV_AVAILABLE = False
47
+ else:
48
+ # already activated
49
+ GSLV_AVAILABLE = True
50
+ GSLV_VERSION = pg.get_version()
51
+
52
+ if GSLV_AVAILABLE:
53
+ if GSLV_VERSION < GSLV_RECOMMENDED_VERSION:
54
+ warnings.warn(f"Recommended version for GSLV is {GSLV_RECOMMENDED_VERSION} "
55
+ f"instead of {GSLV_VERSION}")
56
+
57
+ build_status_dict = {
58
+ BuildStatus.Planned: pg.BuildStatus.Planned,
59
+ BuildStatus.Commissioned: pg.BuildStatus.Commissioned,
60
+ BuildStatus.Candidate: pg.BuildStatus.Candidate,
61
+ BuildStatus.Decommissioned: pg.BuildStatus.Decommissioned,
62
+ BuildStatus.PlannedDecommission: pg.BuildStatus.PlannedDecommission,
63
+ }
64
+
65
+ tap_module_control_mode_dict = {
66
+ TapModuleControl.fixed: pg.TapModuleControl.fixed,
67
+ TapModuleControl.Qf: pg.TapModuleControl.Qf,
68
+ TapModuleControl.Qt: pg.TapModuleControl.Qt,
69
+ TapModuleControl.Vm: pg.TapModuleControl.Vm,
70
+ }
71
+
72
+ tap_phase_control_mode_dict = {
73
+ TapPhaseControl.fixed: pg.TapPhaseControl.fixed,
74
+ TapPhaseControl.Pf: pg.TapPhaseControl.Pf,
75
+ TapPhaseControl.Pt: pg.TapPhaseControl.Pt,
76
+ }
77
+
78
+ hvdc_control_mode_dict = {
79
+ HvdcControlType.type_0_free: pg.HvdcControlType.type_0_free,
80
+ HvdcControlType.type_1_Pset: pg.HvdcControlType.type_1_Pset,
81
+ }
82
+
83
+ group_type_dict = {
84
+ BranchGroupTypes.GenericGroup: pg.BranchGroupTypes.GenericGroup,
85
+ BranchGroupTypes.TransformerGroup: pg.BranchGroupTypes.TransformerGroup,
86
+ BranchGroupTypes.LineSegmentsGroup: pg.BranchGroupTypes.LineSegmentsGroup,
87
+ }
88
+
89
+ contingency_ops_type_dict = {
90
+ ContingencyOperationTypes.Active: pg.ContingencyOperationTypes.Active,
91
+ ContingencyOperationTypes.PowerPercentage: pg.ContingencyOperationTypes.PowerPercentage,
92
+ }
93
+
94
+ except ImportError as e:
95
+ pg = None
96
+ GSLV_AVAILABLE = False
97
+ GSLV_VERSION = ''
98
+ build_status_dict = dict()
99
+ tap_module_control_mode_dict = dict()
100
+ tap_phase_control_mode_dict = dict()
101
+ contingency_ops_type_dict = dict()
102
+
103
+
104
+ def get_gslv_mip_solvers_list() -> List[str]:
105
+ """
106
+ Get list of available MIP solvers
107
+ :return:
108
+ """
109
+ if GSLV_AVAILABLE:
110
+ return list()
111
+ else:
112
+ return list()
113
+
114
+
115
+ def convert_tap_module_control_mode_dict(data: Dict[int, TapModuleControl]) -> Dict[int, "pg.TapModuleControl"]:
116
+ """
117
+ Function to convert a dictionary of TapModuleControl modes to pg.TapModuleControl modes
118
+ :param data:
119
+ :return:
120
+ """
121
+ return {i: tap_module_control_mode_dict[val] for i, val in data.items()}
122
+
123
+
124
+ def convert_tap_module_control_mode_lst(data: List[TapModuleControl]) -> List["pg.TapModuleControl"]:
125
+ """
126
+ Function to convert a list of TapModuleControl modes to pg.TapModuleControl modes
127
+ :param data:
128
+ :return:
129
+ """
130
+ return [tap_module_control_mode_dict[val] for val in data]
131
+
132
+
133
+ def convert_tap_phase_control_mode_dict(data: Dict[int, TapPhaseControl]) -> Dict[int, "pg.TapPhaseControl"]:
134
+ """
135
+ Function to convert a dictionary of TapPhaseControl modes to pg.TapPhaseControl modes
136
+ :param data:
137
+ :return:
138
+ """
139
+ return {i: tap_phase_control_mode_dict[val] for i, val in data.items()}
140
+
141
+
142
+ def convert_tap_phase_control_mode_lst(data: List[TapPhaseControl]) -> List["pg.TapPhaseControl"]:
143
+ """
144
+ Function to convert a list of TapPhaseControl modes to pg.TapPhaseControl modes
145
+ :param data:
146
+ :return:
147
+ """
148
+ return [tap_phase_control_mode_dict[val] for val in data]
149
+
150
+
151
+ def fill_profile(gslv_profile: "pg.Profiledouble|pg.Profilebool|pg.Profileint|pg.Profileuint",
152
+ gc_profile: Profile,
153
+ use_time_series: bool,
154
+ time_indices: Union[IntVec, None],
155
+ n_time: int = 1,
156
+ default_val: int | float | bool | TapPhaseControl | TapModuleControl = 0) -> None:
157
+ """
158
+ Generates a default time series
159
+ :param gslv_profile: Profile from gslv to fill in
160
+ :param gc_profile: Profile from gridcal to convert
161
+ :param use_time_series: use time series?
162
+ :param time_indices: time series indices if any (optional)
163
+ :param n_time: number of time steps
164
+ :param default_val: Default value
165
+ """
166
+
167
+ if use_time_series:
168
+ if gc_profile.is_sparse:
169
+ if time_indices is None:
170
+
171
+ if isinstance(default_val, TapPhaseControl):
172
+ data = convert_tap_phase_control_mode_dict(data=gc_profile.sparse_array.get_map())
173
+ elif isinstance(default_val, TapModuleControl):
174
+ data = convert_tap_module_control_mode_dict(data=gc_profile.sparse_array.get_map())
175
+ else:
176
+ data = gc_profile.sparse_array.get_map()
177
+
178
+ # we pick all the profile
179
+ if len(data) > 0:
180
+ gslv_profile.init_sparse(default_val=gc_profile.default_value, data=data)
181
+
182
+ else:
183
+ assert len(time_indices) == n_time
184
+
185
+ # we need a sliced version
186
+ sp_arr2 = gc_profile.sparse_array.slice(time_indices)
187
+
188
+ if isinstance(default_val, TapPhaseControl):
189
+ data = convert_tap_phase_control_mode_dict(data=sp_arr2.get_map())
190
+ elif isinstance(default_val, TapModuleControl):
191
+ data = convert_tap_module_control_mode_dict(data=sp_arr2.get_map())
192
+ else:
193
+ data = sp_arr2.get_map()
194
+
195
+ gslv_profile.init_sparse(default_val=gc_profile.default_value, data=data)
196
+
197
+ else:
198
+ if time_indices is None:
199
+ # we pick all the profile
200
+
201
+ if isinstance(default_val, TapPhaseControl):
202
+ data = convert_tap_phase_control_mode_lst(data=gc_profile.dense_array)
203
+ elif isinstance(default_val, TapModuleControl):
204
+ data = convert_tap_module_control_mode_dict(data=gc_profile.dense_array)
205
+ else:
206
+ data = gc_profile.dense_array
207
+
208
+ gslv_profile.init_dense(data)
209
+
210
+ else:
211
+ assert len(time_indices) == n_time
212
+ # we need a sliced version
213
+ if isinstance(default_val, TapPhaseControl):
214
+ data = convert_tap_phase_control_mode_lst(data=gc_profile.dense_array[time_indices])
215
+ elif isinstance(default_val, TapModuleControl):
216
+ data = convert_tap_module_control_mode_dict(data=gc_profile.dense_array[time_indices])
217
+ else:
218
+ data = gc_profile.dense_array[time_indices]
219
+
220
+ gslv_profile.init_dense(data)
221
+
222
+ else:
223
+ if isinstance(default_val, TapPhaseControl):
224
+ gslv_profile.fill(tap_phase_control_mode_dict[default_val])
225
+
226
+ elif isinstance(default_val, TapModuleControl):
227
+ gslv_profile.fill(tap_module_control_mode_dict[default_val])
228
+
229
+ else:
230
+ gslv_profile.fill(default_val)
231
+
232
+
233
+ def fill_profile_with_array(gslv_profile: "pg.Profiledouble",
234
+ arr: Vec,
235
+ use_time_series: bool,
236
+ time_indices: Union[IntVec, None],
237
+ n_time=1,
238
+ default_val=0) -> None:
239
+ """
240
+ Generates a default time series
241
+ :param gslv_profile: Profile from gslv to fill in
242
+ :param arr: array to fill in
243
+ :param use_time_series: use time series?
244
+ :param time_indices: time series indices if any (optional)
245
+ :param n_time: number of time steps
246
+ :param default_val: Default value
247
+ """
248
+
249
+ if use_time_series:
250
+ if time_indices is None:
251
+ # we pick all the profile
252
+ gslv_profile.init_dense(arr)
253
+ else:
254
+ assert len(time_indices) == n_time
255
+ # we need a sliced version
256
+ gslv_profile.init_dense(arr[time_indices])
257
+
258
+ else:
259
+ gslv_profile.fill(default_val)
260
+
261
+
262
+ def convert_area(area: dev.Area) -> "pg.Area":
263
+ """
264
+
265
+ :param area:
266
+ :return:
267
+ """
268
+ return pg.Area(idtag=area.idtag, code=str(area.code), name=area.name)
269
+
270
+
271
+ def add_areas(circuit: MultiCircuit,
272
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Area, "pg.Area"]:
273
+ """
274
+ Add GSLV Areas
275
+ :param circuit: GridCal circuit
276
+ :param gslv_grid: GSLV Circuit
277
+ :return: Dictionary [GridCal area] -> GSLV Area
278
+ """
279
+ d = dict()
280
+
281
+ for i, area in enumerate(circuit.areas):
282
+ elm = convert_area(area)
283
+ gslv_grid.add_area(elm)
284
+ d[area] = elm
285
+
286
+ return d
287
+
288
+
289
+ def convert_zone(zone: dev.Zone) -> "pg.Zone":
290
+ """
291
+
292
+ :param zone:
293
+ :return:
294
+ """
295
+ return pg.Zone(idtag=zone.idtag, code=str(zone.code), name=zone.name)
296
+
297
+
298
+ def add_zones(circuit: MultiCircuit,
299
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Zone, "pg.Zone"]:
300
+ """
301
+ Add GSLV Zones
302
+ :param circuit: GridCal circuit
303
+ :param gslv_grid: GSLV Circuit
304
+ :return: Dictionary [GridCal Zone] -> GSLV Zone
305
+ """
306
+ d = dict()
307
+
308
+ for i, zone in enumerate(circuit.zones):
309
+ elm = convert_zone(zone)
310
+ gslv_grid.add_zone(elm)
311
+ d[zone] = elm
312
+
313
+ return d
314
+
315
+
316
+ def convert_country(country: dev.Country) -> "pg.Country":
317
+ """
318
+
319
+ :param country:
320
+ :return:
321
+ """
322
+ return pg.Country(idtag=country.idtag, code=str(country.code), name=country.name)
323
+
324
+
325
+ def add_countries(circuit: MultiCircuit,
326
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Country, "pg.Country"]:
327
+ """
328
+ Add GSLV countries
329
+ :param circuit: GridCal circuit
330
+ :param gslv_grid: GSLV Circuit
331
+ :return: Dictionary [GridCal country] -> GSLV country
332
+ """
333
+ d = dict()
334
+
335
+ for i, country in enumerate(circuit.countries):
336
+ elm = convert_country(country)
337
+ gslv_grid.add_country(elm)
338
+ d[country] = elm
339
+
340
+ return d
341
+
342
+
343
+ def convert_municipality(country: dev.Municipality) -> "pg.Municipality":
344
+ """
345
+
346
+ :param country:
347
+ :return:
348
+ """
349
+ return pg.Municipality(idtag=country.idtag, code=str(country.code), name=country.name)
350
+
351
+
352
+ def add_municipalities(circuit: MultiCircuit,
353
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Country, "pg.Country"]:
354
+ """
355
+ Add GSLV countries
356
+ :param circuit: GridCal circuit
357
+ :param gslv_grid: GSLV Circuit
358
+ :return: Dictionary [GridCal country] -> GSLV country
359
+ """
360
+ d = dict()
361
+
362
+ for i, municipality in enumerate(circuit.municipalities):
363
+ elm = convert_municipality(municipality)
364
+ gslv_grid.add_municipality(elm)
365
+ d[municipality] = elm
366
+
367
+ return d
368
+
369
+
370
+ def convert_region(country: dev.Municipality) -> "pg.Municipality":
371
+ """
372
+
373
+ :param country:
374
+ :return:
375
+ """
376
+ return pg.Municipality(idtag=country.idtag, code=str(country.code), name=country.name)
377
+
378
+
379
+ def add_regions(circuit: MultiCircuit,
380
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Country, "pg.Country"]:
381
+ """
382
+ Add GSLV countries
383
+ :param circuit: GridCal circuit
384
+ :param gslv_grid: GSLV Circuit
385
+ :return: Dictionary [GridCal country] -> GSLV country
386
+ """
387
+ d = dict()
388
+
389
+ for i, municipality in enumerate(circuit.regions):
390
+ elm = convert_region(municipality)
391
+ gslv_grid.add_region(elm)
392
+ d[municipality] = elm
393
+
394
+ return d
395
+
396
+
397
+ def convert_branch_group(country: dev.BranchGroup) -> "pg.BranchGroup":
398
+ """
399
+
400
+ :param country:
401
+ :return:
402
+ """
403
+ return pg.BranchGroup(
404
+ idtag=country.idtag,
405
+ code=str(country.code),
406
+ name=country.name,
407
+ group_type=group_type_dict[country.group_type]
408
+ )
409
+
410
+
411
+ def add_branch_groups(circuit: MultiCircuit,
412
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.BranchGroup, "pg.BranchGroup"]:
413
+ """
414
+ Add GSLV countries
415
+ :param circuit: GridCal circuit
416
+ :param gslv_grid: GSLV Circuit
417
+ :return: Dictionary [GridCal country] -> GSLV country
418
+ """
419
+ d = dict()
420
+
421
+ for i, branch_group in enumerate(circuit.branch_groups):
422
+ elm = convert_branch_group(branch_group)
423
+ gslv_grid.add_branch_group(elm)
424
+ d[branch_group] = elm
425
+
426
+ return d
427
+
428
+
429
+ def convert_substation(se: dev.Substation, n_time: int) -> "pg.Substation":
430
+ """
431
+
432
+ :param se:
433
+ :param n_time:
434
+ :return:
435
+ """
436
+ return pg.Substation(
437
+ nt=n_time,
438
+ idtag=se.idtag,
439
+ code=str(se.code),
440
+ name=se.name
441
+ )
442
+
443
+
444
+ def add_substations(circuit: MultiCircuit,
445
+ gslv_grid: "pg.MultiCircuit",
446
+ n_time: int) -> Dict[dev.Substation, "pg.Substation"]:
447
+ """
448
+ Add GSLV substations
449
+ :param circuit: GridCal circuit
450
+ :param gslv_grid: GSLV Circuit
451
+ :param n_time: number of time steps
452
+ :return: Dictionary [GridCal Zone] -> GSLV Zone
453
+ """
454
+ d = dict()
455
+
456
+ for i, se in enumerate(circuit.substations):
457
+ elm = convert_substation(se, n_time=n_time)
458
+ gslv_grid.add_substation(elm)
459
+ d[se] = elm
460
+
461
+ return d
462
+
463
+
464
+ def convert_voltage_level(elm: dev.VoltageLevel,
465
+ substations_dict: Dict[dev.Substation, "pg.Substation"]) -> "pg.VoltageLevel":
466
+ """
467
+
468
+ :param elm:
469
+ :param substations_dict:
470
+ :return:
471
+ """
472
+ return pg.VoltageLevel(
473
+ idtag=elm.idtag,
474
+ code=str(elm.code),
475
+ name=elm.name,
476
+ Vnom=elm.Vnom,
477
+ substation=substations_dict.get(elm.substation, None)
478
+ )
479
+
480
+
481
+ def add_voltage_levels(
482
+ circuit: MultiCircuit,
483
+ gslv_grid: "pg.MultiCircuit",
484
+ substations_dict: Dict[dev.Substation, "pg.Substation"]
485
+ ) -> Dict[dev.VoltageLevel, "pg.VoltageLevel"]:
486
+ """
487
+ Add GSLV substations
488
+ :param circuit: GridCal circuit
489
+ :param gslv_grid: GSLV Circuit
490
+ :param substations_dict: substations mapping dictionary
491
+ :return: Dictionary [GridCal Zone] -> GSLV Zone
492
+ """
493
+ d = dict()
494
+
495
+ for i, vl in enumerate(circuit.voltage_levels):
496
+ elm = convert_voltage_level(vl, substations_dict=substations_dict)
497
+ gslv_grid.add_voltage_level(elm)
498
+ d[vl] = elm
499
+
500
+ return d
501
+
502
+
503
+ def convert_contingency_groups(elm: dev.ContingencyGroup) -> "pg.ContingencyGroup":
504
+ """
505
+
506
+ :param elm:
507
+ :return:
508
+ """
509
+ return pg.ContingencyGroup(idtag=elm.idtag,
510
+ code=str(elm.code),
511
+ name=elm.name,
512
+ category=elm.category)
513
+
514
+
515
+ def add_contingency_groups(circuit: MultiCircuit,
516
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.ContingencyGroup, "pg.ContingencyGroup"]:
517
+ """
518
+ Add GSLV ContingenciesGroup
519
+ :param circuit: GridCal circuit
520
+ :param gslv_grid: GSLV Circuit
521
+ :return: Dictionary [GridCal ContingenciesGroup] -> GSLV ContingenciesGroup
522
+ """
523
+ d = dict()
524
+
525
+ for i, elm in enumerate(circuit.get_contingency_groups()):
526
+ cg = convert_contingency_groups(elm)
527
+ gslv_grid.add_contingency_group(cg)
528
+ d[elm] = cg
529
+
530
+ return d
531
+
532
+
533
+ def convert_contingencies(elm: dev.Contingency,
534
+ n_time: int,
535
+ groups_dict: Dict[dev.ContingencyGroup, "pg.ContingencyGroup"]) -> "pg.Contingency":
536
+ """
537
+
538
+ :param elm:
539
+ :param n_time:
540
+ :param groups_dict:
541
+ :return:
542
+ """
543
+
544
+
545
+
546
+ return pg.Contingency(idtag=elm.idtag,
547
+ device_idtag=elm.device_idtag,
548
+ name=elm.name,
549
+ code=str(elm.code),
550
+ prop=contingency_ops_type_dict[elm.prop],
551
+ value=elm.value,
552
+ group=groups_dict[elm.group])
553
+
554
+
555
+ def add_contingencies(circuit: MultiCircuit,
556
+ gslv_grid: "pg.MultiCircuit",
557
+ n_time: int,
558
+ groups_dict: Dict[dev.ContingencyGroup, "pg.ContingencyGroup"], ):
559
+ """
560
+ Add GSLV ContingenciesGroup
561
+ :param circuit: GridCal circuit
562
+ :param gslv_grid: GSLV Circuit
563
+ :param n_time: number of time steps
564
+ :param groups_dict: Contingency groups dictionary
565
+ :return: Dictionary [GridCal ContingenciesGroup] -> GSLV ContingenciesGroup
566
+ """
567
+ d = dict()
568
+
569
+ for i, elm in enumerate(circuit.contingencies):
570
+ con = convert_contingencies(elm=elm,
571
+ n_time=n_time,
572
+ groups_dict=groups_dict)
573
+ gslv_grid.add_contingency(con)
574
+ d[elm] = con
575
+
576
+ return d
577
+
578
+
579
+ def convert_investment_group(elm: dev.InvestmentsGroup) -> "pg.InvestmentGroup":
580
+ """
581
+
582
+ :param elm:
583
+ :return:
584
+ """
585
+ return pg.InvestmentGroup(idtag=elm.idtag,
586
+ code=str(elm.code),
587
+ name=elm.name,
588
+ category=elm.category)
589
+
590
+
591
+ def add_investment_groups(circuit: MultiCircuit,
592
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.InvestmentsGroup, "pg.InvestmentGroup"]:
593
+ """
594
+
595
+ :param circuit:
596
+ :param gslv_grid:
597
+ :return:
598
+ """
599
+ d = dict()
600
+
601
+ for i, elm in enumerate(circuit.investments_groups):
602
+ ig = convert_investment_group(elm)
603
+ gslv_grid.add_investment_group(ig)
604
+ d[elm] = ig
605
+
606
+ return d
607
+
608
+
609
+ def convert_investment(
610
+ elm: dev.Investment,
611
+ groups_dict: Dict[dev.InvestmentsGroup, "pg.InvestmentGroup"]
612
+ ) -> "pg.Investment":
613
+ """
614
+
615
+ :param elm:
616
+ :param groups_dict:
617
+ :return:
618
+ """
619
+ return pg.Investment(idtag=elm.idtag,
620
+ code=str(elm.code),
621
+ name=elm.name,
622
+ device_idtag=elm.device_idtag,
623
+ group=groups_dict[elm.group],
624
+ CAPEX=elm.CAPEX,
625
+ OPEX=elm.OPEX,
626
+ status=elm.status, )
627
+
628
+
629
+ def add_investments(circuit: MultiCircuit,
630
+ gslv_grid: "pg.MultiCircuit",
631
+ groups_dict: Dict[dev.InvestmentsGroup, "pg.InvestmentGroup"]):
632
+ """
633
+
634
+ :param circuit:
635
+ :param gslv_grid:
636
+ :param groups_dict:
637
+ :return:
638
+ """
639
+ d = dict()
640
+
641
+ for i, elm in enumerate(circuit.investments):
642
+ investment = convert_investment(elm, groups_dict=groups_dict[elm.group])
643
+ gslv_grid.add_investment(investment)
644
+ d[elm] = investment
645
+
646
+ return d
647
+
648
+
649
+ def convert_facility(elm: dev.Facility) -> "pg.Facility":
650
+ """
651
+
652
+ :param elm:
653
+ :return:
654
+ """
655
+ return pg.Facility(idtag=elm.idtag,
656
+ code=str(elm.code),
657
+ name=elm.name)
658
+
659
+
660
+ def add_facilities(circuit: MultiCircuit,
661
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.Facility, "pg.Facility"]:
662
+ """
663
+
664
+ :param circuit:
665
+ :param gslv_grid:
666
+ :return:
667
+ """
668
+ d = dict()
669
+
670
+ for i, elm in enumerate(circuit.facilities):
671
+ facility = convert_facility(elm)
672
+ gslv_grid.add_facility(facility)
673
+ d[elm] = facility
674
+
675
+ return d
676
+
677
+
678
+ def convert_modelling_authority(elm: dev.ModellingAuthority) -> "pg.ModellingAuthority":
679
+ """
680
+
681
+ :param elm:
682
+ :return:
683
+ """
684
+ return pg.ModellingAuthority(idtag=elm.idtag,
685
+ code=str(elm.code),
686
+ name=elm.name)
687
+
688
+
689
+ def add_modelling_authorities(circuit: MultiCircuit,
690
+ gslv_grid: "pg.MultiCircuit") -> Dict[dev.ModellingAuthority, "pg.ModellingAuthority"]:
691
+ """
692
+
693
+ :param circuit:
694
+ :param gslv_grid:
695
+ :return:
696
+ """
697
+ d = dict()
698
+
699
+ for i, elm in enumerate(circuit.modelling_authorities):
700
+ ma = convert_modelling_authority(elm)
701
+ gslv_grid.add_modelling_authority(ma)
702
+ d[elm] = ma
703
+
704
+ return d
705
+
706
+
707
+ def convert_bus(elm: dev.Bus, n_time: int,
708
+ area_dict: Dict[dev.Area, "pg.Area"],
709
+ zone_dict: Dict[dev.Zone, "pg.Zone"],
710
+ substation_dict: Dict[dev.Substation, "pg.Substation"],
711
+ voltage_level_dict: Dict[dev.VoltageLevel, "pg.VoltageLevel"],
712
+ country_dict: Dict[dev.Country, "pg.Country"],
713
+ time_indices: IntVec,
714
+ use_time_series: bool) -> "pg.Bus":
715
+ """
716
+
717
+ :param elm:
718
+ :param n_time:
719
+ :param area_dict:
720
+ :param zone_dict:
721
+ :param substation_dict:
722
+ :param voltage_level_dict:
723
+ :param country_dict:
724
+ :param time_indices:
725
+ :param use_time_series:
726
+ :return:
727
+ """
728
+ bus = pg.Bus(nt=n_time,
729
+ name=elm.name,
730
+ idtag=elm.idtag,
731
+ code=str(elm.code),
732
+ Vnom=elm.Vnom,
733
+ vmin=elm.Vmin,
734
+ vmax=elm.Vmax,
735
+ angle_min=elm.angle_min,
736
+ angle_max=elm.angle_max,
737
+ r_fault=elm.r_fault,
738
+ x_fault=elm.x_fault,
739
+ active_default=elm.active,
740
+
741
+ is_slack=elm.is_slack,
742
+ is_dc=elm.is_dc,
743
+ is_internal=elm.internal,
744
+
745
+ area=area_dict.get(elm.area, None),
746
+ zone=zone_dict.get(elm.zone, None),
747
+ substation=substation_dict.get(elm.substation, None),
748
+ voltage_level=voltage_level_dict.get(elm.substation, None),
749
+ country=country_dict.get(elm.country, None),
750
+ latitude=elm.latitude,
751
+ longitude=elm.longitude,
752
+ Vm0=elm.Vm0,
753
+ Va0=elm.Va0,
754
+ )
755
+
756
+ fill_profile(gslv_profile=bus.active,
757
+ gc_profile=elm.active_prof,
758
+ use_time_series=use_time_series,
759
+ time_indices=time_indices,
760
+ n_time=n_time,
761
+ default_val=elm.active)
762
+
763
+ return bus
764
+
765
+
766
+ def add_buses(
767
+ circuit: MultiCircuit,
768
+ gslv_grid: "pg.MultiCircuit",
769
+ area_dict: Dict[dev.Area, "pg.Area"],
770
+ zone_dict: Dict[dev.Zone, "pg.Zone"],
771
+ substation_dict: Dict[dev.Substation, "pg.Substation"],
772
+ voltage_level_dict: Dict[dev.VoltageLevel, "pg.VoltageLevel"],
773
+ country_dict: Dict[dev.Country, "pg.Country"],
774
+ use_time_series: bool,
775
+ n_time: int = 1,
776
+ time_indices: Union[IntVec, None] = None,
777
+ ) -> Dict[str, "pg.Bus"]:
778
+ """
779
+ Convert the buses to GSLV buses
780
+ :param circuit: GridCal circuit
781
+ :param gslv_grid: GSLV circuit
782
+ :param use_time_series: compile the time series from GridCal? otherwise, just the snapshot
783
+ :param n_time: number of time steps
784
+ :param time_indices: Array of time indices
785
+ :param area_dict: Area object translation dictionary
786
+ :param zone_dict: Zone object translation dictionary
787
+ :param substation_dict: Substation object translation dictionary
788
+ :param voltage_level_dict: Voltage level object translation dictionary
789
+ :param country_dict: Country object translation dictionary
790
+ :return: bus dictionary buses[uuid] -> Bus
791
+ """
792
+
793
+ if time_indices is not None:
794
+ assert (len(time_indices) == n_time)
795
+
796
+ if area_dict is None:
797
+ area_dict = {elm: k for k, elm in enumerate(circuit.areas)}
798
+
799
+ bus_dict: Dict[str, "pg.Bus"] = dict()
800
+
801
+ for i, bus in enumerate(circuit.buses):
802
+ elm = convert_bus(elm=bus, n_time=n_time,
803
+ area_dict=area_dict,
804
+ zone_dict=zone_dict,
805
+ substation_dict=substation_dict,
806
+ voltage_level_dict=voltage_level_dict,
807
+ country_dict=country_dict,
808
+ use_time_series=use_time_series,
809
+ time_indices=time_indices)
810
+
811
+ gslv_grid.add_bus(elm)
812
+ bus_dict[bus.idtag] = elm
813
+
814
+ return bus_dict
815
+
816
+
817
+ def convert_load(k: int, elm: dev.Load, bus_dict: Dict[str, "pg.Bus"], n_time: int,
818
+ use_time_series: bool, time_indices: IntVec | None = None,
819
+ opf_results: OptimalPowerFlowResults | None = None) -> "pg.Load":
820
+ """
821
+
822
+ :param k:
823
+ :param elm:
824
+ :param bus_dict:
825
+ :param n_time:
826
+ :param use_time_series:
827
+ :param time_indices:
828
+ :param opf_results:
829
+ :return:
830
+ """
831
+
832
+ load = pg.Load(
833
+ nt=n_time,
834
+ name=elm.name,
835
+ idtag=elm.idtag,
836
+ code=str(elm.code),
837
+ G=elm.G,
838
+ B=elm.B,
839
+ Ir=elm.Ir,
840
+ Ii=elm.Ii,
841
+ P=elm.P if opf_results is None else elm.P - opf_results.load_shedding[k],
842
+ Q=elm.Q,
843
+ Cost=elm.Cost,
844
+ active=elm.active,
845
+ mttf=elm.mttf,
846
+ mttr=elm.mttr,
847
+ capex=elm.capex,
848
+ opex=elm.opex,
849
+ build_status=build_status_dict[elm.build_status],
850
+ )
851
+
852
+ load.bus = bus_dict[elm.bus.idtag]
853
+
854
+ fill_profile(gslv_profile=load.active,
855
+ gc_profile=elm.active_prof,
856
+ use_time_series=use_time_series,
857
+ time_indices=time_indices,
858
+ n_time=n_time,
859
+ default_val=elm.active)
860
+
861
+ if opf_results is None:
862
+ fill_profile(gslv_profile=load.P,
863
+ gc_profile=elm.P_prof,
864
+ use_time_series=use_time_series,
865
+ time_indices=time_indices,
866
+ n_time=n_time,
867
+ default_val=elm.P)
868
+ else:
869
+ fill_profile_with_array(gslv_profile=load.P,
870
+ arr=elm.P_prof.toarray() - opf_results.load_shedding[:, k],
871
+ use_time_series=use_time_series,
872
+ time_indices=time_indices,
873
+ n_time=n_time,
874
+ default_val=elm.P)
875
+
876
+ fill_profile(gslv_profile=load.Q,
877
+ gc_profile=elm.Q_prof,
878
+ use_time_series=use_time_series,
879
+ time_indices=time_indices,
880
+ n_time=n_time,
881
+ default_val=elm.Q)
882
+
883
+ fill_profile(gslv_profile=load.G,
884
+ gc_profile=elm.G_prof,
885
+ use_time_series=use_time_series,
886
+ time_indices=time_indices,
887
+ n_time=n_time,
888
+ default_val=elm.G)
889
+
890
+ fill_profile(gslv_profile=load.B,
891
+ gc_profile=elm.B_prof,
892
+ use_time_series=use_time_series,
893
+ time_indices=time_indices,
894
+ n_time=n_time,
895
+ default_val=elm.B)
896
+
897
+ fill_profile(gslv_profile=load.Ir,
898
+ gc_profile=elm.Ir_prof,
899
+ use_time_series=use_time_series,
900
+ time_indices=time_indices,
901
+ n_time=n_time,
902
+ default_val=elm.Ir)
903
+
904
+ fill_profile(gslv_profile=load.Ii,
905
+ gc_profile=elm.Ii_prof,
906
+ use_time_series=use_time_series,
907
+ time_indices=time_indices,
908
+ n_time=n_time,
909
+ default_val=elm.Ii)
910
+
911
+ fill_profile(gslv_profile=load.cost,
912
+ gc_profile=elm.Cost_prof,
913
+ use_time_series=use_time_series,
914
+ time_indices=time_indices,
915
+ n_time=n_time,
916
+ default_val=elm.Cost)
917
+
918
+ return load
919
+
920
+
921
+ def add_loads(circuit: MultiCircuit,
922
+ gslv_grid: "pg.MultiCircuit",
923
+ bus_dict: Dict[str, "pg.Bus"],
924
+ use_time_series: bool,
925
+ n_time=1,
926
+ time_indices: IntVec | None = None,
927
+ opf_results: OptimalPowerFlowResults | None = None):
928
+ """
929
+
930
+ :param circuit: GridCal circuit
931
+ :param gslv_grid: GSLV circuit
932
+ :param bus_dict: dictionary of bus id to GSLV bus object
933
+ :param use_time_series: compile the time series from GridCal? otherwise just the snapshot
934
+ :param n_time: number of time steps
935
+ :param time_indices:
936
+ :param opf_results:
937
+ :return:
938
+ """
939
+ devices = circuit.get_loads()
940
+ for k, elm in enumerate(devices):
941
+ load = convert_load(k=k, elm=elm, bus_dict=bus_dict,
942
+ n_time=n_time, use_time_series=use_time_series,
943
+ time_indices=time_indices, opf_results=opf_results)
944
+ gslv_grid.add_load(load)
945
+
946
+
947
+ def convert_static_generator(elm: dev.StaticGenerator,
948
+ bus_dict: Dict[str, "pg.Bus"],
949
+ n_time: int,
950
+ use_time_series: bool,
951
+ time_indices: IntVec | None = None, ) -> "pg.StaticGenerator":
952
+ """
953
+
954
+ :param elm:
955
+ :param bus_dict:
956
+ :param n_time:
957
+ :param use_time_series:
958
+ :param time_indices:
959
+ :return:
960
+ """
961
+
962
+ pe_inj = pg.StaticGenerator(
963
+ idtag=elm.idtag,
964
+ code=str(elm.code),
965
+ name=elm.name,
966
+ calc_node=bus_dict[elm.bus.idtag],
967
+ nt=n_time,
968
+ P=elm.P,
969
+ Q=elm.Q,
970
+ build_status=elm.build_status,
971
+ )
972
+
973
+ fill_profile(gslv_profile=pe_inj.active,
974
+ gc_profile=elm.active_prof,
975
+ use_time_series=use_time_series,
976
+ time_indices=time_indices,
977
+ n_time=n_time,
978
+ default_val=elm.active)
979
+
980
+ fill_profile(gslv_profile=pe_inj.P,
981
+ gc_profile=elm.P_prof,
982
+ use_time_series=use_time_series,
983
+ time_indices=time_indices,
984
+ n_time=n_time,
985
+ default_val=elm.P)
986
+
987
+ fill_profile(gslv_profile=pe_inj.Q,
988
+ gc_profile=elm.Q_prof,
989
+ use_time_series=use_time_series,
990
+ time_indices=time_indices,
991
+ n_time=n_time,
992
+ default_val=elm.Q)
993
+
994
+ fill_profile(gslv_profile=pe_inj.cost,
995
+ gc_profile=elm.Cost_prof,
996
+ use_time_series=use_time_series,
997
+ time_indices=time_indices,
998
+ n_time=n_time,
999
+ default_val=elm.Cost)
1000
+
1001
+ return pe_inj
1002
+
1003
+
1004
+ def add_static_generators(circuit: MultiCircuit, gslv_grid: "pg.MultiCircuit",
1005
+ bus_dict: Dict[str, "pg.Bus"],
1006
+ time_series: bool,
1007
+ n_time=1,
1008
+ time_indices: Union[IntVec, None] = None):
1009
+ """
1010
+
1011
+ :param circuit: GridCal circuit
1012
+ :param gslv_grid: GSLV circuit
1013
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1014
+ :param bus_dict: dictionary of bus id to GSLV bus object
1015
+ :param n_time: number of time steps
1016
+ :param time_indices: Array of time indices
1017
+ """
1018
+ devices = circuit.get_static_generators()
1019
+ for k, elm in enumerate(devices):
1020
+ pe_inj = convert_static_generator(elm=elm, bus_dict=bus_dict, n_time=n_time,
1021
+ use_time_series=time_series, time_indices=time_indices)
1022
+ gslv_grid.add_static_generator(pe_inj)
1023
+
1024
+
1025
+ def convert_shunt(elm: dev.Shunt, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1026
+ use_time_series: bool, time_indices: IntVec | None = None, ) -> "pg.Shunt":
1027
+ """
1028
+
1029
+ :param elm:
1030
+ :param bus_dict:
1031
+ :param n_time:
1032
+ :param use_time_series:
1033
+ :param time_indices:
1034
+ :return:
1035
+ """
1036
+ sh = pg.Shunt(
1037
+ nt=n_time,
1038
+ name=elm.name,
1039
+ idtag=elm.idtag,
1040
+ code=str(elm.code),
1041
+ G=elm.G,
1042
+ B=elm.B,
1043
+ build_status=build_status_dict[elm.build_status],
1044
+ )
1045
+
1046
+ sh.bus = bus_dict[elm.bus.idtag]
1047
+
1048
+ fill_profile(gslv_profile=sh.active,
1049
+ gc_profile=elm.active_prof,
1050
+ use_time_series=use_time_series,
1051
+ time_indices=time_indices,
1052
+ n_time=n_time,
1053
+ default_val=elm.active)
1054
+
1055
+ fill_profile(gslv_profile=sh.G,
1056
+ gc_profile=elm.G_prof,
1057
+ use_time_series=use_time_series,
1058
+ time_indices=time_indices,
1059
+ n_time=n_time,
1060
+ default_val=elm.G)
1061
+
1062
+ fill_profile(gslv_profile=sh.B,
1063
+ gc_profile=elm.B_prof,
1064
+ use_time_series=use_time_series,
1065
+ time_indices=time_indices,
1066
+ n_time=n_time,
1067
+ default_val=elm.B)
1068
+
1069
+ fill_profile(gslv_profile=sh.cost,
1070
+ gc_profile=elm.Cost_prof,
1071
+ use_time_series=use_time_series,
1072
+ time_indices=time_indices,
1073
+ n_time=n_time,
1074
+ default_val=elm.Cost)
1075
+
1076
+ return sh
1077
+
1078
+
1079
+ def add_shunts(circuit: MultiCircuit,
1080
+ gslv_grid: "pg.MultiCircuit",
1081
+ bus_dict: Dict[str, "pg.Bus"],
1082
+ time_series: bool,
1083
+ n_time=1,
1084
+ time_indices: Union[IntVec, None] = None):
1085
+ """
1086
+
1087
+ :param circuit: GridCal circuit
1088
+ :param gslv_grid: GSLV circuit
1089
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1090
+ :param bus_dict: dictionary of bus id to GSLV bus object
1091
+ :param n_time: number of time steps
1092
+ :param time_indices: Array of time indices
1093
+ """
1094
+ devices = circuit.get_shunts()
1095
+ for k, elm in enumerate(devices):
1096
+ sh = convert_shunt(elm=elm, bus_dict=bus_dict, n_time=n_time,
1097
+ use_time_series=time_series, time_indices=time_indices)
1098
+ gslv_grid.add_shunt(sh)
1099
+
1100
+
1101
+ def convert_generator(k: int, elm: dev.Generator, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1102
+ use_time_series: bool, time_indices: IntVec | None = None,
1103
+ opf_results: OptimalPowerFlowResults | None = None) -> "pg.Generator":
1104
+ """
1105
+
1106
+ :param k:
1107
+ :param elm:
1108
+ :param bus_dict:
1109
+ :param n_time:
1110
+ :param use_time_series:
1111
+ :param time_indices:
1112
+ :param opf_results:
1113
+ :return:
1114
+ """
1115
+ gen = pg.Generator(
1116
+ nt=n_time,
1117
+ name=elm.name,
1118
+ idtag=elm.idtag,
1119
+ active=elm.active,
1120
+ P=elm.P,
1121
+ power_factor=elm.Pf,
1122
+ vset=elm.Vset,
1123
+ Pmin=elm.Pmin,
1124
+ Pmax=elm.Pmax,
1125
+ Qmin=elm.Qmin,
1126
+ Qmax=elm.Qmax,
1127
+ Snom=elm.Snom,
1128
+ is_controlled=elm.is_controlled,
1129
+ enabled_dispatch=elm.enabled_dispatch,
1130
+ q_points=elm.q_curve.get_data().tolist(),
1131
+ use_reactive_power_curve=elm.use_reactive_power_curve
1132
+ )
1133
+
1134
+ gen.bus = bus_dict[elm.bus.idtag]
1135
+
1136
+ fill_profile(gslv_profile=gen.active,
1137
+ gc_profile=elm.active_prof,
1138
+ use_time_series=use_time_series,
1139
+ time_indices=time_indices,
1140
+ n_time=n_time,
1141
+ default_val=elm.active)
1142
+
1143
+ if opf_results is None:
1144
+ fill_profile(gslv_profile=gen.P,
1145
+ gc_profile=elm.P_prof,
1146
+ use_time_series=use_time_series,
1147
+ time_indices=time_indices,
1148
+ n_time=n_time,
1149
+ default_val=elm.P)
1150
+ else:
1151
+ fill_profile_with_array(gslv_profile=gen.P,
1152
+ arr=opf_results.generator_power[:, k] - opf_results.generator_shedding[:, k],
1153
+ use_time_series=use_time_series,
1154
+ time_indices=time_indices,
1155
+ n_time=n_time,
1156
+ default_val=elm.P)
1157
+
1158
+ fill_profile(gslv_profile=gen.Pf,
1159
+ gc_profile=elm.Pf_prof,
1160
+ use_time_series=use_time_series,
1161
+ time_indices=time_indices,
1162
+ n_time=n_time,
1163
+ default_val=elm.Pf)
1164
+
1165
+ fill_profile(gslv_profile=gen.Vset,
1166
+ gc_profile=elm.Vset_prof,
1167
+ use_time_series=use_time_series,
1168
+ time_indices=time_indices,
1169
+ n_time=n_time,
1170
+ default_val=elm.Vset)
1171
+
1172
+ fill_profile(gslv_profile=gen.cost,
1173
+ gc_profile=elm.Cost_prof,
1174
+ use_time_series=use_time_series,
1175
+ time_indices=time_indices,
1176
+ n_time=n_time,
1177
+ default_val=elm.Cost)
1178
+
1179
+ fill_profile(gslv_profile=gen.Cost0,
1180
+ gc_profile=elm.Cost0_prof,
1181
+ use_time_series=use_time_series,
1182
+ time_indices=time_indices,
1183
+ n_time=n_time,
1184
+ default_val=elm.Cost0)
1185
+
1186
+ fill_profile(gslv_profile=gen.Cost2,
1187
+ gc_profile=elm.Cost2_prof,
1188
+ use_time_series=use_time_series,
1189
+ time_indices=time_indices,
1190
+ n_time=n_time,
1191
+ default_val=elm.Cost2)
1192
+
1193
+ return gen
1194
+
1195
+
1196
+ def add_generators(circuit: MultiCircuit,
1197
+ gslv_grid: "pg.MultiCircuit",
1198
+ bus_dict: Dict[str, "pg.Bus"],
1199
+ time_series: bool,
1200
+ n_time=1,
1201
+ time_indices: Union[IntVec, None] = None,
1202
+ opf_results: Union[None, OptimalPowerFlowResults] = None):
1203
+ """
1204
+
1205
+ :param circuit: GridCal circuit
1206
+ :param gslv_grid: GSLV circuit
1207
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1208
+ :param bus_dict: dictionary of bus id to GSLV bus object
1209
+ :param n_time: number of time steps
1210
+ :param time_indices: Array of time indices
1211
+ :param opf_results: OptimalPowerFlowResults (optional)
1212
+ """
1213
+ devices = circuit.get_generators()
1214
+
1215
+ for k, elm in enumerate(devices):
1216
+ gen = convert_generator(k=k, elm=elm, bus_dict=bus_dict,
1217
+ n_time=n_time, use_time_series=time_series,
1218
+ time_indices=time_indices, opf_results=opf_results)
1219
+
1220
+ gslv_grid.add_generator(gen)
1221
+
1222
+
1223
+ def convert_battery(k: int, elm: dev.Battery, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1224
+ use_time_series: bool, time_indices: IntVec | None = None,
1225
+ opf_results: OptimalPowerFlowResults | None = None) -> "pg.Battery":
1226
+ """
1227
+
1228
+ :param k:
1229
+ :param elm:
1230
+ :param bus_dict:
1231
+ :param n_time:
1232
+ :param use_time_series:
1233
+ :param time_indices:
1234
+ :param opf_results:
1235
+ :return:
1236
+ """
1237
+ gen = pg.Battery(nt=n_time,
1238
+ name=elm.name,
1239
+ idtag=elm.idtag,
1240
+ P=elm.P,
1241
+ power_factor=elm.Pf,
1242
+ vset=elm.Vset,
1243
+ max_soc=elm.max_soc,
1244
+ min_soc=elm.min_soc,
1245
+ Qmin=elm.Qmin,
1246
+ Qmax=elm.Qmax,
1247
+ Pmin=elm.Pmin,
1248
+ Pmax=elm.Pmax,
1249
+ Snom=elm.Snom,
1250
+ Enom=elm.Enom,
1251
+ charge_efficiency=elm.charge_efficiency,
1252
+ discharge_efficiency=elm.discharge_efficiency,
1253
+ is_controlled=elm.is_controlled, )
1254
+
1255
+ gen.bus = bus_dict[elm.bus.idtag]
1256
+
1257
+ fill_profile(gslv_profile=gen.active,
1258
+ gc_profile=elm.active_prof,
1259
+ use_time_series=use_time_series,
1260
+ time_indices=time_indices,
1261
+ n_time=n_time,
1262
+ default_val=elm.active)
1263
+
1264
+ if opf_results is None:
1265
+ fill_profile(gslv_profile=gen.P,
1266
+ gc_profile=elm.P_prof,
1267
+ use_time_series=use_time_series,
1268
+ time_indices=time_indices,
1269
+ n_time=n_time,
1270
+ default_val=elm.P)
1271
+ else:
1272
+ fill_profile_with_array(gslv_profile=gen.P,
1273
+ arr=opf_results.battery_power[:, k],
1274
+ use_time_series=use_time_series,
1275
+ time_indices=time_indices,
1276
+ n_time=n_time,
1277
+ default_val=elm.P)
1278
+
1279
+ fill_profile(gslv_profile=gen.Pf,
1280
+ gc_profile=elm.Pf_prof,
1281
+ use_time_series=use_time_series,
1282
+ time_indices=time_indices,
1283
+ n_time=n_time,
1284
+ default_val=elm.Pf)
1285
+
1286
+ fill_profile(gslv_profile=gen.Vset,
1287
+ gc_profile=elm.Vset_prof,
1288
+ use_time_series=use_time_series,
1289
+ time_indices=time_indices,
1290
+ n_time=n_time,
1291
+ default_val=elm.Vset)
1292
+
1293
+ fill_profile(gslv_profile=gen.cost,
1294
+ gc_profile=elm.Cost_prof,
1295
+ use_time_series=use_time_series,
1296
+ time_indices=time_indices,
1297
+ n_time=n_time,
1298
+ default_val=elm.Cost)
1299
+
1300
+ fill_profile(gslv_profile=gen.Cost0,
1301
+ gc_profile=elm.Cost0_prof,
1302
+ use_time_series=use_time_series,
1303
+ time_indices=time_indices,
1304
+ n_time=n_time,
1305
+ default_val=elm.Cost0)
1306
+
1307
+ fill_profile(gslv_profile=gen.Cost2,
1308
+ gc_profile=elm.Cost2_prof,
1309
+ use_time_series=use_time_series,
1310
+ time_indices=time_indices,
1311
+ n_time=n_time,
1312
+ default_val=elm.Cost2)
1313
+
1314
+ return gen
1315
+
1316
+
1317
+ def add_battery_data(circuit: MultiCircuit,
1318
+ gslv_grid: "pg.MultiCircuit",
1319
+ bus_dict: Dict[str, "pg.Bus"],
1320
+ time_series: bool,
1321
+ n_time: int = 1,
1322
+ time_indices: Union[IntVec, None] = None,
1323
+ opf_results: Union[None, OptimalPowerFlowResults] = None):
1324
+ """
1325
+
1326
+ :param circuit: GridCal circuit
1327
+ :param gslv_grid: GSLV circuit
1328
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1329
+ :param bus_dict: dictionary of bus id to GSLV bus object
1330
+ :param n_time: number of time steps
1331
+ :param time_indices: Array of time indices
1332
+ :param opf_results: OptimelPowerFlowResults (optional)
1333
+ """
1334
+ devices = circuit.get_batteries()
1335
+
1336
+ for k, elm in enumerate(devices):
1337
+ batt = convert_battery(k=k, elm=elm, bus_dict=bus_dict,
1338
+ n_time=n_time, use_time_series=time_series,
1339
+ time_indices=time_indices, opf_results=opf_results)
1340
+
1341
+ gslv_grid.add_battery(batt)
1342
+
1343
+
1344
+ def convert_line(elm: dev.Line,
1345
+ n_time: int,
1346
+ bus_dict: Dict[str, "pg.Bus"],
1347
+ branch_groups_dict: Dict[dev.BranchGroup, "pg.BranchGroup"],
1348
+ use_time_series: bool, time_indices: IntVec | None = None, ) -> "pg.Line":
1349
+ """
1350
+
1351
+ :param elm:
1352
+ :param n_time:
1353
+ :param bus_dict:
1354
+ :param branch_groups_dict:
1355
+ :param use_time_series:
1356
+ :param time_indices:
1357
+ :return:
1358
+ """
1359
+ lne = pg.Line(
1360
+ idtag=elm.idtag,
1361
+ code=str(elm.code),
1362
+ name=elm.name,
1363
+ bus_from=bus_dict[elm.bus_from.idtag],
1364
+ bus_to=bus_dict[elm.bus_to.idtag],
1365
+ nt=n_time,
1366
+ length=elm.length,
1367
+ rate=elm.rate if elm.rate > 0 else 9999,
1368
+ active=elm.active,
1369
+ r=elm.R,
1370
+ x=elm.X,
1371
+ b=elm.B,
1372
+ monitor_loading=elm.monitor_loading,
1373
+ contingency_enabled=elm.contingency_enabled,
1374
+ )
1375
+
1376
+ lne.group = branch_groups_dict.get(elm.group, None)
1377
+
1378
+ fill_profile(gslv_profile=lne.active,
1379
+ gc_profile=elm.active_prof,
1380
+ use_time_series=use_time_series,
1381
+ time_indices=time_indices,
1382
+ n_time=n_time,
1383
+ default_val=elm.active)
1384
+
1385
+ fill_profile(gslv_profile=lne.rate,
1386
+ gc_profile=elm.rate_prof,
1387
+ use_time_series=use_time_series,
1388
+ time_indices=time_indices,
1389
+ n_time=n_time,
1390
+ default_val=elm.rate)
1391
+
1392
+ fill_profile(gslv_profile=lne.contingency_factor,
1393
+ gc_profile=elm.contingency_factor_prof,
1394
+ use_time_series=use_time_series,
1395
+ time_indices=time_indices,
1396
+ n_time=n_time,
1397
+ default_val=elm.contingency_factor)
1398
+
1399
+ fill_profile(gslv_profile=lne.cost,
1400
+ gc_profile=elm.Cost_prof,
1401
+ use_time_series=use_time_series,
1402
+ time_indices=time_indices,
1403
+ n_time=n_time,
1404
+ default_val=elm.Cost)
1405
+
1406
+ return lne
1407
+
1408
+
1409
+ def add_lines(circuit: MultiCircuit,
1410
+ gslv_grid: "pg.MultiCircuit",
1411
+ bus_dict: Dict[str, "pg.Bus"],
1412
+ branch_groups_dict: Dict[dev.BranchGroup, "pg.BranchGroup"],
1413
+ time_series: bool,
1414
+ n_time: int = 1,
1415
+ time_indices: Union[IntVec, None] = None):
1416
+ """
1417
+
1418
+ :param circuit: GridCal circuit
1419
+ :param gslv_grid: GSLV circuit
1420
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1421
+ :param bus_dict: dictionary of bus id to GSLV bus object
1422
+ :param branch_groups_dict: dictionary of converted branch groups
1423
+ :param n_time: number of time steps
1424
+ :param time_indices: Array of time indices
1425
+ """
1426
+
1427
+ # Compile the lines
1428
+ for i, elm in enumerate(circuit.lines):
1429
+ lne = convert_line(elm=elm,
1430
+ bus_dict=bus_dict,
1431
+ branch_groups_dict=branch_groups_dict,
1432
+ n_time=n_time,
1433
+ use_time_series=time_series,
1434
+ time_indices=time_indices)
1435
+ gslv_grid.add_line(lne)
1436
+
1437
+
1438
+ def convert_transformer(elm: dev.Transformer2W,
1439
+ bus_dict: Dict[str, "pg.Bus"],
1440
+ branch_groups_dict: Dict[dev.BranchGroup, "pg.BranchGroup"],
1441
+ n_time: int,
1442
+ use_time_series: bool, time_indices: IntVec | None,
1443
+ override_controls: bool) -> "pg.Transformer2W":
1444
+ """
1445
+
1446
+ :param elm:
1447
+ :param bus_dict:
1448
+ :param branch_groups_dict:
1449
+ :param n_time:
1450
+ :param use_time_series:
1451
+ :param time_indices:
1452
+ :param override_controls:
1453
+ :return:
1454
+ """
1455
+ tr2 = pg.Transformer2W(idtag=elm.idtag,
1456
+ code=str(elm.code),
1457
+ name=elm.name,
1458
+ bus_from=bus_dict[elm.bus_from.idtag],
1459
+ bus_to=bus_dict[elm.bus_to.idtag],
1460
+ nt=n_time,
1461
+ HV=elm.HV,
1462
+ LV=elm.LV,
1463
+ rate=elm.rate if elm.rate > 0 else 9999,
1464
+ active=elm.active,
1465
+ r=elm.R,
1466
+ x=elm.X,
1467
+ g=elm.G,
1468
+ b=elm.B,
1469
+ monitor_loading=elm.monitor_loading,
1470
+ contingency_enabled=elm.contingency_enabled,
1471
+ tap_module=elm.tap_module,
1472
+ tap_phase=elm.tap_phase)
1473
+
1474
+ tr2.tap_phase_min = elm.tap_phase_min
1475
+ tr2.tap_phase_max = elm.tap_phase_max
1476
+ tr2.tap_module_min = elm.tap_module_min
1477
+ tr2.tap_module_max = elm.tap_module_max
1478
+
1479
+ fill_profile(gslv_profile=tr2.active,
1480
+ gc_profile=elm.active_prof,
1481
+ use_time_series=use_time_series,
1482
+ time_indices=time_indices,
1483
+ n_time=n_time,
1484
+ default_val=elm.active)
1485
+
1486
+ fill_profile(gslv_profile=tr2.rate,
1487
+ gc_profile=elm.rate_prof,
1488
+ use_time_series=use_time_series,
1489
+ time_indices=time_indices,
1490
+ n_time=n_time,
1491
+ default_val=elm.rate)
1492
+
1493
+ fill_profile(gslv_profile=tr2.contingency_factor,
1494
+ gc_profile=elm.contingency_factor_prof,
1495
+ use_time_series=use_time_series,
1496
+ time_indices=time_indices,
1497
+ n_time=n_time,
1498
+ default_val=elm.contingency_factor)
1499
+
1500
+ fill_profile(gslv_profile=tr2.cost,
1501
+ gc_profile=elm.Cost_prof,
1502
+ use_time_series=use_time_series,
1503
+ time_indices=time_indices,
1504
+ n_time=n_time,
1505
+ default_val=elm.Cost)
1506
+
1507
+ fill_profile(gslv_profile=tr2.Pset,
1508
+ gc_profile=elm.Pset_prof,
1509
+ use_time_series=use_time_series,
1510
+ time_indices=time_indices,
1511
+ n_time=n_time,
1512
+ default_val=elm.Pset)
1513
+
1514
+ fill_profile(gslv_profile=tr2.Qset,
1515
+ gc_profile=elm.Qset_prof,
1516
+ use_time_series=use_time_series,
1517
+ time_indices=time_indices,
1518
+ n_time=n_time,
1519
+ default_val=elm.Qset)
1520
+
1521
+ fill_profile(gslv_profile=tr2.vset,
1522
+ gc_profile=elm.vset_prof,
1523
+ use_time_series=use_time_series,
1524
+ time_indices=time_indices,
1525
+ n_time=n_time,
1526
+ default_val=elm.vset)
1527
+
1528
+ fill_profile(gslv_profile=tr2.tap_phase,
1529
+ gc_profile=elm.tap_phase_prof,
1530
+ use_time_series=use_time_series,
1531
+ time_indices=time_indices,
1532
+ n_time=n_time,
1533
+ default_val=elm.tap_phase)
1534
+
1535
+ fill_profile(gslv_profile=tr2.tap_phase_control_mode,
1536
+ gc_profile=elm.tap_phase_control_mode_prof,
1537
+ use_time_series=use_time_series,
1538
+ time_indices=time_indices,
1539
+ n_time=n_time,
1540
+ default_val=elm.tap_phase_control_mode)
1541
+
1542
+ fill_profile(gslv_profile=tr2.tap_module,
1543
+ gc_profile=elm.tap_module_prof,
1544
+ use_time_series=use_time_series,
1545
+ time_indices=time_indices,
1546
+ n_time=n_time,
1547
+ default_val=elm.tap_module)
1548
+
1549
+ fill_profile(gslv_profile=tr2.tap_module_control_mode,
1550
+ gc_profile=elm.tap_module_control_mode_prof,
1551
+ use_time_series=use_time_series,
1552
+ time_indices=time_indices,
1553
+ n_time=n_time,
1554
+ default_val=elm.tap_module_control_mode)
1555
+
1556
+ # control vars
1557
+ if override_controls:
1558
+ tr2.tap_module_control_mode = pg.TapModuleControl.fixed
1559
+ tr2.tap_phase_control_mode = pg.TapPhaseControl.fixed
1560
+ else:
1561
+ # tr2.setAllControlMode(ctrl_dict[elm.control_mode])
1562
+ pass
1563
+
1564
+ return tr2
1565
+
1566
+
1567
+ def add_transformers(circuit: MultiCircuit,
1568
+ gslv_grid: "pg.MultiCircuit",
1569
+ bus_dict: Dict[str, "pg.Bus"],
1570
+ branch_groups_dict: Dict[dev.BranchGroup, "pg.BranchGroup"],
1571
+ time_series: bool,
1572
+ n_time: int = 1,
1573
+ time_indices: Union[IntVec, None] = None,
1574
+ override_controls=False):
1575
+ """
1576
+
1577
+ :param circuit: GridCal circuit
1578
+ :param gslv_grid: GSLV circuit
1579
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1580
+ :param bus_dict: dictionary of bus id to GSLV bus object
1581
+ :param branch_groups_dict: dictionary of branch grous converetd
1582
+ :param n_time: number of time steps
1583
+ :param time_indices: Array of time indices
1584
+ :param override_controls: If true the controls are set to Fix
1585
+ """
1586
+
1587
+ for i, elm in enumerate(circuit.transformers2w):
1588
+ tr2 = convert_transformer(elm=elm,
1589
+ bus_dict=bus_dict,
1590
+ branch_groups_dict=branch_groups_dict,
1591
+ n_time=n_time,
1592
+ use_time_series=time_series,
1593
+ time_indices=time_indices,
1594
+ override_controls=override_controls)
1595
+ gslv_grid.add_transformer(tr2)
1596
+
1597
+
1598
+ def convert_transformer3w(elm: dev.Transformer3W,
1599
+ bus_dict: Dict[str, "pg.Bus"],
1600
+ n_time: int,
1601
+ use_time_series: bool,
1602
+ time_indices: IntVec | None,
1603
+ override_controls: bool) -> "pg.Transformer3W":
1604
+ """
1605
+
1606
+ :param elm:
1607
+ :param bus_dict:
1608
+ :param n_time:
1609
+ :param use_time_series:
1610
+ :param time_indices:
1611
+ :param override_controls:
1612
+ :return:
1613
+ """
1614
+
1615
+ tr3 = pg.Transformer3W(idtag=elm.idtag,
1616
+ code=str(elm.code),
1617
+ name=elm.name,
1618
+ nt=n_time,
1619
+ active=elm.active,
1620
+ bus1=bus_dict[elm.bus1.idtag] if elm.bus1 else None,
1621
+ bus2=bus_dict[elm.bus2.idtag] if elm.bus2 else None,
1622
+ bus3=bus_dict[elm.bus3.idtag] if elm.bus3 else None,
1623
+ V1=elm.V1,
1624
+ V2=elm.V2,
1625
+ V3=elm.V3,
1626
+ r12=elm.r12, r23=elm.r23, r31=elm.r31,
1627
+ x12=elm.x12, x23=elm.x23, x31=elm.x31,
1628
+ rate12=elm.rate1, rate23=elm.rate2, rate31=elm.rate3)
1629
+
1630
+ # this is because the central node is in the buses list already from GridCal
1631
+ tr3.central_node = bus_dict[elm.bus0.idtag]
1632
+
1633
+ if use_time_series:
1634
+ pass
1635
+ else:
1636
+ pass
1637
+
1638
+ return tr3
1639
+
1640
+
1641
+ def add_transformers3w(circuit: MultiCircuit,
1642
+ gslv_grid: "pg.MultiCircuit",
1643
+ bus_dict: Dict[str, "pg.Bus"],
1644
+ time_series: bool,
1645
+ n_time=1,
1646
+ time_indices: Union[IntVec, None] = None,
1647
+ override_controls=False):
1648
+ """
1649
+
1650
+ :param circuit: GridCal circuit
1651
+ :param gslv_grid: GSLV circuit
1652
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1653
+ :param bus_dict: dictionary of bus id to GSLV bus object
1654
+ :param n_time: number of time steps
1655
+ :param time_indices: Array of time indices
1656
+ :param override_controls: If true the controls are set to Fix
1657
+ """
1658
+ for i, elm in enumerate(circuit.transformers3w):
1659
+ tr3 = convert_transformer3w(elm=elm, bus_dict=bus_dict, n_time=n_time,
1660
+ use_time_series=time_series, time_indices=time_indices,
1661
+ override_controls=override_controls)
1662
+
1663
+ # because the central bus was added already, do not add it here
1664
+ gslv_grid.add_transformer_3w(tr3)
1665
+
1666
+
1667
+ def convert_vsc(elm: dev.VSC, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1668
+ use_time_series: bool, time_indices: IntVec | None) -> "pg.Vsc":
1669
+ """
1670
+
1671
+ :param elm:
1672
+ :param bus_dict:
1673
+ :param n_time:
1674
+ :param use_time_series:
1675
+ :param time_indices:
1676
+ :return:
1677
+ """
1678
+ vsc = pg.Vsc(idtag=elm.idtag,
1679
+ code=str(elm.code),
1680
+ name=elm.name,
1681
+ calc_node_from=bus_dict[elm.bus_from.idtag],
1682
+ calc_node_to=bus_dict[elm.bus_to.idtag],
1683
+ nt=n_time,
1684
+ active=elm.active, )
1685
+
1686
+ vsc.alpha1 = elm.alpha1
1687
+ vsc.alpha2 = elm.alpha2
1688
+ vsc.alpha3 = elm.alpha3
1689
+
1690
+ vsc.setAllMonitorloading(elm.monitor_loading)
1691
+ vsc.setAllContingencyenabled(elm.contingency_enabled)
1692
+
1693
+ fill_profile(gslv_profile=vsc.active,
1694
+ gc_profile=elm.active_prof,
1695
+ use_time_series=use_time_series,
1696
+ time_indices=time_indices,
1697
+ n_time=n_time,
1698
+ default_val=elm.active)
1699
+
1700
+ fill_profile(gslv_profile=vsc.rate,
1701
+ gc_profile=elm.rate_prof,
1702
+ use_time_series=use_time_series,
1703
+ time_indices=time_indices,
1704
+ n_time=n_time,
1705
+ default_val=elm.rate)
1706
+
1707
+ fill_profile(gslv_profile=vsc.contingency_factor,
1708
+ gc_profile=elm.contingency_factor_prof,
1709
+ use_time_series=use_time_series,
1710
+ time_indices=time_indices,
1711
+ n_time=n_time,
1712
+ default_val=elm.contingency_factor)
1713
+
1714
+ fill_profile(gslv_profile=vsc.cost,
1715
+ gc_profile=elm.Cost_prof,
1716
+ use_time_series=use_time_series,
1717
+ time_indices=time_indices,
1718
+ n_time=n_time,
1719
+ default_val=elm.Cost)
1720
+
1721
+ return vsc
1722
+
1723
+
1724
+ def add_vscs(circuit: MultiCircuit,
1725
+ gslv_grid: "pg.MultiCircuit",
1726
+ bus_dict: Dict[str, "pg.Bus"],
1727
+ time_series: bool,
1728
+ n_time: int = 1,
1729
+ time_indices: Union[IntVec, None] = None):
1730
+ """
1731
+
1732
+ :param circuit: GridCal circuit
1733
+ :param gslv_grid: GSLV circuit
1734
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1735
+ :param bus_dict: dictionary of bus id to GSLV bus object
1736
+ :param n_time: number of time steps
1737
+ :param time_indices: Array of time indices
1738
+ """
1739
+ for i, elm in enumerate(circuit.vsc_devices):
1740
+ vsc = convert_vsc(elm=elm, bus_dict=bus_dict, n_time=n_time,
1741
+ use_time_series=time_series, time_indices=time_indices)
1742
+ gslv_grid.add_vsc(vsc)
1743
+
1744
+
1745
+ def convert_dc_line(elm: dev.DcLine, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1746
+ use_time_series: bool, time_indices: IntVec | None) -> "pg.DcLine":
1747
+ """
1748
+
1749
+ :param elm:
1750
+ :param bus_dict:
1751
+ :param n_time:
1752
+ :param use_time_series:
1753
+ :param time_indices:
1754
+ :return:
1755
+ """
1756
+ lne = pg.DcLine(idtag=elm.idtag,
1757
+ name=elm.name,
1758
+ calc_node_from=bus_dict[elm.bus_from.idtag],
1759
+ calc_node_to=bus_dict[elm.bus_to.idtag],
1760
+ nt=n_time,
1761
+ length=elm.length,
1762
+ rate=elm.rate,
1763
+ active_default=elm.active,
1764
+ r=elm.R,
1765
+ monitor_loading_default=elm.monitor_loading,
1766
+ monitor_contingency_default=elm.contingency_enabled
1767
+ )
1768
+
1769
+ fill_profile(gslv_profile=lne.active,
1770
+ gc_profile=elm.active_prof,
1771
+ use_time_series=use_time_series,
1772
+ time_indices=time_indices,
1773
+ n_time=n_time,
1774
+ default_val=elm.active)
1775
+
1776
+ fill_profile(gslv_profile=lne.rate,
1777
+ gc_profile=elm.rate_prof,
1778
+ use_time_series=use_time_series,
1779
+ time_indices=time_indices,
1780
+ n_time=n_time,
1781
+ default_val=elm.rate)
1782
+
1783
+ fill_profile(gslv_profile=lne.contingency_factor,
1784
+ gc_profile=elm.contingency_factor_prof,
1785
+ use_time_series=use_time_series,
1786
+ time_indices=time_indices,
1787
+ n_time=n_time,
1788
+ default_val=elm.contingency_factor)
1789
+
1790
+ fill_profile(gslv_profile=lne.cost,
1791
+ gc_profile=elm.Cost_prof,
1792
+ use_time_series=use_time_series,
1793
+ time_indices=time_indices,
1794
+ n_time=n_time,
1795
+ default_val=elm.Cost)
1796
+
1797
+ return lne
1798
+
1799
+
1800
+ def add_dc_lines(circuit: MultiCircuit,
1801
+ gslv_grid: "pg.MultiCircuit",
1802
+ bus_dict: Dict[str, "pg.Bus"],
1803
+ time_series: bool,
1804
+ n_time: int = 1,
1805
+ time_indices: Union[IntVec, None] = None):
1806
+ """
1807
+
1808
+ :param circuit: GridCal circuit
1809
+ :param gslv_grid: GSLV circuit
1810
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1811
+ :param bus_dict: dictionary of bus id to GSLV bus object
1812
+ :param n_time: number of time steps
1813
+ :param time_indices: Array of time indices
1814
+ """
1815
+ # Compile the lines
1816
+ for i, elm in enumerate(circuit.dc_lines):
1817
+ lne = convert_dc_line(elm=elm, bus_dict=bus_dict, n_time=n_time,
1818
+ use_time_series=time_series, time_indices=time_indices)
1819
+ gslv_grid.add_dc_line(lne)
1820
+
1821
+
1822
+ def convert_hvdc_line(elm: dev.HvdcLine, bus_dict: Dict[str, "pg.Bus"], n_time: int,
1823
+ use_time_series: bool, time_indices: IntVec | None) -> "pg.HvdcLine":
1824
+ """
1825
+
1826
+ :param elm:
1827
+ :param bus_dict:
1828
+ :param n_time:
1829
+ :param use_time_series:
1830
+ :param time_indices:
1831
+ :return:
1832
+ """
1833
+
1834
+ hvdc = pg.HvdcLine(idtag=elm.idtag,
1835
+ code=str(elm.code),
1836
+ name=elm.name,
1837
+ calc_node_from=bus_dict[elm.bus_from.idtag],
1838
+ calc_node_to=bus_dict[elm.bus_to.idtag],
1839
+ cn_from=None,
1840
+ cn_to=None,
1841
+ nt=n_time,
1842
+ active_default=int(elm.active),
1843
+ rate=elm.rate,
1844
+ contingency_rate=elm.rate * elm.contingency_factor,
1845
+ monitor_loading_default=1,
1846
+ monitor_contingency_default=1,
1847
+ P=elm.Pset,
1848
+ Vf=elm.Vset_f,
1849
+ Vt=elm.Vset_t,
1850
+ r=elm.r,
1851
+ angle_droop=elm.angle_droop,
1852
+ length=elm.length,
1853
+ min_firing_angle_f=elm.min_firing_angle_f,
1854
+ max_firing_angle_f=elm.max_firing_angle_f,
1855
+ min_firing_angle_t=elm.min_firing_angle_t,
1856
+ max_firing_angle_t=elm.max_firing_angle_t,
1857
+ control_mode=hvdc_control_mode_dict[elm.control_mode])
1858
+
1859
+ fill_profile(gslv_profile=hvdc.active,
1860
+ gc_profile=elm.active_prof,
1861
+ use_time_series=use_time_series,
1862
+ time_indices=time_indices,
1863
+ n_time=n_time,
1864
+ default_val=elm.active)
1865
+
1866
+ fill_profile(gslv_profile=hvdc.Vset_f,
1867
+ gc_profile=elm.Vset_f_prof,
1868
+ use_time_series=use_time_series,
1869
+ time_indices=time_indices,
1870
+ n_time=n_time,
1871
+ default_val=elm.Vset_f)
1872
+
1873
+ fill_profile(gslv_profile=hvdc.Vset_f,
1874
+ gc_profile=elm.Vset_f_prof,
1875
+ use_time_series=use_time_series,
1876
+ time_indices=time_indices,
1877
+ n_time=n_time,
1878
+ default_val=elm.Vset_f)
1879
+
1880
+ fill_profile(gslv_profile=hvdc.Vset_t,
1881
+ gc_profile=elm.Vset_t_prof,
1882
+ use_time_series=use_time_series,
1883
+ time_indices=time_indices,
1884
+ n_time=n_time,
1885
+ default_val=elm.Vset_t)
1886
+
1887
+ fill_profile(gslv_profile=hvdc.angle_droop,
1888
+ gc_profile=elm.angle_droop_prof,
1889
+ use_time_series=use_time_series,
1890
+ time_indices=time_indices,
1891
+ n_time=n_time,
1892
+ default_val=elm.angle_droop)
1893
+
1894
+ fill_profile(gslv_profile=hvdc.rate,
1895
+ gc_profile=elm.rate_prof,
1896
+ use_time_series=use_time_series,
1897
+ time_indices=time_indices,
1898
+ n_time=n_time,
1899
+ default_val=elm.rate)
1900
+
1901
+ fill_profile(gslv_profile=hvdc.contingency_factor,
1902
+ gc_profile=elm.contingency_factor_prof,
1903
+ use_time_series=use_time_series,
1904
+ time_indices=time_indices,
1905
+ n_time=n_time,
1906
+ default_val=elm.contingency_factor)
1907
+
1908
+ fill_profile(gslv_profile=hvdc.cost,
1909
+ gc_profile=elm.Cost_prof,
1910
+ use_time_series=use_time_series,
1911
+ time_indices=time_indices,
1912
+ n_time=n_time,
1913
+ default_val=elm.Cost)
1914
+
1915
+ return hvdc
1916
+
1917
+
1918
+ def add_hvdcs(circuit: MultiCircuit,
1919
+ gslv_grid: "pg.MultiCircuit",
1920
+ bus_dict: Dict[str, "pg.Bus"],
1921
+ time_series: bool,
1922
+ n_time=1,
1923
+ time_indices: Union[IntVec, None] = None):
1924
+ """
1925
+
1926
+ :param circuit: GridCal circuit
1927
+ :param gslv_grid: GSLV circuit
1928
+ :param time_series: compile the time series from GridCal? otherwise just the snapshot
1929
+ :param bus_dict: dictionary of bus id to GSLV bus object
1930
+ :param n_time: number of time steps
1931
+ :param time_indices: Array of time indices
1932
+ """
1933
+
1934
+ for i, elm in enumerate(circuit.hvdc_lines):
1935
+ hvdc = convert_hvdc_line(elm=elm, bus_dict=bus_dict, n_time=n_time,
1936
+ use_time_series=time_series, time_indices=time_indices)
1937
+ gslv_grid.add_hvdc_line(hvdc)
1938
+
1939
+
1940
+ class GslvDicts:
1941
+
1942
+ def __init__(self):
1943
+ self.area_dict: Dict[dev.Area, "pg.Area"] = dict()
1944
+
1945
+ self.zone_dict: Dict[dev.Zone, "pg.Zone"] = dict()
1946
+
1947
+ self.substation_dict: Dict[dev.Substation, "pg.Substation"] = dict()
1948
+
1949
+ self.voltage_level_dict: Dict[dev.VoltageLevel, "pg.VoltageLevel"] = dict()
1950
+
1951
+ self.country_dict: Dict[dev.Country, "pg.Country"] = dict()
1952
+
1953
+ self.facility_dict: Dict[dev.Facility, "pg.Facility"] = dict()
1954
+
1955
+ self.regions_dict: Dict[dev.Country, "pg.Country"] = dict()
1956
+
1957
+ self.con_groups_dict: Dict[dev.ContingencyGroup, "pg.ContingencyGroup"] = dict()
1958
+
1959
+ self.inv_groups_dict: Dict[dev.InvestmentsGroup, "pg.InvestmentGroup"] = dict()
1960
+
1961
+
1962
+ def to_gslv(circuit: MultiCircuit,
1963
+ use_time_series: bool,
1964
+ time_indices: Union[IntVec, None] = None,
1965
+ override_branch_controls=False,
1966
+ opf_results: Union[None, OptimalPowerFlowResults] = None) -> Tuple["pg.MultiCircuit", GslvDicts]:
1967
+ """
1968
+ Convert GridCal circuit to GSLV
1969
+ :param circuit: MultiCircuit
1970
+ :param use_time_series: compile the time series from GridCal? otherwise just the snapshot
1971
+ :param time_indices: Array of time indices
1972
+ :param override_branch_controls: If true the branch controls are set to Fix
1973
+ :param opf_results:
1974
+ :return: pg.MultiCircuit instance
1975
+ """
1976
+
1977
+ dicts = GslvDicts()
1978
+
1979
+ if time_indices is None:
1980
+ n_time = circuit.get_time_number() if use_time_series else 1
1981
+ if n_time == 0:
1982
+ n_time = 1
1983
+ else:
1984
+ n_time = len(time_indices)
1985
+
1986
+ pg_grid = pg.MultiCircuit(name=circuit.name,
1987
+ nt=n_time,
1988
+ Sbase=circuit.Sbase,
1989
+ fBase=circuit.fBase,
1990
+ idtag=circuit.idtag)
1991
+
1992
+ dicts.area_dict = add_areas(circuit=circuit, gslv_grid=pg_grid)
1993
+
1994
+ dicts.zone_dict = add_zones(circuit=circuit, gslv_grid=pg_grid)
1995
+
1996
+ dicts.substation_dict = add_substations(circuit=circuit, gslv_grid=pg_grid, n_time=n_time)
1997
+
1998
+ dicts.voltage_level_dict = add_voltage_levels(circuit=circuit, gslv_grid=pg_grid,
1999
+ substations_dict=dicts.substation_dict)
2000
+
2001
+ dicts.country_dict = add_countries(circuit=circuit, gslv_grid=pg_grid)
2002
+
2003
+ dicts.facility_dict = add_facilities(circuit=circuit, gslv_grid=pg_grid)
2004
+
2005
+ dicts.modelling_authorities_dict = add_modelling_authorities(circuit=circuit, gslv_grid=pg_grid)
2006
+
2007
+ dicts.branch_groups_dict = add_branch_groups(circuit=circuit, gslv_grid=pg_grid)
2008
+
2009
+ dicts.municipalities_dict = add_municipalities(circuit=circuit, gslv_grid=pg_grid)
2010
+
2011
+ dicts.regions_dict = add_regions(circuit=circuit, gslv_grid=pg_grid)
2012
+
2013
+ dicts.con_groups_dict = add_contingency_groups(circuit=circuit, gslv_grid=pg_grid)
2014
+
2015
+ add_contingencies(circuit=circuit, gslv_grid=pg_grid, n_time=n_time, groups_dict=dicts.con_groups_dict)
2016
+
2017
+ dicts.inv_groups_dict = add_investment_groups(circuit=circuit, gslv_grid=pg_grid)
2018
+
2019
+ add_investments(circuit=circuit, gslv_grid=pg_grid, groups_dict=dicts.inv_groups_dict)
2020
+
2021
+ bus_dict = add_buses(
2022
+ circuit=circuit,
2023
+ gslv_grid=pg_grid,
2024
+ use_time_series=use_time_series,
2025
+ n_time=n_time,
2026
+ time_indices=time_indices,
2027
+ area_dict=dicts.area_dict,
2028
+ zone_dict=dicts.zone_dict,
2029
+ substation_dict=dicts.substation_dict,
2030
+ voltage_level_dict=dicts.voltage_level_dict,
2031
+ country_dict=dicts.country_dict,
2032
+ )
2033
+
2034
+ add_loads(
2035
+ circuit=circuit,
2036
+ gslv_grid=pg_grid,
2037
+ bus_dict=bus_dict,
2038
+ use_time_series=use_time_series,
2039
+ n_time=n_time,
2040
+ time_indices=time_indices,
2041
+ )
2042
+
2043
+ add_static_generators(
2044
+ circuit=circuit,
2045
+ gslv_grid=pg_grid,
2046
+ bus_dict=bus_dict,
2047
+ time_series=use_time_series,
2048
+ n_time=n_time,
2049
+ time_indices=time_indices
2050
+
2051
+ )
2052
+
2053
+ add_shunts(
2054
+ circuit=circuit,
2055
+ gslv_grid=pg_grid,
2056
+ bus_dict=bus_dict,
2057
+ time_series=use_time_series,
2058
+ n_time=n_time,
2059
+ time_indices=time_indices
2060
+ )
2061
+
2062
+ add_generators(
2063
+ circuit=circuit,
2064
+ gslv_grid=pg_grid,
2065
+ bus_dict=bus_dict,
2066
+ time_series=use_time_series,
2067
+ n_time=n_time,
2068
+ time_indices=time_indices,
2069
+ opf_results=opf_results
2070
+ )
2071
+
2072
+ add_battery_data(
2073
+ circuit=circuit,
2074
+ gslv_grid=pg_grid,
2075
+ bus_dict=bus_dict,
2076
+ time_series=use_time_series,
2077
+ n_time=n_time,
2078
+ time_indices=time_indices,
2079
+ opf_results=opf_results
2080
+ )
2081
+
2082
+ add_lines(
2083
+ circuit=circuit,
2084
+ gslv_grid=pg_grid,
2085
+ bus_dict=bus_dict,
2086
+ branch_groups_dict=dicts.branch_groups_dict,
2087
+ time_series=use_time_series,
2088
+ n_time=n_time,
2089
+ time_indices=time_indices
2090
+ )
2091
+
2092
+ add_transformers(
2093
+ circuit=circuit,
2094
+ gslv_grid=pg_grid,
2095
+ bus_dict=bus_dict,
2096
+ branch_groups_dict=dicts.branch_groups_dict,
2097
+ time_series=use_time_series,
2098
+ n_time=n_time,
2099
+ time_indices=time_indices,
2100
+ override_controls=override_branch_controls
2101
+ )
2102
+
2103
+ add_transformers3w(
2104
+ circuit=circuit,
2105
+ gslv_grid=pg_grid,
2106
+ bus_dict=bus_dict,
2107
+ time_series=use_time_series,
2108
+ n_time=n_time,
2109
+ time_indices=time_indices,
2110
+ override_controls=override_branch_controls
2111
+ )
2112
+
2113
+ add_vscs(
2114
+ circuit=circuit,
2115
+ gslv_grid=pg_grid,
2116
+ bus_dict=bus_dict,
2117
+ time_series=use_time_series,
2118
+ n_time=n_time,
2119
+ time_indices=time_indices
2120
+ )
2121
+
2122
+ add_dc_lines(
2123
+ circuit=circuit,
2124
+ gslv_grid=pg_grid,
2125
+ bus_dict=bus_dict,
2126
+ time_series=use_time_series,
2127
+ n_time=n_time,
2128
+ time_indices=time_indices
2129
+ )
2130
+
2131
+ add_hvdcs(
2132
+ circuit=circuit,
2133
+ gslv_grid=pg_grid,
2134
+ bus_dict=bus_dict,
2135
+ time_series=use_time_series,
2136
+ n_time=n_time,
2137
+ time_indices=time_indices
2138
+ )
2139
+
2140
+ return pg_grid, dicts
2141
+
2142
+
2143
+ class FakeAdmittances:
2144
+ """
2145
+ Fake admittances class needed to make the translation
2146
+ """
2147
+
2148
+ def __init__(self) -> None:
2149
+ self.Ybus = None
2150
+ self.Yf = None
2151
+ self.Yt = None
2152
+
2153
+
2154
+ def get_snapshots_from_gslv(circuit: MultiCircuit, override_branch_controls=False) -> List[NumericalCircuit]:
2155
+ """
2156
+
2157
+ :param circuit:
2158
+ :param override_branch_controls:
2159
+ :return:
2160
+ """
2161
+
2162
+ gslv_grid, (bus_dict, area_dict, zone_dict) = to_gslv(circuit,
2163
+ use_time_series=False,
2164
+ override_branch_controls=override_branch_controls)
2165
+
2166
+ logger = pg.Logger()
2167
+ npa_data_lst = pg.compile(gslv_grid, logger, t=0).splitIntoIslands()
2168
+
2169
+ data_lst = list()
2170
+
2171
+ for npa_data in npa_data_lst:
2172
+ data = NumericalCircuit(nbus=0,
2173
+ nbr=0,
2174
+ nhvdc=0,
2175
+ nvsc=0,
2176
+ nload=0,
2177
+ ngen=0,
2178
+ nbatt=0,
2179
+ nshunt=0,
2180
+ nfluidnode=0,
2181
+ nfluidturbine=0,
2182
+ nfluidpump=0,
2183
+ nfluidp2x=0,
2184
+ nfluidpath=0,
2185
+ sbase=0,
2186
+ t_idx=0)
2187
+
2188
+ conn = npa_data.getConnectivity()
2189
+ inj = npa_data.getInjections()
2190
+ tpes = npa_data.getSimulationIndices(inj.S0)
2191
+ adm = npa_data.getAdmittances(conn)
2192
+ lin = npa_data.getLinearMatrices(conn)
2193
+ series_adm = npa_data.getSeriesAdmittances(conn)
2194
+ fd_adm = npa_data.getFastDecoupledAdmittances(conn, tpes)
2195
+ qlim = npa_data.getQLimits()
2196
+
2197
+ data.Vbus_ = npa_data.Vbus.reshape(-1, 1)
2198
+ data.Sbus_ = inj.S0.reshape(-1, 1)
2199
+ data.Ibus_ = inj.I0.reshape(-1, 1)
2200
+ data.passive_branch_data.names = np.array(npa_data.passive_branch_data.names)
2201
+ data.passive_branch_data.virtual_tap_f = npa_data.passive_branch_data.vtap_f
2202
+ data.passive_branch_data.virtual_tap_t = npa_data.passive_branch_data.vtap_t
2203
+ data.passive_branch_data.original_idx = npa_data.passive_branch_data.original_indices
2204
+
2205
+ data.bus_data.names = np.array(npa_data.bus_data.names)
2206
+ data.bus_data.original_idx = npa_data.bus_data.original_indices
2207
+
2208
+ data.admittances_ = FakeAdmittances()
2209
+ data.admittances_.Ybus = adm.Ybus
2210
+ data.admittances_.Yf = adm.Yf
2211
+ data.admittances_.Yt = adm.Yt
2212
+
2213
+ data.Bbus_ = lin.Bbus
2214
+ data.Bf_ = lin.Bf
2215
+
2216
+ data.Yseries_ = series_adm.Yseries
2217
+ data.Yshunt_ = series_adm.Yshunt
2218
+
2219
+ data.B1_ = fd_adm.B1
2220
+ data.B2_ = fd_adm.B2
2221
+
2222
+ data.Cf_ = conn.Cf
2223
+ data.Ct_ = conn.Ct
2224
+
2225
+ data.bus_data.bus_types = tpes.types
2226
+ data.pq_ = tpes.pq
2227
+ data.pv_ = tpes.pv
2228
+ data.vd_ = tpes.vd
2229
+ data.pqpv_ = tpes.no_slack
2230
+
2231
+ data.Qmax_bus_ = qlim.qmax_bus
2232
+ data.Qmin_bus_ = qlim.qmin_bus
2233
+
2234
+ control_indices = npa_data.getSimulationIndices(Sbus=data.Sbus_[:, 0])
2235
+
2236
+ data.k_pf_tau = control_indices.k_pf_tau
2237
+ data.k_qf_m = control_indices.k_qf_m
2238
+ data.k_zero_beq = control_indices.k_qf_beq
2239
+ data.k_vf_beq = control_indices.k_vf_beq
2240
+ data.k_vt_m = control_indices.k_v_m
2241
+ data.k_qt_m = control_indices.k_qt_m
2242
+ data.k_pf_dp = control_indices.k_pf_dp
2243
+ data.i_vsc = control_indices.i_vsc
2244
+ data.i_vf_beq = control_indices.i_vf_beq
2245
+ data.i_vt_m = control_indices.i_vt_m
2246
+
2247
+ data_lst.append(data)
2248
+
2249
+ return data_lst
2250
+
2251
+
2252
+ def get_gslv_pf_options(opt: PowerFlowOptions) -> "pg.PowerFlowOptions":
2253
+ """
2254
+ Translate GridCal power flow options to GSLV power flow options
2255
+ :param opt:
2256
+ :return:
2257
+ """
2258
+ solver_dict = {SolverType.NR: pg.SolverType.NR,
2259
+ SolverType.DC: pg.SolverType.DC,
2260
+ SolverType.HELM: pg.SolverType.HELM,
2261
+ SolverType.IWAMOTO: pg.SolverType.IWAMOTO,
2262
+ SolverType.LM: pg.SolverType.LM,
2263
+ SolverType.LACPF: pg.SolverType.LACPF,
2264
+ SolverType.FASTDECOUPLED: pg.SolverType.FASTDECOUPLED
2265
+ }
2266
+
2267
+ if opt.solver_type in solver_dict.keys():
2268
+ solver_type = solver_dict[opt.solver_type]
2269
+ else:
2270
+ solver_type = pg.SolverType.NR
2271
+
2272
+ """
2273
+ solver_type: GSLVpa.SolverType = <SolverType.NR: 0>,
2274
+ retry_with_other_methods: bool = True,
2275
+ verbose: bool = False,
2276
+ initialize_with_existing_solution: bool = False,
2277
+ tolerance: float = 1e-06,
2278
+ max_iter: int = 15,
2279
+ control_q_mode: GSLVpa.ReactivePowerControlMode = <ReactivePowerControlMode.NoControl: 0>,
2280
+ tap_control_mode: GSLVpa.TapsControlMode = <TapsControlMode.NoControl: 0>,
2281
+ distributed_slack: bool = False,
2282
+ ignore_single_node_islands: bool = False,
2283
+ correction_parameter: float = 0.5,
2284
+ mu0: float = 1.0
2285
+ """
2286
+
2287
+ """
2288
+ solver_type: pygslv.SolverType = <SolverType.NR: 0>,
2289
+ retry_with_other_methods: bool = True,
2290
+ verbose: int = 0,
2291
+ initialize_with_existing_solution: bool = False,
2292
+ tolerance: float = 1e-06,
2293
+ max_iter: int = 25,
2294
+ max_outer_loop_iter: int = 100,
2295
+ control_Q: bool = True,
2296
+ control_taps_modules: bool = True,
2297
+ control_taps_phase: bool = True,
2298
+ control_remote_voltage: bool = True,
2299
+ orthogonalize_controls: bool = True,
2300
+ apply_temperature_correction: bool = True,
2301
+ branch_impedance_tolerance_mode: pygslv.BranchImpedanceMode = <BranchImpedanceMode.Specified: 0>,
2302
+ distributed_slack: bool = False,
2303
+ ignore_single_node_islands: bool = False,
2304
+ trust_radius: float = 1.0,
2305
+ backtracking_parameter: float = 0.05,
2306
+ use_stored_guess: bool = False,
2307
+ generate_report: bool = False)
2308
+
2309
+ """
2310
+
2311
+ return pg.PowerFlowOptions(
2312
+ solver_type=solver_type,
2313
+ retry_with_other_methods=opt.retry_with_other_methods,
2314
+ verbose=opt.verbose,
2315
+ initialize_with_existing_solution=opt.use_stored_guess,
2316
+ tolerance=opt.tolerance,
2317
+ max_iter=opt.max_iter,
2318
+ control_Q=opt.control_Q,
2319
+ control_taps_modules=opt.control_taps_modules,
2320
+ control_taps_phase=opt.control_taps_phase,
2321
+ control_remote_voltage=opt.control_remote_voltage,
2322
+ orthogonalize_controls=opt.orthogonalize_controls,
2323
+ apply_temperature_correction=opt.orthogonalize_controls,
2324
+ branch_impedance_tolerance_mode=pg.BranchImpedanceMode.Specified,
2325
+ distributed_slack=opt.distributed_slack,
2326
+ ignore_single_node_islands=opt.ignore_single_node_islands,
2327
+ trust_radius=opt.trust_radius,
2328
+ backtracking_parameter=opt.backtracking_parameter,
2329
+ use_stored_guess=opt.use_stored_guess,
2330
+ generate_report=opt.generate_report
2331
+ )
2332
+
2333
+
2334
+ def gslv_pf(circuit: MultiCircuit,
2335
+ pf_opt: PowerFlowOptions,
2336
+ time_series: bool = False,
2337
+ time_indices: Union[IntVec, None] = None,
2338
+ opf_results: Union[None, OptimalPowerFlowResults] = None) -> "pg.PowerFlowResults":
2339
+ """
2340
+ GSLV power flow
2341
+ :param circuit: MultiCircuit instance
2342
+ :param pf_opt: Power Flow Options
2343
+ :param time_series: Compile with GridCal time series?
2344
+ :param time_indices: Array of time indices
2345
+ :param opf_results: Instance of
2346
+ :return: GSLV Power flow results object
2347
+ """
2348
+ override_branch_controls = not (pf_opt.control_taps_modules and pf_opt.control_taps_phase)
2349
+
2350
+ gslv_grid, _ = to_gslv(circuit,
2351
+ use_time_series=time_series,
2352
+ time_indices=None,
2353
+ override_branch_controls=override_branch_controls,
2354
+ opf_results=opf_results)
2355
+
2356
+ pf_options = get_gslv_pf_options(pf_opt)
2357
+
2358
+ if time_series:
2359
+ # it is already sliced to the relevant time indices
2360
+ if time_indices is None:
2361
+ time_indices = [i for i in range(circuit.get_time_number())]
2362
+ else:
2363
+ time_indices = list(time_indices)
2364
+ n_threads = 0 # max threads
2365
+ else:
2366
+ time_indices = [0]
2367
+ n_threads = 1
2368
+
2369
+ pf_res = pg.multi_island_pf(grid=gslv_grid,
2370
+ options=pf_options,
2371
+ time_indices=time_indices,
2372
+ n_threads=n_threads)
2373
+
2374
+ return pf_res
2375
+
2376
+
2377
+ def translate_gslv_pf_results(grid: MultiCircuit, res: "pg.PowerFlowResults") -> PowerFlowResults:
2378
+ """
2379
+ Translate the GSLV Power Analytics results back to GridCal
2380
+ :param grid: MultiCircuit instance
2381
+ :param res: GSLV's PowerFlowResults instance
2382
+ :return: PowerFlowResults instance
2383
+ """
2384
+ results = PowerFlowResults(n=grid.get_bus_number(),
2385
+ m=grid.get_branch_number_wo_hvdc(),
2386
+ n_hvdc=grid.get_hvdc_number(),
2387
+ n_vsc=grid.get_vsc_number(),
2388
+ n_gen=grid.get_generators_number(),
2389
+ n_batt=grid.get_batteries_number(),
2390
+ n_sh=grid.get_shunt_like_device_number(),
2391
+ bus_names=res.bus_names,
2392
+ branch_names=res.branch_names,
2393
+ hvdc_names=res.hvdc_names,
2394
+ vsc_names=grid.get_vsc_names(),
2395
+ gen_names=grid.get_generator_names(),
2396
+ batt_names=grid.get_battery_names(),
2397
+ sh_names=grid.get_shunt_like_devices_names(),
2398
+ bus_types=res.bus_types)
2399
+
2400
+ results.voltage = res.voltage[0, :]
2401
+ results.Sbus = res.Scalc[0, :]
2402
+ results.Sf = res.Sf[0, :]
2403
+ results.St = res.St[0, :]
2404
+ results.loading = res.Loading[0, :]
2405
+ results.losses = res.Losses[0, :]
2406
+ # results.Vbranch = res.Vbranch[0, :]
2407
+ # results.If = res.If[0, :]
2408
+ # results.It = res.It[0, :]
2409
+ results.Beq = res.Beq[0, :]
2410
+ results.m = res.tap_module[0, :]
2411
+ results.tap_angle = res.tap_angle[0, :]
2412
+ results.F = res.F
2413
+ results.T = res.T
2414
+ results.hvdc_F = res.hvdc_F
2415
+ results.hvdc_T = res.hvdc_T
2416
+ results.Pf_hvdc = res.hvdc_Pf[0, :]
2417
+ results.Pt_hvdc = res.hvdc_Pt[0, :]
2418
+ results.loading_hvdc = res.hvdc_loading[0, :]
2419
+ results.losses_hvdc = res.hvdc_losses[0, :]
2420
+ results.bus_area_indices = grid.get_bus_area_indices()
2421
+ # results.area_names = [a.name for a in grid.areas]
2422
+ # results.bus_types = convert_bus_types(res.bus_types[0]) # this is a list of lists
2423
+
2424
+ for rep in res.stats[0]:
2425
+ report = ConvergenceReport()
2426
+ for i in range(len(rep.converged)):
2427
+ report.add(method=rep.solver[i].name,
2428
+ converged=rep.converged[i],
2429
+ error=rep.norm_f[i],
2430
+ elapsed=rep.elapsed[i],
2431
+ iterations=rep.iterations[i])
2432
+ results.convergence_reports.append(report)
2433
+
2434
+ return results