GridCalEngine 5.3.52__tar.gz → 5.4.0b1__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 (1338) hide show
  1. gridcalengine-5.4.0b1/GridCalEngine/Compilers/circuit_to_data.py +2545 -0
  2. gridcalengine-5.4.0b1/GridCalEngine/Compilers/circuit_to_gslv.py +2748 -0
  3. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/__init__.py +19 -0
  4. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/active_branch_data.py +143 -0
  5. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/branch_parent_data.py +303 -0
  6. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/bus_data.py +229 -0
  7. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/generator_data.py +428 -0
  8. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/load_data.py +224 -0
  9. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/numerical_circuit.py +1644 -0
  10. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/passive_branch_data.py +169 -0
  11. gridcalengine-5.4.0b1/GridCalEngine/DataStructures/shunt_data.py +224 -0
  12. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/area.py +60 -0
  13. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/branch_group.py +51 -0
  14. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/community.py +38 -0
  15. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/contingency.py +119 -0
  16. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/contingency_group.py +33 -0
  17. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/inter_aggregation_info.py +123 -0
  18. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/investment.py +87 -0
  19. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/investments_group.py +54 -0
  20. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/municipality.py +36 -0
  21. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/region.py +35 -0
  22. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/remedial_action.py +116 -0
  23. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/remedial_action_group.py +55 -0
  24. gridcalengine-5.4.0b1/GridCalEngine/Devices/Aggregation/zone.py +38 -0
  25. gridcalengine-5.4.0b1/GridCalEngine/Devices/Associations/association.py +251 -0
  26. gridcalengine-5.4.0b1/GridCalEngine/Devices/Associations/emission_gas.py +61 -0
  27. gridcalengine-5.4.0b1/GridCalEngine/Devices/Associations/fuel.py +58 -0
  28. gridcalengine-5.4.0b1/GridCalEngine/Devices/Associations/technology.py +40 -0
  29. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/__init__.py +24 -0
  30. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/branch.py +553 -0
  31. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/dc_line.py +336 -0
  32. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/hvdc_line.py +612 -0
  33. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/line.py +708 -0
  34. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/line_locations.py +184 -0
  35. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/overhead_line_type.py +1367 -0
  36. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/sequence_line_type.py +227 -0
  37. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/series_reactance.py +240 -0
  38. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/switch.py +101 -0
  39. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/tap_changer.py +547 -0
  40. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/transformer.py +784 -0
  41. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/transformer3w.py +744 -0
  42. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/transformer_type.py +413 -0
  43. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/underground_line_type.py +118 -0
  44. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/upfc.py +221 -0
  45. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/vsc.py +453 -0
  46. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/winding.py +179 -0
  47. gridcalengine-5.4.0b1/GridCalEngine/Devices/Branches/wire.py +133 -0
  48. gridcalengine-5.4.0b1/GridCalEngine/Devices/Diagrams/base_diagram.py +532 -0
  49. gridcalengine-5.4.0b1/GridCalEngine/Devices/Diagrams/graphic_location.py +55 -0
  50. gridcalengine-5.4.0b1/GridCalEngine/Devices/Fluid/fluid_injection_template.py +125 -0
  51. gridcalengine-5.4.0b1/GridCalEngine/Devices/Fluid/fluid_node.py +229 -0
  52. gridcalengine-5.4.0b1/GridCalEngine/Devices/Fluid/fluid_path.py +116 -0
  53. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/battery.py +133 -0
  54. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/controllable_shunt.py +367 -0
  55. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/current_injection.py +289 -0
  56. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/external_grid.py +170 -0
  57. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/generator.py +477 -0
  58. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/generator_q_curve.py +231 -0
  59. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/load.py +539 -0
  60. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/shunt.py +65 -0
  61. gridcalengine-5.4.0b1/GridCalEngine/Devices/Injections/static_generator.py +59 -0
  62. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/branch_parent.py +525 -0
  63. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/controllable_branch_parent.py +634 -0
  64. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/editable_device.py +1018 -0
  65. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/generator_parent.py +231 -0
  66. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/injection_parent.py +283 -0
  67. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/load_parent.py +329 -0
  68. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/physical_device.py +112 -0
  69. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/pointer_device_parent.py +86 -0
  70. gridcalengine-5.4.0b1/GridCalEngine/Devices/Parents/shunt_parent.py +401 -0
  71. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/__init__.py +10 -0
  72. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/bus.py +473 -0
  73. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/busbar.py +56 -0
  74. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/substation.py +333 -0
  75. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/voltage_level.py +44 -0
  76. gridcalengine-5.4.0b1/GridCalEngine/Devices/Substation/voltage_level_template.py +45 -0
  77. gridcalengine-5.4.0b1/GridCalEngine/Devices/__init__.py +17 -0
  78. gridcalengine-5.4.0b1/GridCalEngine/Devices/admittance_matrix.py +149 -0
  79. gridcalengine-5.4.0b1/GridCalEngine/Devices/assets.py +6314 -0
  80. gridcalengine-5.4.0b1/GridCalEngine/Devices/measurement.py +196 -0
  81. gridcalengine-5.4.0b1/GridCalEngine/Devices/multi_circuit.py +2859 -0
  82. gridcalengine-5.4.0b1/GridCalEngine/Devices/profile.py +586 -0
  83. gridcalengine-5.4.0b1/GridCalEngine/Devices/types.py +120 -0
  84. gridcalengine-5.4.0b1/GridCalEngine/IO/__init__.py +18 -0
  85. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/__init__.py +8 -0
  86. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/base.py +347 -0
  87. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_2_4_15_assets.py +798 -0
  88. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_3_0_0_assets.py +908 -0
  89. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_circuit.py +844 -0
  90. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_create_instances.py +1256 -0
  91. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_data_parser.py +426 -0
  92. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_data_validator.py +161 -0
  93. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_enums.py +1716 -0
  94. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_export.py +398 -0
  95. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_property.py +69 -0
  96. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_to_gridcal.py +2469 -0
  97. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_typing.py +163 -0
  98. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_utils.py +838 -0
  99. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converter.py +188 -0
  100. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converterdc_terminal.py +34 -0
  101. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_terminal.py +64 -0
  102. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/active_power_limit.py +24 -0
  103. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/analog_control.py +33 -0
  104. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/apparent_power_limit.py +24 -0
  105. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/asynchronous_machine.py +105 -0
  106. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/base_voltage.py +64 -0
  107. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/basic_interval_schedule.py +43 -0
  108. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bay.py +25 -0
  109. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/breaker.py +15 -0
  110. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bus_name_marker.py +44 -0
  111. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/busbar_section.py +24 -0
  112. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conducting_equipment.py +45 -0
  113. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conductor.py +24 -0
  114. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load.py +25 -0
  115. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load_group.py +25 -0
  116. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node.py +47 -0
  117. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node_container.py +35 -0
  118. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connector.py +15 -0
  119. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control.py +71 -0
  120. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area.py +72 -0
  121. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area_generating_unit.py +35 -0
  122. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/coordinate_system.py +38 -0
  123. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/cs_converter.py +141 -0
  124. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/current_limit.py +24 -0
  125. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve.py +61 -0
  126. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve_data.py +52 -0
  127. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_base_terminal.py +35 -0
  128. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_breaker.py +15 -0
  129. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_busbar.py +15 -0
  130. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_chopper.py +15 -0
  131. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_conducting_equipment.py +25 -0
  132. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_converter_unit.py +34 -0
  133. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_disconnector.py +15 -0
  134. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_equipment_container.py +35 -0
  135. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_ground.py +33 -0
  136. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line.py +25 -0
  137. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line_segment.py +61 -0
  138. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_node.py +45 -0
  139. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_series_device.py +42 -0
  140. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_shunt.py +42 -0
  141. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_switch.py +15 -0
  142. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_terminal.py +25 -0
  143. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_island.py +25 -0
  144. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_node.py +55 -0
  145. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/disconnector.py +15 -0
  146. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/earth_fault_compensator.py +24 -0
  147. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_area.py +25 -0
  148. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_consumer.py +79 -0
  149. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_scheduling_type.py +25 -0
  150. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_source.py +124 -0
  151. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment.py +44 -0
  152. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment_container.py +25 -0
  153. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_branch.py +159 -0
  154. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_equipment.py +25 -0
  155. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_injection.py +160 -0
  156. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_network.py +25 -0
  157. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_shunt.py +33 -0
  158. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/external_network_injection.py +177 -0
  159. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/fossil_fuel.py +34 -0
  160. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/full_model.py +85 -0
  161. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/generating_unit.py +179 -0
  162. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/geographical_region.py +25 -0
  163. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground.py +15 -0
  164. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground_disconnector.py +15 -0
  165. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/grounding_impedance.py +24 -0
  166. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_generating_unit.py +34 -0
  167. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_power_plant.py +44 -0
  168. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_pump.py +35 -0
  169. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/identified_object.py +66 -0
  170. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/junction.py +15 -0
  171. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit.py +15 -0
  172. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit_set.py +24 -0
  173. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/line.py +25 -0
  174. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/linear_shunt_compensator.py +51 -0
  175. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_area.py +25 -0
  176. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_break_switch.py +15 -0
  177. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_group.py +25 -0
  178. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_response_characteristic.py +136 -0
  179. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/location.py +51 -0
  180. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement.py +72 -0
  181. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement_value.py +34 -0
  182. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/mutual_coupling.py +107 -0
  183. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load.py +25 -0
  184. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load_group.py +25 -0
  185. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator.py +25 -0
  186. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator_point.py +70 -0
  187. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nuclear_generating_unit.py +15 -0
  188. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit.py +35 -0
  189. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_set.py +45 -0
  190. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_type.py +52 -0
  191. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/per_lengthdc_line_parameter.py +52 -0
  192. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/petersen_coil.py +78 -0
  193. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer.py +25 -0
  194. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_asymmetrical.py +24 -0
  195. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_linear.py +42 -0
  196. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_non_linear.py +42 -0
  197. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_symmetrical.py +15 -0
  198. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table.py +35 -0
  199. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table_point.py +34 -0
  200. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_tabular.py +25 -0
  201. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/position_point.py +61 -0
  202. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_system_resource.py +45 -0
  203. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer.py +79 -0
  204. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer_end.py +133 -0
  205. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/protected_switch.py +15 -0
  206. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/quality61850.py +123 -0
  207. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer.py +53 -0
  208. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table.py +35 -0
  209. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table_point.py +25 -0
  210. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reactive_capability_curve.py +35 -0
  211. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regular_interval_schedule.py +34 -0
  212. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_cond_eq.py +34 -0
  213. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_control.py +89 -0
  214. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reporting_group.py +35 -0
  215. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/rotating_machine.py +80 -0
  216. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/season_day_type_schedule.py +15 -0
  217. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/series_compensator.py +78 -0
  218. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/shunt_compensator.py +107 -0
  219. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/solar_generating_unit.py +15 -0
  220. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/static_var_compensator.py +69 -0
  221. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_geographical_region.py +55 -0
  222. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_load_area.py +35 -0
  223. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/substation.py +45 -0
  224. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_injection.py +43 -0
  225. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_power_flow.py +43 -0
  226. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_shunt_compensator_sections.py +34 -0
  227. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_status.py +34 -0
  228. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_tap_step.py +34 -0
  229. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_voltage.py +43 -0
  230. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/switch.py +51 -0
  231. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/synchronous_machine.py +214 -0
  232. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer.py +110 -0
  233. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_control.py +25 -0
  234. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_table_point.py +69 -0
  235. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/terminal.py +125 -0
  236. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/thermal_generating_unit.py +25 -0
  237. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tie_flow.py +44 -0
  238. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_island.py +35 -0
  239. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_node.py +105 -0
  240. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/transformer_end.py +91 -0
  241. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_level.py +63 -0
  242. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_limit.py +24 -0
  243. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_capability_curve.py +25 -0
  244. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_converter.py +124 -0
  245. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/wind_generating_unit.py +24 -0
  246. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_converterdc_terminal.py +36 -0
  247. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_terminal.py +64 -0
  248. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/active_power_limit.py +33 -0
  249. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/analog_control.py +33 -0
  250. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/apparent_power_limit.py +33 -0
  251. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/asynchronous_machine.py +105 -0
  252. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/auxiliary_equipment.py +25 -0
  253. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/base_voltage.py +66 -0
  254. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/basic_interval_schedule.py +43 -0
  255. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/battery_unit.py +42 -0
  256. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bay.py +27 -0
  257. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/boundary_point.py +105 -0
  258. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/breaker.py +15 -0
  259. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bus_name_marker.py +46 -0
  260. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/busbar_section.py +24 -0
  261. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/caes_plant.py +27 -0
  262. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/clamp.py +36 -0
  263. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cogeneration_plant.py +27 -0
  264. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/combined_cycle_plant.py +25 -0
  265. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conducting_equipment.py +45 -0
  266. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conductor.py +24 -0
  267. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load.py +27 -0
  268. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load_group.py +25 -0
  269. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node.py +57 -0
  270. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node_container.py +37 -0
  271. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connector.py +15 -0
  272. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control.py +73 -0
  273. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area.py +74 -0
  274. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area_generating_unit.py +35 -0
  275. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/coordinate_system.py +38 -0
  276. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cs_converter.py +141 -0
  277. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_limit.py +33 -0
  278. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_transformer.py +15 -0
  279. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve.py +63 -0
  280. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve_data.py +54 -0
  281. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cut.py +36 -0
  282. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_base_terminal.py +37 -0
  283. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_breaker.py +15 -0
  284. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_busbar.py +15 -0
  285. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_chopper.py +15 -0
  286. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_conducting_equipment.py +34 -0
  287. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_converter_unit.py +36 -0
  288. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_disconnector.py +15 -0
  289. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_equipment_container.py +35 -0
  290. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_ground.py +33 -0
  291. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line.py +27 -0
  292. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line_segment.py +51 -0
  293. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_node.py +47 -0
  294. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_series_device.py +33 -0
  295. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_shunt.py +33 -0
  296. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_switch.py +15 -0
  297. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_terminal.py +27 -0
  298. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_island.py +25 -0
  299. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_node.py +55 -0
  300. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnecting_circuit_breaker.py +15 -0
  301. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnector.py +15 -0
  302. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/earth_fault_compensator.py +24 -0
  303. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_area.py +27 -0
  304. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_connection.py +15 -0
  305. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_consumer.py +81 -0
  306. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_scheduling_type.py +25 -0
  307. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_source.py +144 -0
  308. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment.py +65 -0
  309. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment_container.py +25 -0
  310. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_branch.py +159 -0
  311. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_equipment.py +25 -0
  312. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_injection.py +160 -0
  313. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_network.py +25 -0
  314. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_shunt.py +33 -0
  315. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/external_network_injection.py +177 -0
  316. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fault_indicator.py +15 -0
  317. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fossil_fuel.py +36 -0
  318. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/full_model.py +85 -0
  319. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fuse.py +15 -0
  320. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/generating_unit.py +181 -0
  321. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/geographical_region.py +25 -0
  322. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground.py +15 -0
  323. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground_disconnector.py +15 -0
  324. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/grounding_impedance.py +24 -0
  325. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_generating_unit.py +52 -0
  326. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_power_plant.py +46 -0
  327. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_pump.py +37 -0
  328. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/identified_object.py +69 -0
  329. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/io_point.py +15 -0
  330. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/jumper.py +15 -0
  331. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/junction.py +15 -0
  332. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit.py +15 -0
  333. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit_set.py +24 -0
  334. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/line.py +27 -0
  335. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/linear_shunt_compensator.py +51 -0
  336. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_area.py +27 -0
  337. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_break_switch.py +15 -0
  338. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_group.py +27 -0
  339. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_response_characteristic.py +138 -0
  340. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/location.py +47 -0
  341. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement.py +75 -0
  342. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement_value.py +34 -0
  343. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/mutual_coupling.py +109 -0
  344. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load.py +27 -0
  345. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load_group.py +25 -0
  346. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator.py +25 -0
  347. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator_point.py +70 -0
  348. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nuclear_generating_unit.py +15 -0
  349. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit.py +37 -0
  350. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_set.py +45 -0
  351. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_type.py +61 -0
  352. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/petersen_coil.py +78 -0
  353. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer.py +27 -0
  354. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_asymmetrical.py +24 -0
  355. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_linear.py +42 -0
  356. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_non_linear.py +42 -0
  357. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_symmetrical.py +15 -0
  358. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table.py +35 -0
  359. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table_point.py +34 -0
  360. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_tabular.py +25 -0
  361. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/photo_voltaic_unit.py +15 -0
  362. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/position_point.py +61 -0
  363. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/post_line_sensor.py +15 -0
  364. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/potential_transformer.py +15 -0
  365. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_connection.py +79 -0
  366. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_unit.py +43 -0
  367. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_wind_unit.py +15 -0
  368. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_system_resource.py +45 -0
  369. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer.py +81 -0
  370. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer_end.py +133 -0
  371. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/protected_switch.py +15 -0
  372. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer.py +44 -0
  373. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table.py +35 -0
  374. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table_point.py +25 -0
  375. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reactive_capability_curve.py +35 -0
  376. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regular_interval_schedule.py +34 -0
  377. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_cond_eq.py +34 -0
  378. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_control.py +108 -0
  379. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reporting_group.py +37 -0
  380. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/rotating_machine.py +82 -0
  381. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/season_day_type_schedule.py +15 -0
  382. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sensor.py +15 -0
  383. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/series_compensator.py +78 -0
  384. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/service_location.py +15 -0
  385. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/shunt_compensator.py +92 -0
  386. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_generating_unit.py +25 -0
  387. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_power_plant.py +27 -0
  388. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/static_var_compensator.py +69 -0
  389. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_geographical_region.py +55 -0
  390. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_load_area.py +37 -0
  391. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/substation.py +47 -0
  392. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/surge_arrester.py +15 -0
  393. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_injection.py +45 -0
  394. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_shunt_compensator_sections.py +34 -0
  395. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_status.py +36 -0
  396. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_switch.py +36 -0
  397. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_tap_step.py +36 -0
  398. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_voltage.py +45 -0
  399. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/switch.py +77 -0
  400. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/synchronous_machine.py +215 -0
  401. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer.py +115 -0
  402. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_control.py +25 -0
  403. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_table_point.py +70 -0
  404. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/terminal.py +137 -0
  405. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/thermal_generating_unit.py +55 -0
  406. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tie_flow.py +46 -0
  407. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_island.py +35 -0
  408. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_node.py +107 -0
  409. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/transformer_end.py +93 -0
  410. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_level.py +65 -0
  411. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_limit.py +33 -0
  412. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_capability_curve.py +25 -0
  413. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_converter.py +144 -0
  414. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wave_trap.py +15 -0
  415. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_generating_unit.py +34 -0
  416. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_power_plant.py +25 -0
  417. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/work_location.py +15 -0
  418. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/cgmes_writer.py +45 -0
  419. gridcalengine-5.4.0b1/GridCalEngine/IO/cim/cgmes/gridcal_to_cgmes.py +2211 -0
  420. gridcalengine-5.4.0b1/GridCalEngine/IO/file_handler.py +747 -0
  421. gridcalengine-5.4.0b1/GridCalEngine/IO/file_system.py +85 -0
  422. gridcalengine-5.4.0b1/GridCalEngine/IO/gridcal/contingency_parser.py +116 -0
  423. gridcalengine-5.4.0b1/GridCalEngine/IO/gridcal/json_parser.py +2167 -0
  424. gridcalengine-5.4.0b1/GridCalEngine/IO/gridcal/pack_unpack.py +1563 -0
  425. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/iidm_circuit.py +34 -0
  426. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rte_area.py +30 -0
  427. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rte_bus.py +28 -0
  428. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rte_busbar_section.py +13 -0
  429. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rte_dangling_line.py +29 -0
  430. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rte_object.py +89 -0
  431. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/rtesubstation.py +19 -0
  432. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/devices/voltage_level.py +30 -0
  433. gridcalengine-5.4.0b1/GridCalEngine/IO/iidm/iidm_parser.py +199 -0
  434. gridcalengine-5.4.0b1/GridCalEngine/IO/matpower/matpower_circuit.py +162 -0
  435. gridcalengine-5.4.0b1/GridCalEngine/IO/matpower/matpower_to_gridcal.py +702 -0
  436. gridcalengine-5.4.0b1/GridCalEngine/IO/others/__init__.py +10 -0
  437. gridcalengine-5.4.0b1/GridCalEngine/IO/others/rte_parser.py +314 -0
  438. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/area.py +87 -0
  439. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/branch.py +558 -0
  440. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/bus.py +183 -0
  441. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/fixed_shunt.py +83 -0
  442. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/impedance_correction_table.py +99 -0
  443. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/inter_area.py +84 -0
  444. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/load.py +258 -0
  445. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/node.py +106 -0
  446. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/owner.py +63 -0
  447. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/psse_object.py +288 -0
  448. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/substation.py +96 -0
  449. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/switched_shunt.py +296 -0
  450. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/system_switching_device.py +146 -0
  451. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/two_terminal_dc_line.py +513 -0
  452. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/devices/zone.py +66 -0
  453. gridcalengine-5.4.0b1/GridCalEngine/IO/raw/gridcal_to_raw.py +643 -0
  454. gridcalengine-5.4.0b1/GridCalEngine/Simulations/AI/__init__.py +3 -0
  455. gridcalengine-5.4.0b1/GridCalEngine/Simulations/AI/ai_trainer_iterable.py +99 -0
  456. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ATC/available_transfer_capacity_driver.py +578 -0
  457. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ATC/available_transfer_capacity_ts_driver.py +361 -0
  458. gridcalengine-5.4.0b1/GridCalEngine/Simulations/Clustering/clustering.py +159 -0
  459. gridcalengine-5.4.0b1/GridCalEngine/Simulations/Clustering/clustering_driver.py +62 -0
  460. gridcalengine-5.4.0b1/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/adequacy_problem.py +324 -0
  461. gridcalengine-5.4.0b1/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_driver.py +333 -0
  462. gridcalengine-5.4.0b1/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_results.py +437 -0
  463. gridcalengine-5.4.0b1/GridCalEngine/Simulations/LinearFactors/linear_analysis.py +907 -0
  464. gridcalengine-5.4.0b1/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_driver.py +102 -0
  465. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_driver.py +165 -0
  466. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_opf.py +2498 -0
  467. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_opf_strict.py +2118 -0
  468. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_options.py +91 -0
  469. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_results.py +433 -0
  470. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_ts_driver.py +178 -0
  471. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NTC/ntc_ts_results.py +407 -0
  472. gridcalengine-5.4.0b1/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_ts_driver.py +459 -0
  473. gridcalengine-5.4.0b1/GridCalEngine/Simulations/OPF/Formulations/ac_opf_problem.py +1893 -0
  474. gridcalengine-5.4.0b1/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf.py +151 -0
  475. gridcalengine-5.4.0b1/GridCalEngine/Simulations/OPF/linear_opf_ts.py +2150 -0
  476. gridcalengine-5.4.0b1/GridCalEngine/Simulations/OPF/opf_driver.py +314 -0
  477. gridcalengine-5.4.0b1/GridCalEngine/Simulations/OPF/opf_ts_driver.py +536 -0
  478. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/Formulations/pf_basic_formulation.py +315 -0
  479. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/Formulations/pf_basic_formulation_3ph.py +975 -0
  480. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/Formulations/pf_generalized_formulation.py +1998 -0
  481. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/NumericalMethods/common_functions.py +399 -0
  482. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_fx.py +135 -0
  483. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/power_flow_options.py +119 -0
  484. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/power_flow_results.py +1033 -0
  485. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/power_flow_ts_driver.py +304 -0
  486. gridcalengine-5.4.0b1/GridCalEngine/Simulations/PowerFlow/power_flow_worker.py +1350 -0
  487. gridcalengine-5.4.0b1/GridCalEngine/Simulations/Reliability/reliability_iterable.py +86 -0
  488. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit.py +127 -0
  489. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_driver.py +330 -0
  490. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_options.py +67 -0
  491. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_results.py +1466 -0
  492. gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_worker.py +606 -0
  493. gridcalengine-5.4.0b1/GridCalEngine/Simulations/StateEstimation/state_estimation.py +469 -0
  494. gridcalengine-5.4.0b1/GridCalEngine/Simulations/StateEstimation/state_stimation_driver.py +165 -0
  495. gridcalengine-5.4.0b1/GridCalEngine/Simulations/__init__.py +27 -0
  496. gridcalengine-5.4.0b1/GridCalEngine/Simulations/results_template.py +513 -0
  497. gridcalengine-5.4.0b1/GridCalEngine/Topology/__init__.py +7 -0
  498. gridcalengine-5.4.0b1/GridCalEngine/Topology/admittance_matrices.py +1011 -0
  499. gridcalengine-5.4.0b1/GridCalEngine/Topology/grid_reduction.py +523 -0
  500. gridcalengine-5.4.0b1/GridCalEngine/Topology/substation_wizards.py +2060 -0
  501. gridcalengine-5.4.0b1/GridCalEngine/Topology/topology.py +702 -0
  502. gridcalengine-5.4.0b1/GridCalEngine/Utils/Filtering/filtering.py +433 -0
  503. gridcalengine-5.4.0b1/GridCalEngine/Utils/Filtering/objects_filtering.py +158 -0
  504. gridcalengine-5.4.0b1/GridCalEngine/Utils/Filtering/results_table_filtering.py +273 -0
  505. gridcalengine-5.4.0b1/GridCalEngine/Utils/Filtering/timeseries_filtering.py +171 -0
  506. gridcalengine-5.4.0b1/GridCalEngine/Utils/MIP/SimpleMip/lpmodel.py +675 -0
  507. gridcalengine-5.4.0b1/GridCalEngine/Utils/MIP/SimpleMip/lpobjects.py +398 -0
  508. gridcalengine-5.4.0b1/GridCalEngine/Utils/MIP/ortools_interface.py +376 -0
  509. gridcalengine-5.4.0b1/GridCalEngine/Utils/MIP/pulp_interface.py +386 -0
  510. gridcalengine-5.4.0b1/GridCalEngine/Utils/MIP/selected_interface.py +118 -0
  511. gridcalengine-5.4.0b1/GridCalEngine/Utils/Sparse/csc.py +556 -0
  512. gridcalengine-5.4.0b1/GridCalEngine/Utils/Sparse/sparse_array.py +531 -0
  513. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/gslv/gslv_activation.py +107 -0
  514. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/apis/cplex_cmd.py +301 -0
  515. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_cmd.py +285 -0
  516. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_py.py +324 -0
  517. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver.py +297 -0
  518. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver_cmd.py +294 -0
  519. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/model/lp_objects.py +1317 -0
  520. gridcalengine-5.4.0b1/GridCalEngine/Utils/ThirdParty/pulp/sparse.py +91 -0
  521. gridcalengine-5.4.0b1/GridCalEngine/__init__.py +472 -0
  522. gridcalengine-5.4.0b1/GridCalEngine/__version__.py +48 -0
  523. gridcalengine-5.4.0b1/GridCalEngine/basic_structures.py +917 -0
  524. gridcalengine-5.4.0b1/GridCalEngine/enumerations.py +2146 -0
  525. gridcalengine-5.4.0b1/PKG-INFO +28 -0
  526. gridcalengine-5.4.0b1/setup.py +113 -0
  527. gridcalengine-5.3.52/GridCalEngine/Compilers/circuit_to_data.py +0 -2190
  528. gridcalengine-5.3.52/GridCalEngine/Compilers/circuit_to_gslv.py +0 -2767
  529. gridcalengine-5.3.52/GridCalEngine/DataStructures/__init__.py +0 -19
  530. gridcalengine-5.3.52/GridCalEngine/DataStructures/active_branch_data.py +0 -158
  531. gridcalengine-5.3.52/GridCalEngine/DataStructures/branch_parent_data.py +0 -295
  532. gridcalengine-5.3.52/GridCalEngine/DataStructures/bus_data.py +0 -221
  533. gridcalengine-5.3.52/GridCalEngine/DataStructures/generator_data.py +0 -415
  534. gridcalengine-5.3.52/GridCalEngine/DataStructures/load_data.py +0 -196
  535. gridcalengine-5.3.52/GridCalEngine/DataStructures/numerical_circuit.py +0 -1711
  536. gridcalengine-5.3.52/GridCalEngine/DataStructures/passive_branch_data.py +0 -189
  537. gridcalengine-5.3.52/GridCalEngine/DataStructures/shunt_data.py +0 -221
  538. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/area.py +0 -55
  539. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/branch_group.py +0 -48
  540. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/community.py +0 -35
  541. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/contingency.py +0 -114
  542. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/contingency_group.py +0 -32
  543. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/inter_aggregation_info.py +0 -113
  544. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/investment.py +0 -82
  545. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/investments_group.py +0 -49
  546. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/municipality.py +0 -35
  547. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/region.py +0 -34
  548. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/remedial_action.py +0 -115
  549. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/remedial_action_group.py +0 -54
  550. gridcalengine-5.3.52/GridCalEngine/Devices/Aggregation/zone.py +0 -37
  551. gridcalengine-5.3.52/GridCalEngine/Devices/Associations/association.py +0 -245
  552. gridcalengine-5.3.52/GridCalEngine/Devices/Associations/emission_gas.py +0 -60
  553. gridcalengine-5.3.52/GridCalEngine/Devices/Associations/fuel.py +0 -57
  554. gridcalengine-5.3.52/GridCalEngine/Devices/Associations/technology.py +0 -39
  555. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/__init__.py +0 -23
  556. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/branch.py +0 -555
  557. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/dc_line.py +0 -322
  558. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/hvdc_line.py +0 -589
  559. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/line.py +0 -624
  560. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/line_locations.py +0 -182
  561. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/overhead_line_type.py +0 -1180
  562. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/sequence_line_type.py +0 -156
  563. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/series_reactance.py +0 -219
  564. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/switch.py +0 -93
  565. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/tap_changer.py +0 -532
  566. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/transformer.py +0 -489
  567. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/transformer3w.py +0 -777
  568. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/transformer_type.py +0 -384
  569. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/underground_line_type.py +0 -104
  570. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/upfc.py +0 -204
  571. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/vsc.py +0 -442
  572. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/winding.py +0 -184
  573. gridcalengine-5.3.52/GridCalEngine/Devices/Branches/wire.py +0 -124
  574. gridcalengine-5.3.52/GridCalEngine/Devices/Diagrams/base_diagram.py +0 -532
  575. gridcalengine-5.3.52/GridCalEngine/Devices/Diagrams/graphic_location.py +0 -55
  576. gridcalengine-5.3.52/GridCalEngine/Devices/Fluid/fluid_injection_template.py +0 -123
  577. gridcalengine-5.3.52/GridCalEngine/Devices/Fluid/fluid_node.py +0 -213
  578. gridcalengine-5.3.52/GridCalEngine/Devices/Fluid/fluid_path.py +0 -115
  579. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/battery.py +0 -118
  580. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/controllable_shunt.py +0 -337
  581. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/current_injection.py +0 -129
  582. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/external_grid.py +0 -156
  583. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/generator.py +0 -449
  584. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/generator_q_curve.py +0 -230
  585. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/load.py +0 -220
  586. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/shunt.py +0 -53
  587. gridcalengine-5.3.52/GridCalEngine/Devices/Injections/static_generator.py +0 -49
  588. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/branch_parent.py +0 -651
  589. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/controllable_branch_parent.py +0 -612
  590. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/editable_device.py +0 -988
  591. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/generator_parent.py +0 -228
  592. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/injection_parent.py +0 -270
  593. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/load_parent.py +0 -161
  594. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/physical_device.py +0 -108
  595. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/pointer_device_parent.py +0 -81
  596. gridcalengine-5.3.52/GridCalEngine/Devices/Parents/shunt_parent.py +0 -196
  597. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/__init__.py +0 -10
  598. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/bus.py +0 -412
  599. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/busbar.py +0 -62
  600. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/connectivity_node.py +0 -118
  601. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/substation.py +0 -317
  602. gridcalengine-5.3.52/GridCalEngine/Devices/Substation/voltage_level.py +0 -40
  603. gridcalengine-5.3.52/GridCalEngine/Devices/__init__.py +0 -16
  604. gridcalengine-5.3.52/GridCalEngine/Devices/admittance_matrix.py +0 -106
  605. gridcalengine-5.3.52/GridCalEngine/Devices/assets.py +0 -6383
  606. gridcalengine-5.3.52/GridCalEngine/Devices/measurement.py +0 -171
  607. gridcalengine-5.3.52/GridCalEngine/Devices/multi_circuit.py +0 -2796
  608. gridcalengine-5.3.52/GridCalEngine/Devices/profile.py +0 -542
  609. gridcalengine-5.3.52/GridCalEngine/Devices/types.py +0 -120
  610. gridcalengine-5.3.52/GridCalEngine/IO/__init__.py +0 -20
  611. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/__init__.py +0 -8
  612. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/base.py +0 -341
  613. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_2_4_15_assets.py +0 -647
  614. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_assets/cgmes_3_0_0_assets.py +0 -739
  615. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_circuit.py +0 -847
  616. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_create_instances.py +0 -1048
  617. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_data_parser.py +0 -426
  618. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_data_validator.py +0 -162
  619. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_enums.py +0 -1716
  620. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_export.py +0 -398
  621. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_property.py +0 -69
  622. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_to_gridcal.py +0 -2565
  623. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_utils.py +0 -861
  624. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converter.py +0 -188
  625. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_converterdc_terminal.py +0 -34
  626. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/acdc_terminal.py +0 -64
  627. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/active_power_limit.py +0 -24
  628. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/analog_control.py +0 -33
  629. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/apparent_power_limit.py +0 -24
  630. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/asynchronous_machine.py +0 -105
  631. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/base_voltage.py +0 -64
  632. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/basic_interval_schedule.py +0 -43
  633. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bay.py +0 -25
  634. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/breaker.py +0 -15
  635. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/bus_name_marker.py +0 -44
  636. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/busbar_section.py +0 -24
  637. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conducting_equipment.py +0 -45
  638. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conductor.py +0 -24
  639. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load.py +0 -25
  640. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/conform_load_group.py +0 -25
  641. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node.py +0 -47
  642. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connectivity_node_container.py +0 -35
  643. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/connector.py +0 -15
  644. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control.py +0 -71
  645. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area.py +0 -72
  646. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/control_area_generating_unit.py +0 -35
  647. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/coordinate_system.py +0 -38
  648. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/cs_converter.py +0 -141
  649. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/current_limit.py +0 -24
  650. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve.py +0 -61
  651. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/curve_data.py +0 -52
  652. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_base_terminal.py +0 -35
  653. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_breaker.py +0 -15
  654. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_busbar.py +0 -15
  655. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_chopper.py +0 -15
  656. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_conducting_equipment.py +0 -25
  657. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_converter_unit.py +0 -34
  658. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_disconnector.py +0 -15
  659. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_equipment_container.py +0 -35
  660. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_ground.py +0 -33
  661. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line.py +0 -25
  662. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_line_segment.py +0 -61
  663. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_node.py +0 -45
  664. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_series_device.py +0 -42
  665. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_shunt.py +0 -42
  666. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_switch.py +0 -15
  667. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_terminal.py +0 -25
  668. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_island.py +0 -25
  669. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/dc_topological_node.py +0 -55
  670. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/disconnector.py +0 -15
  671. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/earth_fault_compensator.py +0 -24
  672. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_area.py +0 -25
  673. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_consumer.py +0 -79
  674. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_scheduling_type.py +0 -25
  675. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/energy_source.py +0 -124
  676. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment.py +0 -44
  677. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equipment_container.py +0 -25
  678. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_branch.py +0 -159
  679. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_equipment.py +0 -25
  680. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_injection.py +0 -160
  681. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_network.py +0 -25
  682. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/equivalent_shunt.py +0 -33
  683. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/external_network_injection.py +0 -177
  684. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/fossil_fuel.py +0 -34
  685. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/full_model.py +0 -85
  686. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/generating_unit.py +0 -179
  687. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/geographical_region.py +0 -25
  688. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground.py +0 -15
  689. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ground_disconnector.py +0 -15
  690. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/grounding_impedance.py +0 -24
  691. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_generating_unit.py +0 -34
  692. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_power_plant.py +0 -44
  693. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/hydro_pump.py +0 -35
  694. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/identified_object.py +0 -66
  695. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/junction.py +0 -15
  696. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit.py +0 -15
  697. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/limit_set.py +0 -24
  698. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/line.py +0 -25
  699. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/linear_shunt_compensator.py +0 -51
  700. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_area.py +0 -25
  701. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_break_switch.py +0 -15
  702. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_group.py +0 -25
  703. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/load_response_characteristic.py +0 -136
  704. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/location.py +0 -51
  705. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement.py +0 -72
  706. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/measurement_value.py +0 -34
  707. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/mutual_coupling.py +0 -107
  708. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load.py +0 -25
  709. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/non_conform_load_group.py +0 -25
  710. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator.py +0 -25
  711. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nonlinear_shunt_compensator_point.py +0 -70
  712. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/nuclear_generating_unit.py +0 -15
  713. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit.py +0 -35
  714. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_set.py +0 -45
  715. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/operational_limit_type.py +0 -52
  716. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/per_lengthdc_line_parameter.py +0 -52
  717. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/petersen_coil.py +0 -78
  718. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer.py +0 -25
  719. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_asymmetrical.py +0 -24
  720. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_linear.py +0 -42
  721. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_non_linear.py +0 -42
  722. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_symmetrical.py +0 -15
  723. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table.py +0 -35
  724. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_table_point.py +0 -34
  725. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/phase_tap_changer_tabular.py +0 -25
  726. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/position_point.py +0 -61
  727. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_system_resource.py +0 -45
  728. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer.py +0 -79
  729. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/power_transformer_end.py +0 -133
  730. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/protected_switch.py +0 -15
  731. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/quality61850.py +0 -123
  732. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer.py +0 -53
  733. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table.py +0 -35
  734. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ratio_tap_changer_table_point.py +0 -25
  735. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reactive_capability_curve.py +0 -35
  736. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regular_interval_schedule.py +0 -34
  737. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_cond_eq.py +0 -34
  738. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/regulating_control.py +0 -89
  739. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/reporting_group.py +0 -35
  740. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/rotating_machine.py +0 -80
  741. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/season_day_type_schedule.py +0 -15
  742. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/series_compensator.py +0 -78
  743. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/shunt_compensator.py +0 -107
  744. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/solar_generating_unit.py +0 -15
  745. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/static_var_compensator.py +0 -69
  746. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_geographical_region.py +0 -55
  747. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sub_load_area.py +0 -35
  748. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/substation.py +0 -45
  749. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_injection.py +0 -43
  750. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_power_flow.py +0 -43
  751. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_shunt_compensator_sections.py +0 -34
  752. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_status.py +0 -34
  753. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_tap_step.py +0 -34
  754. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/sv_voltage.py +0 -43
  755. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/switch.py +0 -51
  756. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/synchronous_machine.py +0 -214
  757. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer.py +0 -110
  758. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_control.py +0 -25
  759. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tap_changer_table_point.py +0 -69
  760. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/terminal.py +0 -125
  761. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/thermal_generating_unit.py +0 -25
  762. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/tie_flow.py +0 -44
  763. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_island.py +0 -35
  764. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/topological_node.py +0 -105
  765. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/transformer_end.py +0 -91
  766. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_level.py +0 -63
  767. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/voltage_limit.py +0 -24
  768. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_capability_curve.py +0 -25
  769. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/vs_converter.py +0 -124
  770. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/wind_generating_unit.py +0 -24
  771. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_converterdc_terminal.py +0 -36
  772. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_terminal.py +0 -64
  773. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/active_power_limit.py +0 -33
  774. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/analog_control.py +0 -33
  775. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/apparent_power_limit.py +0 -33
  776. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/asynchronous_machine.py +0 -105
  777. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/auxiliary_equipment.py +0 -25
  778. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/base_voltage.py +0 -66
  779. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/basic_interval_schedule.py +0 -43
  780. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/battery_unit.py +0 -42
  781. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bay.py +0 -27
  782. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/boundary_point.py +0 -105
  783. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/breaker.py +0 -15
  784. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/bus_name_marker.py +0 -46
  785. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/busbar_section.py +0 -24
  786. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/caes_plant.py +0 -27
  787. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/clamp.py +0 -36
  788. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cogeneration_plant.py +0 -27
  789. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/combined_cycle_plant.py +0 -25
  790. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conducting_equipment.py +0 -45
  791. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conductor.py +0 -24
  792. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load.py +0 -27
  793. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/conform_load_group.py +0 -25
  794. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node.py +0 -57
  795. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connectivity_node_container.py +0 -37
  796. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/connector.py +0 -15
  797. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control.py +0 -73
  798. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area.py +0 -74
  799. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/control_area_generating_unit.py +0 -35
  800. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/coordinate_system.py +0 -38
  801. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cs_converter.py +0 -141
  802. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_limit.py +0 -33
  803. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/current_transformer.py +0 -15
  804. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve.py +0 -63
  805. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/curve_data.py +0 -54
  806. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/cut.py +0 -36
  807. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_base_terminal.py +0 -37
  808. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_breaker.py +0 -15
  809. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_busbar.py +0 -15
  810. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_chopper.py +0 -15
  811. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_conducting_equipment.py +0 -34
  812. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_converter_unit.py +0 -36
  813. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_disconnector.py +0 -15
  814. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_equipment_container.py +0 -35
  815. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_ground.py +0 -33
  816. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line.py +0 -27
  817. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_line_segment.py +0 -51
  818. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_node.py +0 -47
  819. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_series_device.py +0 -33
  820. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_shunt.py +0 -33
  821. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_switch.py +0 -15
  822. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_terminal.py +0 -27
  823. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_island.py +0 -25
  824. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/dc_topological_node.py +0 -55
  825. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnecting_circuit_breaker.py +0 -15
  826. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/disconnector.py +0 -15
  827. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/earth_fault_compensator.py +0 -24
  828. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_area.py +0 -27
  829. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_connection.py +0 -15
  830. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_consumer.py +0 -81
  831. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_scheduling_type.py +0 -25
  832. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/energy_source.py +0 -144
  833. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment.py +0 -65
  834. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equipment_container.py +0 -25
  835. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_branch.py +0 -159
  836. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_equipment.py +0 -25
  837. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_injection.py +0 -160
  838. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_network.py +0 -25
  839. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/equivalent_shunt.py +0 -33
  840. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/external_network_injection.py +0 -177
  841. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fault_indicator.py +0 -15
  842. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fossil_fuel.py +0 -36
  843. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/full_model.py +0 -85
  844. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/fuse.py +0 -15
  845. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/generating_unit.py +0 -181
  846. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/geographical_region.py +0 -25
  847. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground.py +0 -15
  848. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ground_disconnector.py +0 -15
  849. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/grounding_impedance.py +0 -24
  850. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_generating_unit.py +0 -52
  851. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_power_plant.py +0 -46
  852. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/hydro_pump.py +0 -37
  853. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/identified_object.py +0 -61
  854. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/io_point.py +0 -15
  855. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/jumper.py +0 -15
  856. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/junction.py +0 -15
  857. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit.py +0 -15
  858. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/limit_set.py +0 -24
  859. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/line.py +0 -27
  860. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/linear_shunt_compensator.py +0 -51
  861. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_area.py +0 -27
  862. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_break_switch.py +0 -15
  863. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_group.py +0 -27
  864. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/load_response_characteristic.py +0 -138
  865. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/location.py +0 -47
  866. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement.py +0 -75
  867. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/measurement_value.py +0 -34
  868. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/mutual_coupling.py +0 -109
  869. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load.py +0 -27
  870. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/non_conform_load_group.py +0 -25
  871. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator.py +0 -25
  872. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nonlinear_shunt_compensator_point.py +0 -70
  873. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/nuclear_generating_unit.py +0 -15
  874. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit.py +0 -37
  875. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_set.py +0 -45
  876. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/operational_limit_type.py +0 -61
  877. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/petersen_coil.py +0 -78
  878. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer.py +0 -27
  879. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_asymmetrical.py +0 -24
  880. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_linear.py +0 -42
  881. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_non_linear.py +0 -42
  882. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_symmetrical.py +0 -15
  883. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table.py +0 -35
  884. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_table_point.py +0 -34
  885. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/phase_tap_changer_tabular.py +0 -25
  886. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/photo_voltaic_unit.py +0 -15
  887. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/position_point.py +0 -61
  888. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/post_line_sensor.py +0 -15
  889. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/potential_transformer.py +0 -15
  890. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_connection.py +0 -79
  891. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_unit.py +0 -43
  892. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_electronics_wind_unit.py +0 -15
  893. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_system_resource.py +0 -45
  894. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer.py +0 -81
  895. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/power_transformer_end.py +0 -133
  896. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/protected_switch.py +0 -15
  897. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer.py +0 -44
  898. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table.py +0 -35
  899. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ratio_tap_changer_table_point.py +0 -25
  900. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reactive_capability_curve.py +0 -35
  901. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regular_interval_schedule.py +0 -34
  902. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_cond_eq.py +0 -34
  903. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/regulating_control.py +0 -108
  904. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/reporting_group.py +0 -37
  905. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/rotating_machine.py +0 -82
  906. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/season_day_type_schedule.py +0 -15
  907. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sensor.py +0 -15
  908. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/series_compensator.py +0 -78
  909. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/service_location.py +0 -15
  910. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/shunt_compensator.py +0 -92
  911. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_generating_unit.py +0 -25
  912. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/solar_power_plant.py +0 -27
  913. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/static_var_compensator.py +0 -69
  914. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_geographical_region.py +0 -55
  915. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sub_load_area.py +0 -37
  916. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/substation.py +0 -47
  917. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/surge_arrester.py +0 -15
  918. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_injection.py +0 -45
  919. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_shunt_compensator_sections.py +0 -34
  920. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_status.py +0 -36
  921. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_switch.py +0 -36
  922. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_tap_step.py +0 -36
  923. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_voltage.py +0 -45
  924. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/switch.py +0 -77
  925. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/synchronous_machine.py +0 -215
  926. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer.py +0 -115
  927. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_control.py +0 -25
  928. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tap_changer_table_point.py +0 -70
  929. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/terminal.py +0 -137
  930. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/thermal_generating_unit.py +0 -55
  931. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/tie_flow.py +0 -46
  932. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_island.py +0 -35
  933. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/topological_node.py +0 -107
  934. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/transformer_end.py +0 -93
  935. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_level.py +0 -65
  936. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/voltage_limit.py +0 -33
  937. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_capability_curve.py +0 -25
  938. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/vs_converter.py +0 -144
  939. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wave_trap.py +0 -15
  940. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_generating_unit.py +0 -34
  941. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/wind_power_plant.py +0 -25
  942. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/work_location.py +0 -15
  943. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/cgmes_writer.py +0 -45
  944. gridcalengine-5.3.52/GridCalEngine/IO/cim/cgmes/gridcal_to_cgmes.py +0 -1954
  945. gridcalengine-5.3.52/GridCalEngine/IO/file_handler.py +0 -741
  946. gridcalengine-5.3.52/GridCalEngine/IO/file_system.py +0 -85
  947. gridcalengine-5.3.52/GridCalEngine/IO/gridcal/contingency_parser.py +0 -112
  948. gridcalengine-5.3.52/GridCalEngine/IO/gridcal/json_parser.py +0 -2167
  949. gridcalengine-5.3.52/GridCalEngine/IO/gridcal/pack_unpack.py +0 -1551
  950. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/bus.py +0 -13
  951. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/busbar_section.py +0 -13
  952. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/dangling_line.py +0 -29
  953. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/iidm_circuit.py +0 -32
  954. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/rte_object.py +0 -105
  955. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/substation.py +0 -19
  956. gridcalengine-5.3.52/GridCalEngine/IO/iidm/devices/voltage_level.py +0 -18
  957. gridcalengine-5.3.52/GridCalEngine/IO/iidm/iidm_parser.py +0 -165
  958. gridcalengine-5.3.52/GridCalEngine/IO/matpower/matpower_circuit.py +0 -156
  959. gridcalengine-5.3.52/GridCalEngine/IO/matpower/matpower_to_gridcal.py +0 -693
  960. gridcalengine-5.3.52/GridCalEngine/IO/others/__init__.py +0 -9
  961. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/area.py +0 -82
  962. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/branch.py +0 -559
  963. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/bus.py +0 -182
  964. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/fixed_shunt.py +0 -80
  965. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/impedance_correction_table.py +0 -99
  966. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/inter_area.py +0 -81
  967. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/load.py +0 -252
  968. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/node.py +0 -98
  969. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/owner.py +0 -58
  970. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/psse_object.py +0 -255
  971. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/substation.py +0 -94
  972. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/switched_shunt.py +0 -296
  973. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/system_switching_device.py +0 -144
  974. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/two_terminal_dc_line.py +0 -493
  975. gridcalengine-5.3.52/GridCalEngine/IO/raw/devices/zone.py +0 -58
  976. gridcalengine-5.3.52/GridCalEngine/IO/raw/gridcal_to_raw.py +0 -643
  977. gridcalengine-5.3.52/GridCalEngine/Simulations/ATC/available_transfer_capacity_driver.py +0 -534
  978. gridcalengine-5.3.52/GridCalEngine/Simulations/ATC/available_transfer_capacity_ts_driver.py +0 -353
  979. gridcalengine-5.3.52/GridCalEngine/Simulations/Clustering/clustering.py +0 -144
  980. gridcalengine-5.3.52/GridCalEngine/Simulations/Clustering/clustering_driver.py +0 -60
  981. gridcalengine-5.3.52/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/adequacy_problem.py +0 -279
  982. gridcalengine-5.3.52/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_driver.py +0 -329
  983. gridcalengine-5.3.52/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_results.py +0 -371
  984. gridcalengine-5.3.52/GridCalEngine/Simulations/LinearFactors/linear_analysis.py +0 -876
  985. gridcalengine-5.3.52/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_driver.py +0 -99
  986. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_driver.py +0 -128
  987. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_opf.py +0 -2036
  988. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_options.py +0 -86
  989. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_results.py +0 -410
  990. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_ts_driver.py +0 -145
  991. gridcalengine-5.3.52/GridCalEngine/Simulations/NTC/ntc_ts_results.py +0 -372
  992. gridcalengine-5.3.52/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_ts_driver.py +0 -458
  993. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/Formulations/ac_opf_problem.py +0 -1878
  994. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf.py +0 -1135
  995. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf_new.py +0 -135
  996. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/linear_opf_ts.py +0 -2153
  997. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/opf_driver.py +0 -314
  998. gridcalengine-5.3.52/GridCalEngine/Simulations/OPF/opf_ts_driver.py +0 -536
  999. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/Formulations/pf_basic_formulation.py +0 -315
  1000. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/Formulations/pf_generalized_formulation.py +0 -1951
  1001. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/NumericalMethods/common_functions.py +0 -303
  1002. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/NumericalMethods/newton_raphson_fx.py +0 -132
  1003. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/power_flow_options.py +0 -115
  1004. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/power_flow_results.py +0 -985
  1005. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/power_flow_ts_driver.py +0 -303
  1006. gridcalengine-5.3.52/GridCalEngine/Simulations/PowerFlow/power_flow_worker.py +0 -1011
  1007. gridcalengine-5.3.52/GridCalEngine/Simulations/Reliability/reliability_iterable.py +0 -86
  1008. gridcalengine-5.3.52/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit.py +0 -123
  1009. gridcalengine-5.3.52/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_driver.py +0 -295
  1010. gridcalengine-5.3.52/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_options.py +0 -59
  1011. gridcalengine-5.3.52/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_results.py +0 -782
  1012. gridcalengine-5.3.52/GridCalEngine/Simulations/StateEstimation/state_estimation.py +0 -461
  1013. gridcalengine-5.3.52/GridCalEngine/Simulations/StateEstimation/state_stimation_driver.py +0 -165
  1014. gridcalengine-5.3.52/GridCalEngine/Simulations/__init__.py +0 -26
  1015. gridcalengine-5.3.52/GridCalEngine/Simulations/results_template.py +0 -500
  1016. gridcalengine-5.3.52/GridCalEngine/Topology/__init__.py +0 -6
  1017. gridcalengine-5.3.52/GridCalEngine/Topology/admittance_matrices.py +0 -641
  1018. gridcalengine-5.3.52/GridCalEngine/Topology/topology.py +0 -484
  1019. gridcalengine-5.3.52/GridCalEngine/Utils/Filtering/filtering.py +0 -414
  1020. gridcalengine-5.3.52/GridCalEngine/Utils/Filtering/objects_filtering.py +0 -145
  1021. gridcalengine-5.3.52/GridCalEngine/Utils/Filtering/results_table_filtering.py +0 -270
  1022. gridcalengine-5.3.52/GridCalEngine/Utils/Filtering/timeseries_filtering.py +0 -171
  1023. gridcalengine-5.3.52/GridCalEngine/Utils/MIP/SimpleMip/lpmodel.py +0 -663
  1024. gridcalengine-5.3.52/GridCalEngine/Utils/MIP/SimpleMip/lpobjects.py +0 -392
  1025. gridcalengine-5.3.52/GridCalEngine/Utils/MIP/pulp_interface.py +0 -385
  1026. gridcalengine-5.3.52/GridCalEngine/Utils/MIP/selected_interface.py +0 -73
  1027. gridcalengine-5.3.52/GridCalEngine/Utils/Sparse/csc.py +0 -533
  1028. gridcalengine-5.3.52/GridCalEngine/Utils/Sparse/sparse_array.py +0 -524
  1029. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/gslv/gslv_activation.py +0 -107
  1030. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/apis/cplex_cmd.py +0 -301
  1031. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_cmd.py +0 -281
  1032. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/apis/highs_py.py +0 -323
  1033. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver.py +0 -294
  1034. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/apis/lp_solver_cmd.py +0 -290
  1035. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/model/lp_objects.py +0 -1320
  1036. gridcalengine-5.3.52/GridCalEngine/Utils/ThirdParty/pulp/sparse.py +0 -88
  1037. gridcalengine-5.3.52/GridCalEngine/__init__.py +0 -382
  1038. gridcalengine-5.3.52/GridCalEngine/__version__.py +0 -48
  1039. gridcalengine-5.3.52/GridCalEngine/basic_structures.py +0 -914
  1040. gridcalengine-5.3.52/GridCalEngine/enumerations.py +0 -1871
  1041. gridcalengine-5.3.52/PKG-INFO +0 -29
  1042. gridcalengine-5.3.52/setup.py +0 -114
  1043. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Compilers/__init__.py +0 -0
  1044. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Compilers/circuit_to_bentayga.py +0 -0
  1045. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Compilers/circuit_to_newton_pa.py +0 -0
  1046. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Compilers/circuit_to_optimods.py +0 -0
  1047. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Compilers/circuit_to_pgm.py +0 -0
  1048. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/battery_data.py +0 -0
  1049. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/fluid_node_data.py +0 -0
  1050. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/fluid_p2x_data.py +0 -0
  1051. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/fluid_path_data.py +0 -0
  1052. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/fluid_pump_data.py +0 -0
  1053. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/fluid_turbine_data.py +0 -0
  1054. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/hvdc_data.py +0 -0
  1055. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/DataStructures/vsc_data.py +0 -0
  1056. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Aggregation/__init__.py +0 -0
  1057. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Aggregation/country.py +0 -0
  1058. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Aggregation/facility.py +0 -0
  1059. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Aggregation/modelling_authority.py +0 -0
  1060. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Associations/__init__.py +0 -0
  1061. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Diagrams/__init__.py +0 -0
  1062. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Diagrams/map_diagram.py +0 -0
  1063. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Diagrams/map_location.py +0 -0
  1064. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Diagrams/palettes.py +0 -0
  1065. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Diagrams/schematic_diagram.py +0 -0
  1066. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Fluid/__init__.py +0 -0
  1067. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Fluid/fluid_p2x.py +0 -0
  1068. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Fluid/fluid_pump.py +0 -0
  1069. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Fluid/fluid_turbine.py +0 -0
  1070. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Injections/__init__.py +0 -0
  1071. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/Parents/__init__.py +0 -0
  1072. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Devices/comparison.py +0 -0
  1073. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/base/__init__.py +0 -0
  1074. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/base/base_circuit.py +0 -0
  1075. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/base/base_device.py +0 -0
  1076. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/base/base_property.py +0 -0
  1077. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/base/units.py +0 -0
  1078. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/__init__.py +0 -0
  1079. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_assets/__init__.py +0 -0
  1080. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/__init__.py +0 -0
  1081. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/__init__.py +0 -0
  1082. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v2_4_15/devices/ac_line_segment.py +0 -0
  1083. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/__init__.py +0 -0
  1084. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/__init__.py +0 -0
  1085. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/ac_line_segment.py +0 -0
  1086. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/acdc_converter.py +0 -0
  1087. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/cgmes_v3_0_0/devices/sv_power_flow.py +0 -0
  1088. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/rdfs_infos.py +0 -0
  1089. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cgmes/rdfs_serializations.py +0 -0
  1090. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/__init__.py +0 -0
  1091. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/cim_circuit.py +0 -0
  1092. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/cim_data_parser.py +0 -0
  1093. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/cim_devices.py +0 -0
  1094. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/cim_enums.py +0 -0
  1095. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/cim16/cim_parser.py +0 -0
  1096. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/__init__.py +0 -0
  1097. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/base_db.py +0 -0
  1098. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/cgmes_lookup_db.py +0 -0
  1099. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/db_handler.py +0 -0
  1100. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/file_system.py +0 -0
  1101. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/cim/db/psse_lookup_db.py +0 -0
  1102. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/dgs/__init__.py +0 -0
  1103. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/dgs/dgs_parser.py +0 -0
  1104. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/epc/__init__.py +0 -0
  1105. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/epc/epc_parser.py +0 -0
  1106. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/__init__.py +0 -0
  1107. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/catalogue.py +0 -0
  1108. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/excel_interface.py +0 -0
  1109. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/generic_io_functions.py +0 -0
  1110. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/h5_interface.py +0 -0
  1111. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/remote.py +0 -0
  1112. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/results_export.py +0 -0
  1113. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/sqlite_interface.py +0 -0
  1114. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/gridcal/zip_interface.py +0 -0
  1115. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/__init__.py +0 -0
  1116. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/__init__.py +0 -0
  1117. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/discrete_measurement.py +0 -0
  1118. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/generator.py +0 -0
  1119. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/identifiable_short_circuit.py +0 -0
  1120. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/line.py +0 -0
  1121. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/load.py +0 -0
  1122. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/node_breaker_topology.py +0 -0
  1123. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/observability_area.py +0 -0
  1124. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/operating_status.py +0 -0
  1125. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/shunt.py +0 -0
  1126. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/standby_automation.py +0 -0
  1127. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/startup.py +0 -0
  1128. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/static_var_compensator.py +0 -0
  1129. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/switch.py +0 -0
  1130. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/iidm/devices/two_winding_transformer.py +0 -0
  1131. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/__init__.py +0 -0
  1132. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/area.py +0 -0
  1133. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/branch.py +0 -0
  1134. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/branch_dc.py +0 -0
  1135. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/bus.py +0 -0
  1136. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/bus_dc.py +0 -0
  1137. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/converter_dc.py +0 -0
  1138. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/generator.py +0 -0
  1139. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/legacy/__init__.py +0 -0
  1140. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/legacy/matpower_branch_definitions.py +0 -0
  1141. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/legacy/matpower_bus_definitions.py +0 -0
  1142. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/legacy/matpower_gen_definitions.py +0 -0
  1143. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/legacy/matpower_parser.py +0 -0
  1144. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/matpower/matpower_utils.py +0 -0
  1145. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/others/dpx_parser.py +0 -0
  1146. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/others/ipa_parser.py +0 -0
  1147. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/others/pandapower_parser.py +0 -0
  1148. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/others/plx_parser.py +0 -0
  1149. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/others/pypsa_parser.py +0 -0
  1150. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/__init__.py +0 -0
  1151. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/__init__.py +0 -0
  1152. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/facts.py +0 -0
  1153. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/generator.py +0 -0
  1154. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/gne_device.py +0 -0
  1155. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/induction_machine.py +0 -0
  1156. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/multi_section_line.py +0 -0
  1157. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/psse_circuit.py +0 -0
  1158. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/psse_property.py +0 -0
  1159. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/transformer.py +0 -0
  1160. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/devices/vsc_dc_line.py +0 -0
  1161. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/raw_functions.py +0 -0
  1162. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/raw_parser_writer.py +0 -0
  1163. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/raw_to_gridcal.py +0 -0
  1164. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/raw_writer_comment_map.py +0 -0
  1165. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/raw/rawx_parser_writer.py +0 -0
  1166. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/__init__.py +0 -0
  1167. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/__init__.py +0 -0
  1168. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_base.py +0 -0
  1169. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_circuit.py +0 -0
  1170. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_comment.py +0 -0
  1171. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_exchange_power.py +0 -0
  1172. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_line.py +0 -0
  1173. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_node.py +0 -0
  1174. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_transformer.py +0 -0
  1175. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_transformer_regulation.py +0 -0
  1176. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/devices/ucte_transformer_tap_table.py +0 -0
  1177. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/IO/ucte/ucte_to_gridcal.py +0 -0
  1178. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/LICENSE.txt +0 -0
  1179. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ATC/__init__.py +0 -0
  1180. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ATC/available_transfer_capacity_options.py +0 -0
  1181. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Clustering/__init__.py +0 -0
  1182. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Clustering/clustering_options.py +0 -0
  1183. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Clustering/clustering_results.py +0 -0
  1184. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/__init__.py +0 -0
  1185. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/helm_contingencies.py +0 -0
  1186. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/helm_contingency_analysis.py +0 -0
  1187. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/linear_contingency_analysis.py +0 -0
  1188. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/nonlinear_contingency_analysis.py +0 -0
  1189. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/optimal_linear_contingency_analysis.py +0 -0
  1190. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/Methods/srap.py +0 -0
  1191. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/__init__.py +0 -0
  1192. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingencies_report.py +0 -0
  1193. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_driver.py +0 -0
  1194. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_options.py +0 -0
  1195. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_results.py +0 -0
  1196. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_driver.py +0 -0
  1197. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_analysis_ts_results.py +0 -0
  1198. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContingencyAnalysis/contingency_plan.py +0 -0
  1199. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/__init__.py +0 -0
  1200. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow.py +0 -0
  1201. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_driver.py +0 -0
  1202. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_input.py +0 -0
  1203. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_options.py +0 -0
  1204. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ContinuationPowerFlow/continuation_power_flow_results.py +0 -0
  1205. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Derivatives/__init__.py +0 -0
  1206. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Derivatives/ac_jacobian.py +0 -0
  1207. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Derivatives/csc_derivatives.py +0 -0
  1208. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Derivatives/csr_derivatives.py +0 -0
  1209. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Derivatives/matpower_derivatives.py +0 -0
  1210. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Dynamics/__init__.py +0 -0
  1211. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Dynamics/dynamic_modules.py +0 -0
  1212. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Dynamics/transient_stability_driver.py +0 -0
  1213. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InputsAnalysis/__init__.py +0 -0
  1214. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InputsAnalysis/inputs_analysis_driver.py +0 -0
  1215. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/NSGA_3.py +0 -0
  1216. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/__init__.py +0 -0
  1217. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/mixed_variable_NSGA_2.py +0 -0
  1218. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/random_eval.py +0 -0
  1219. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Methods/stop_crits.py +0 -0
  1220. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/__init__.py +0 -0
  1221. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/black_box_problem_template.py +0 -0
  1222. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/power_flow_problem.py +0 -0
  1223. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/Problems/power_flow_ts_problem.py +0 -0
  1224. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/__init__.py +0 -0
  1225. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/InvestmentsEvaluation/investments_evaluation_options.py +0 -0
  1226. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/LinearFactors/__init__.py +0 -0
  1227. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/LinearFactors/linear_analysis_driver.py +0 -0
  1228. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/LinearFactors/linear_analysis_options.py +0 -0
  1229. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/LinearFactors/linear_analysis_results.py +0 -0
  1230. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/LinearFactors/linear_analysis_ts_results.py +0 -0
  1231. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/NTC/__init__.py +0 -0
  1232. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/NodalCapacity/__init__.py +0 -0
  1233. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_options.py +0 -0
  1234. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/NodalCapacity/nodal_capacity_ts_results.py +0 -0
  1235. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/Formulations/__init__.py +0 -0
  1236. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/NumericalMethods/__init__.py +0 -0
  1237. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/NumericalMethods/ac_opf_derivatives.py +0 -0
  1238. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/NumericalMethods/newton_raphson_ips_fx.py +0 -0
  1239. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/__init__.py +0 -0
  1240. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/opf_options.py +0 -0
  1241. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/opf_results.py +0 -0
  1242. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/opf_ts_results.py +0 -0
  1243. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/OPF/simple_dispatch_ts.py +0 -0
  1244. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/Formulations/__init__.py +0 -0
  1245. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_advanced_formulation.py +0 -0
  1246. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/Formulations/pf_formulation_template.py +0 -0
  1247. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/__init__.py +0 -0
  1248. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/discrete_controls.py +0 -0
  1249. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/fast_decoupled.py +0 -0
  1250. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/gauss_power_flow.py +0 -0
  1251. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/helm_power_flow.py +0 -0
  1252. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/iwamoto_newton_raphson.py +0 -0
  1253. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/levenberg_marquadt_fx.py +0 -0
  1254. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/linearized_power_flow.py +0 -0
  1255. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/NumericalMethods/powell_fx.py +0 -0
  1256. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/__init__.py +0 -0
  1257. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/grid_analysis.py +0 -0
  1258. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/power_flow_driver.py +0 -0
  1259. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_input.py +0 -0
  1260. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/PowerFlow/power_flow_ts_results.py +0 -0
  1261. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/__init__.py +0 -0
  1262. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/blackout_driver.py +0 -0
  1263. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/reliability.py +0 -0
  1264. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/reliability2.py +0 -0
  1265. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/reliability_driver.py +0 -0
  1266. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Reliability/reliability_results.py +0 -0
  1267. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/ShortCircuitStudies/__init__.py +0 -0
  1268. /gridcalengine-5.3.52/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_worker.py → /gridcalengine-5.4.0b1/GridCalEngine/Simulations/ShortCircuitStudies/short_circuit_worker_3ph.py +0 -0
  1269. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/SigmaAnalysis/__init__.py +0 -0
  1270. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/SigmaAnalysis/sigma_analysis_driver.py +0 -0
  1271. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/StateEstimation/__init__.py +0 -0
  1272. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/StateEstimation/state_estimation_inputs.py +0 -0
  1273. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Stochastic/__init__.py +0 -0
  1274. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Stochastic/latin_hypercube_sampling.py +0 -0
  1275. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_driver.py +0 -0
  1276. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_input.py +0 -0
  1277. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Stochastic/stochastic_power_flow_results.py +0 -0
  1278. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Topology/__init__.py +0 -0
  1279. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Topology/node_groups_driver.py +0 -0
  1280. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/Topology/topology_reduction_driver.py +0 -0
  1281. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/driver_handler.py +0 -0
  1282. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/driver_template.py +0 -0
  1283. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/options_template.py +0 -0
  1284. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/results_table.py +0 -0
  1285. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Simulations/types.py +0 -0
  1286. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Topology/detect_substations.py +0 -0
  1287. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Topology/simulation_indices.py +0 -0
  1288. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/Filtering/__init__.py +0 -0
  1289. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/MIP/SimpleMip/__init__.py +0 -0
  1290. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/MIP/SimpleMip/highs.py +0 -0
  1291. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/MIP/__init__.py +0 -0
  1292. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/MVRSM_mo_pareto.py +0 -0
  1293. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/MVRSM_mo_scaled.py +0 -0
  1294. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/MVRSM_original.py +0 -0
  1295. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/__init__.py +0 -0
  1296. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/autodiff.py +0 -0
  1297. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/common.py +0 -0
  1298. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/ips.py +0 -0
  1299. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/iwamoto.py +0 -0
  1300. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/levenberg_marquadt.py +0 -0
  1301. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/newton_raphson.py +0 -0
  1302. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/newton_raphson_ode.py +0 -0
  1303. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/non_dominated_sorting.py +0 -0
  1304. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/nsga3.py +0 -0
  1305. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/numerical_stability.py +0 -0
  1306. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/powell.py +0 -0
  1307. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/sparse_solve.py +0 -0
  1308. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/NumericalMethods/weldorf_online_stddev.py +0 -0
  1309. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/Sparse/__init__.py +0 -0
  1310. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/Sparse/csc2.py +0 -0
  1311. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/Sparse/csc_numba.py +0 -0
  1312. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/Sparse/utils.py +0 -0
  1313. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/SyntheticNetworks/__init__.py +0 -0
  1314. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/SyntheticNetworks/rpgm_algo.py +0 -0
  1315. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/__init__.py +0 -0
  1316. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/gslv/__init__.py +0 -0
  1317. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/__init__.py +0 -0
  1318. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/__init__.py +0 -0
  1319. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/copt_api.py +0 -0
  1320. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/cplex_py.py +0 -0
  1321. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/gurobi_cmd.py +0 -0
  1322. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/gurobi_py.py +0 -0
  1323. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/scip_api.py +0 -0
  1324. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/apis/xpress_api.py +0 -0
  1325. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/constants.py +0 -0
  1326. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/model/__init__.py +0 -0
  1327. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/model/lp_problem.py +0 -0
  1328. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/mps_lp.py +0 -0
  1329. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/paths.py +0 -0
  1330. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/pulp.py +0 -0
  1331. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/ThirdParty/pulp/utilities.py +0 -0
  1332. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/__init__.py +0 -0
  1333. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/progress_bar.py +0 -0
  1334. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/scores.py +0 -0
  1335. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/Utils/zip_file_mgmt.py +0 -0
  1336. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/api.py +0 -0
  1337. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/GridCalEngine/data_logger.py +0 -0
  1338. {gridcalengine-5.3.52 → gridcalengine-5.4.0b1}/setup.cfg +0 -0
@@ -0,0 +1,2545 @@
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 numpy as np
7
+ from typing import Dict, Union, TYPE_CHECKING
8
+
9
+ from GridCalEngine.basic_structures import Logger
10
+ import GridCalEngine.Devices as dev
11
+ from GridCalEngine.Devices.Substation.bus import Bus
12
+ from GridCalEngine.Devices.Aggregation.area import Area
13
+ from GridCalEngine.enumerations import (BusMode, BranchImpedanceMode, ExternalGridMode, DeviceType,
14
+ TapModuleControl, TapPhaseControl, HvdcControlType, ConverterControlType,
15
+ ShuntConnectionType)
16
+ from GridCalEngine.basic_structures import BoolVec, IntVec
17
+ from GridCalEngine.Devices.types import BRANCH_TYPES
18
+ from GridCalEngine.DataStructures.battery_data import BatteryData
19
+ from GridCalEngine.DataStructures.passive_branch_data import PassiveBranchData
20
+ from GridCalEngine.DataStructures.active_branch_data import ActiveBranchData
21
+ from GridCalEngine.DataStructures.bus_data import BusData
22
+ from GridCalEngine.DataStructures.generator_data import GeneratorData
23
+ from GridCalEngine.DataStructures.hvdc_data import HvdcData
24
+ from GridCalEngine.DataStructures.vsc_data import VscData
25
+ from GridCalEngine.DataStructures.load_data import LoadData
26
+ from GridCalEngine.DataStructures.shunt_data import ShuntData
27
+ from GridCalEngine.DataStructures.fluid_node_data import FluidNodeData
28
+ from GridCalEngine.DataStructures.fluid_turbine_data import FluidTurbineData
29
+ from GridCalEngine.DataStructures.fluid_pump_data import FluidPumpData
30
+ from GridCalEngine.DataStructures.fluid_p2x_data import FluidP2XData
31
+ from GridCalEngine.DataStructures.fluid_path_data import FluidPathData
32
+ from GridCalEngine.DataStructures.numerical_circuit import NumericalCircuit
33
+
34
+ if TYPE_CHECKING: # Only imports the below statements during type checking
35
+ from GridCalEngine.Devices.multi_circuit import MultiCircuit
36
+ from GridCalEngine.Simulations.OPF.opf_results import OptimalPowerFlowResults
37
+ from GridCalEngine.Simulations.OPF.opf_ts_results import OptimalPowerFlowTimeSeriesResults
38
+ from GridCalEngine.Simulations.NTC.ntc_results import OptimalNetTransferCapacityResults
39
+ from GridCalEngine.Simulations.NTC.ntc_ts_results import OptimalNetTransferCapacityTimeSeriesResults
40
+ from GridCalEngine.Simulations import OptimalNetTransferCapacityResults
41
+
42
+ VALID_OPF_RESULTS = Union[
43
+ OptimalPowerFlowResults,
44
+ OptimalPowerFlowTimeSeriesResults,
45
+ OptimalNetTransferCapacityResults,
46
+ OptimalNetTransferCapacityTimeSeriesResults
47
+ ]
48
+
49
+
50
+ def delta2StarAdmittance(Yab: complex,
51
+ Ybc: complex,
52
+ Yca: complex):
53
+ """
54
+ Converts Delta to Star in admittances
55
+ :param Yab:
56
+ :param Ybc:
57
+ :param Yca:
58
+ :return: Ya, Yb, Yc
59
+ """
60
+ return np.array([
61
+ (Yab * Ybc + Ybc * Yca + Yca * Yab) / (Ybc + 1e-20),
62
+ (Yab * Ybc + Ybc * Yca + Yca * Yab) / (Yca + 1e-20),
63
+ (Yab * Ybc + Ybc * Yca + Yca * Yab) / (Yab + 1e-20)
64
+ ])
65
+
66
+
67
+ # def delta2StarCurrent(Iab: complex,
68
+ # Ibc: complex,
69
+ # Ica: complex):
70
+ # """
71
+ # Converts delta to star in currents
72
+ # :param Iab:
73
+ # :param Ibc:
74
+ # :param Ica:
75
+ # :return: Ia, Ib, Ic
76
+ # """
77
+ # return np.array([
78
+ # Iab - Ica,
79
+ # Ibc - Iab,
80
+ # Ica - Ibc
81
+ # ])
82
+
83
+
84
+ def set_bus_control_voltage(i: int,
85
+ j: int,
86
+ remote_control: bool,
87
+ bus_name: str,
88
+ bus_voltage_used: BoolVec,
89
+ bus_data: BusData,
90
+ candidate_Vm: float,
91
+ use_stored_guess: bool,
92
+ logger: Logger) -> None:
93
+ """
94
+ Set the bus control voltage
95
+ :param i: Bus index
96
+ :param j: Remote Bus index
97
+ :param remote_control: Using remote control?
98
+ :param bus_name: Bus name
99
+ :param bus_voltage_used: Array of flags indicating if a bus voltage has been modified before
100
+ :param bus_data: BusData
101
+ :param candidate_Vm: Voltage set point that you want to set
102
+ :param use_stored_guess: Use the stored seed values?
103
+ :param logger: Logger
104
+ """
105
+ if bus_data.bus_types[i] != BusMode.Slack_tpe.value: # if it is not Slack
106
+ if remote_control and j > -1 and j != i:
107
+ # delete voltage control
108
+ # bus_data.bus_types[j] = BusMode.PQV_tpe.value # remote bus to PQV type
109
+ bus_data.set_bus_mode(j, BusMode.PQV_tpe)
110
+ # bus_data.bus_types[i] = BusMode.P_tpe.value # local bus to P type
111
+ bus_data.set_bus_mode(i, BusMode.P_tpe)
112
+ else:
113
+ # local voltage control
114
+ # bus_data.bus_types[i] = BusMode.PV_tpe.value # set as PV
115
+ bus_data.set_bus_mode(i, BusMode.PV_tpe)
116
+
117
+ if not use_stored_guess:
118
+ if not bus_voltage_used[i]:
119
+ if remote_control and j > -1 and j != i:
120
+ # initialize the remote bus voltage to the control value
121
+ bus_data.Vbus[j] = complex(candidate_Vm, 0)
122
+ bus_voltage_used[j] = True
123
+ else:
124
+ # initialize the local bus voltage to the control value
125
+ bus_data.Vbus[i] = complex(candidate_Vm, 0)
126
+ bus_voltage_used[i] = True
127
+
128
+ elif candidate_Vm != bus_data.Vbus[i]:
129
+ logger.add_error(msg='Different control voltage set points',
130
+ device=bus_name,
131
+ value=candidate_Vm,
132
+ expected_value=bus_data.Vbus[i])
133
+
134
+
135
+ def set_bus_control_voltage_vsc(i: int,
136
+ j: int,
137
+ remote_control: bool,
138
+ bus_name: str,
139
+ bus_voltage_used: BoolVec,
140
+ bus_data: BusData,
141
+ candidate_Vm: float,
142
+ use_stored_guess: bool,
143
+ logger: Logger) -> None:
144
+ """
145
+ Set the bus control voltage
146
+ :param i: Bus index
147
+ :param j: Remote Bus index
148
+ :param remote_control: Using remote control?
149
+ :param bus_name: Bus name
150
+ :param bus_voltage_used: Array of flags indicating if a bus voltage has been modified before
151
+ :param bus_data: BusData
152
+ :param candidate_Vm: Voltage set point that you want to set
153
+ :param use_stored_guess: Use the stored seed values?
154
+ :param logger: Logger
155
+ """
156
+ if bus_data.bus_types[i] != BusMode.Slack_tpe.value: # if it is not Slack
157
+ if remote_control and j > -1 and j != i:
158
+ # delete voltage control
159
+ # bus_data.bus_types[j] = BusMode.PQV_tpe.value # remote bus to PQV type
160
+ # bus_data.set_bus_mode(j, BusMode.PQV_tpe)
161
+ bus_data.is_p_controlled[j] = True
162
+ bus_data.is_q_controlled[j] = True
163
+ bus_data.is_vm_controlled[j] = True
164
+
165
+ # bus_data.bus_types[i] = BusMode.P_tpe.value # local bus to P type
166
+ # bus_data.set_bus_mode(i, BusMode.P_tpe)
167
+ bus_data.is_p_controlled[i] = True
168
+ else:
169
+ # local voltage control
170
+ # bus_data.bus_types[i] = BusMode.PV_tpe.value # set as PV
171
+ # bus_data.set_bus_mode(i, BusMode.PV_tpe)
172
+ bus_data.is_p_controlled[i] = True
173
+ bus_data.is_vm_controlled[i] = True
174
+
175
+ if not use_stored_guess:
176
+ if not bus_voltage_used[i]:
177
+ if remote_control and j > -1 and j != i:
178
+ # initialize the remote bus voltage to the control value
179
+ bus_data.Vbus[j] = complex(candidate_Vm, 0)
180
+ bus_voltage_used[j] = True
181
+ else:
182
+ # initialize the local bus voltage to the control value
183
+ bus_data.Vbus[i] = complex(candidate_Vm, 0)
184
+ bus_voltage_used[i] = True
185
+
186
+ elif candidate_Vm != bus_data.Vbus[i]:
187
+ logger.add_error(msg='Different control voltage set points',
188
+ device=bus_name,
189
+ value=candidate_Vm,
190
+ expected_value=bus_data.Vbus[i])
191
+
192
+
193
+ def set_bus_control_voltage_hvdc(i: int,
194
+ j: int,
195
+ remote_control: bool,
196
+ bus_name: str,
197
+ bus_voltage_used: BoolVec,
198
+ bus_data: BusData,
199
+ candidate_Vm: float,
200
+ use_stored_guess: bool,
201
+ logger: Logger) -> None:
202
+ """
203
+ Set the bus control voltage
204
+ :param i: Bus index
205
+ :param j: Remote Bus index
206
+ :param remote_control: Using remote control?
207
+ :param bus_name: Bus name
208
+ :param bus_voltage_used: Array of flags indicating if a bus voltage has been modified before
209
+ :param bus_data: BusData
210
+ :param candidate_Vm: Voltage set point that you want to set
211
+ :param use_stored_guess: Use the stored seed values?
212
+ :param logger: Logger
213
+ """
214
+ if bus_data.bus_types[i] != BusMode.Slack_tpe.value: # if it is not Slack
215
+ # local voltage control
216
+ bus_data.bus_types[i] = BusMode.PV_tpe.value # set as PV
217
+ # bus_data.set_bus_mode(i, BusMode.PV_tpe)
218
+ bus_data.is_p_controlled[i] = True
219
+ bus_data.is_vm_controlled[i] = True
220
+ bus_data.is_q_controlled[i] = True
221
+
222
+ if not use_stored_guess:
223
+ if not bus_voltage_used[i]:
224
+ if remote_control and j > -1 and j != i:
225
+ # initialize the remote bus voltage to the control value
226
+ bus_data.Vbus[j] = complex(candidate_Vm, 0)
227
+ bus_voltage_used[j] = True
228
+ else:
229
+ # initialize the local bus voltage to the control value
230
+ bus_data.Vbus[i] = complex(candidate_Vm, 0)
231
+ bus_voltage_used[i] = True
232
+
233
+ elif candidate_Vm != bus_data.Vbus[i]:
234
+ logger.add_error(msg='Different control voltage set points',
235
+ device=bus_name,
236
+ value=candidate_Vm,
237
+ expected_value=bus_data.Vbus[i])
238
+
239
+
240
+ def get_bus_data(bus_data: BusData,
241
+ circuit: MultiCircuit,
242
+ areas_dict: Dict[Area, int],
243
+ t_idx: int = -1,
244
+ time_series=False,
245
+ use_stored_guess=False,
246
+ fill_three_phase: bool = False) -> None:
247
+ """
248
+
249
+ :param bus_data: BusData
250
+ :param circuit:
251
+ :param areas_dict:
252
+ :param t_idx:
253
+ :param time_series:
254
+ :param use_stored_guess:
255
+ :return:
256
+ """
257
+
258
+ substation_dict = {sub: i for i, sub in enumerate(circuit.substations)}
259
+
260
+ for i, bus in enumerate(circuit.buses):
261
+
262
+ # bus parameters
263
+ bus_data.original_idx[i] = i
264
+ bus_data.names[i] = bus.name
265
+ bus_data.idtag[i] = bus.idtag
266
+ bus_data.Vnom[i] = bus.Vnom
267
+ bus_data.cost_v[i] = bus.Vm_cost
268
+ bus_data.Vbus[i] = bus.get_voltage_guess(use_stored_guess=use_stored_guess)
269
+ bus_data.is_dc[i] = bus.is_dc
270
+
271
+ bus_data.angle_min[i] = bus.angle_min
272
+ bus_data.angle_max[i] = bus.angle_max
273
+
274
+ if bus.is_slack:
275
+ # bus_data.bus_types[i] = BusMode.Slack_tpe.value # VD
276
+ bus_data.set_bus_mode(i, BusMode.Slack_tpe)
277
+
278
+ else:
279
+ # PQ by default, later it is modified by generators and batteries
280
+ # bus_data.bus_types[i] = BusMode.PQ_tpe.value
281
+ bus_data.set_bus_mode(i, BusMode.PQ_tpe)
282
+
283
+ bus_data.substations[i] = substation_dict.get(bus.substation, 0)
284
+
285
+ bus_data.areas[i] = areas_dict.get(bus.area, 0)
286
+
287
+ if time_series:
288
+ bus_data.active[i] = bus.active_prof[t_idx]
289
+ bus_data.Vmin[i] = bus.Vmin_prof[t_idx]
290
+ bus_data.Vmax[i] = bus.Vmax_prof[t_idx]
291
+ else:
292
+ bus_data.active[i] = bus.active
293
+ bus_data.Vmin[i] = bus.Vmin
294
+ bus_data.Vmax[i] = bus.Vmax
295
+
296
+ return None
297
+
298
+
299
+ def get_load_data(data: LoadData,
300
+ circuit: MultiCircuit,
301
+ bus_dict: Dict[Bus, int],
302
+ bus_voltage_used: BoolVec,
303
+ bus_data: BusData,
304
+ logger: Logger,
305
+ t_idx=-1,
306
+ opf_results: Union[OptimalPowerFlowResults, None] = None,
307
+ time_series=False,
308
+ use_stored_guess=False,
309
+ fill_three_phase: bool = False) -> LoadData:
310
+ """
311
+
312
+ :param data:
313
+ :param circuit:
314
+ :param bus_dict:
315
+ :param bus_voltage_used:
316
+ :param bus_data:
317
+ :param logger:
318
+ :param t_idx:
319
+ :param opf_results:
320
+ :param time_series:
321
+ :param use_stored_guess:
322
+ :param fill_three_phase: Fill the tree phase info?
323
+ :return:
324
+ """
325
+ idx3 = np.array([0, 1, 2])
326
+ ii = 0
327
+ for elm in circuit.get_loads():
328
+
329
+ if elm.bus is None:
330
+ data.bus_idx[ii] = -1
331
+ data.active[ii] = False
332
+ else:
333
+ i = bus_dict[elm.bus]
334
+
335
+ data.names[ii] = elm.name
336
+ data.idtag[ii] = elm.idtag
337
+ data.bus_idx[ii] = i
338
+ data.original_idx[ii] = ii
339
+ data.mttf[ii] = elm.mttf
340
+ data.mttr[ii] = elm.mttr
341
+ data.scalable[ii] = elm.scalable
342
+
343
+ if time_series:
344
+ if opf_results is not None:
345
+ data.S[ii] = complex(elm.P_prof[t_idx], elm.Q_prof[t_idx]) - opf_results.load_shedding[t_idx, ii]
346
+ else:
347
+ data.S[ii] = complex(elm.P_prof[t_idx], elm.Q_prof[t_idx])
348
+
349
+ if fill_three_phase:
350
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
351
+ data.S3_star[3 * ii + 0] = complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
352
+ data.S3_star[3 * ii + 1] = complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
353
+ data.S3_star[3 * ii + 2] = complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
354
+
355
+ data.I3_star[3 * ii + 0] = complex(elm.Ir1_prof[t_idx], elm.Ii1_prof[t_idx])
356
+ data.I3_star[3 * ii + 1] = complex(elm.Ir2_prof[t_idx], elm.Ii2_prof[t_idx])
357
+ data.I3_star[3 * ii + 2] = complex(elm.Ir3_prof[t_idx], elm.Ii3_prof[t_idx])
358
+
359
+ data.Y3_star[3 * ii + 0] = complex(elm.G1_prof[t_idx], elm.B1_prof[t_idx])
360
+ data.Y3_star[3 * ii + 1] = complex(elm.G2_prof[t_idx], elm.B2_prof[t_idx])
361
+ data.Y3_star[3 * ii + 2] = complex(elm.G3_prof[t_idx], elm.B3_prof[t_idx])
362
+
363
+ elif elm.conn == ShuntConnectionType.Delta:
364
+ data.S3_delta[3 * ii + 0] = complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
365
+ data.S3_delta[3 * ii + 1] = complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
366
+ data.S3_delta[3 * ii + 2] = complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
367
+
368
+ data.Y3_delta[3 * ii + 0] = complex(elm.G1_prof[t_idx], elm.B1_prof[t_idx])
369
+ data.Y3_delta[3 * ii + 1] = complex(elm.G2_prof[t_idx], elm.B2_prof[t_idx])
370
+ data.Y3_delta[3 * ii + 2] = complex(elm.G3_prof[t_idx], elm.B3_prof[t_idx])
371
+
372
+ data.I3_delta[3 * ii + 0] = complex(elm.Ir1_prof[t_idx], elm.Ii1_prof[t_idx])
373
+ data.I3_delta[3 * ii + 1] = complex(elm.Ir2_prof[t_idx], elm.Ii2_prof[t_idx])
374
+ data.I3_delta[3 * ii + 2] = complex(elm.Ir3_prof[t_idx], elm.Ii3_prof[t_idx])
375
+
376
+ else:
377
+ raise Exception(f"Unhandled connection type {elm.conn}")
378
+
379
+ data.I[ii] = complex(elm.Ir_prof[t_idx], elm.Ii_prof[t_idx])
380
+ data.Y[ii] = complex(elm.G_prof[t_idx], elm.B_prof[t_idx])
381
+
382
+ data.active[ii] = elm.active_prof[t_idx]
383
+ data.cost[ii] = elm.Cost_prof[t_idx]
384
+ data.shift_key[ii] = elm.shift_key_prof[t_idx]
385
+
386
+ else:
387
+ if opf_results is not None:
388
+ data.S[ii] = complex(elm.P, elm.Q) - opf_results.load_shedding[ii]
389
+ else:
390
+ data.S[ii] = complex(elm.P, elm.Q)
391
+
392
+ if fill_three_phase:
393
+
394
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
395
+ data.S3_star[3 * ii + 0] = complex(elm.Pa, elm.Qa)
396
+ data.S3_star[3 * ii + 1] = complex(elm.Pb, elm.Qb)
397
+ data.S3_star[3 * ii + 2] = complex(elm.Pc, elm.Qc)
398
+
399
+ data.I3_star[3 * ii + 0] = complex(elm.Ir1, elm.Ii1)
400
+ data.I3_star[3 * ii + 1] = complex(elm.Ir2, elm.Ii2)
401
+ data.I3_star[3 * ii + 2] = complex(elm.Ir3, elm.Ii3)
402
+
403
+ data.Y3_star[3 * ii + 0] = complex(elm.G1, -elm.B1) * 3
404
+ data.Y3_star[3 * ii + 1] = complex(elm.G2, -elm.B2) * 3
405
+ data.Y3_star[3 * ii + 2] = complex(elm.G3, -elm.B3) * 3
406
+
407
+ elif elm.conn == ShuntConnectionType.Delta:
408
+ data.S3_delta[3 * ii + 0] = complex(elm.Pa, elm.Qa)
409
+ data.S3_delta[3 * ii + 1] = complex(elm.Pb, elm.Qb)
410
+ data.S3_delta[3 * ii + 2] = complex(elm.Pc, elm.Qc)
411
+
412
+ if elm.G1 > 0 and elm.G2 > 0 and elm.G3 > 0:
413
+ data.Y3_star[3 * ii + idx3] = delta2StarAdmittance(
414
+ Yab=complex(elm.G1, -elm.B1),
415
+ Ybc=complex(elm.G2, -elm.B2),
416
+ Yca=complex(elm.G3, -elm.B3)
417
+ )
418
+ else:
419
+ data.Y3_delta[3 * ii + 0] = complex(elm.G1, -elm.B1)
420
+ data.Y3_delta[3 * ii + 1] = complex(elm.G2, -elm.B2)
421
+ data.Y3_delta[3 * ii + 2] = complex(elm.G3, -elm.B3)
422
+
423
+ data.I3_delta[3 * ii + 0] = complex(elm.Ir1, elm.Ii1)
424
+ data.I3_delta[3 * ii + 1] = complex(elm.Ir2, elm.Ii2)
425
+ data.I3_delta[3 * ii + 2] = complex(elm.Ir3, elm.Ii3)
426
+
427
+ else:
428
+ raise Exception(f"Unhandled connection type {elm.conn}")
429
+
430
+ data.I[ii] = complex(elm.Ir, elm.Ii)
431
+ data.Y[ii] = complex(elm.G, elm.B)
432
+ data.active[ii] = elm.active
433
+ data.cost[ii] = elm.Cost
434
+ data.shift_key[ii] = elm.shift_key
435
+
436
+ if elm.use_kw:
437
+ # pass kW to MW
438
+ data.S[ii] /= 1000.0
439
+ data.I[ii] /= 1000.0
440
+ data.Y[ii] /= 1000.0
441
+ data.cost[ii] /= 1000.0
442
+
443
+ # reactive power sharing data
444
+ if data.active[ii]:
445
+ bus_data.q_fixed[i] -= data.S[ii].imag
446
+ bus_data.ii_fixed[i] -= data.I[ii].imag
447
+ bus_data.b_fixed[i] -= data.Y[ii].imag
448
+
449
+ # data.C_bus_elm[i, ii] = 1
450
+ ii += 1
451
+
452
+ for elm in circuit.get_static_generators():
453
+
454
+ if elm.bus is None:
455
+ data.bus_idx[ii] = -1
456
+ data.active[ii] = False
457
+ else:
458
+ i = bus_dict[elm.bus]
459
+ data.bus_idx[ii] = i
460
+ data.names[ii] = elm.name
461
+ data.idtag[ii] = elm.idtag
462
+ data.original_idx[ii] = ii
463
+ data.scalable[ii] = elm.scalable
464
+
465
+ if time_series:
466
+ data.S[ii] -= complex(elm.P_prof[t_idx], elm.Q_prof[t_idx])
467
+ data.active[ii] = elm.active_prof[t_idx]
468
+ data.cost[ii] = elm.Cost_prof[t_idx]
469
+ data.shift_key[ii] = elm.shift_key_prof[t_idx]
470
+
471
+ if fill_three_phase:
472
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
473
+ data.S3_star[3 * ii + 0] -= complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
474
+ data.S3_star[3 * ii + 1] -= complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
475
+ data.S3_star[3 * ii + 2] -= complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
476
+
477
+
478
+ elif elm.conn == ShuntConnectionType.Delta:
479
+ data.S3_delta[3 * ii + 0] -= complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
480
+ data.S3_delta[3 * ii + 1] -= complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
481
+ data.S3_delta[3 * ii + 2] -= complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
482
+
483
+ else:
484
+ raise Exception(f"Unhandled connection type {elm.conn}")
485
+
486
+ else:
487
+ data.S[ii] -= complex(elm.P, elm.Q)
488
+
489
+ if fill_three_phase:
490
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
491
+ data.S3_star[3 * ii + 0] -= complex(elm.Pa, elm.Qa)
492
+ data.S3_star[3 * ii + 1] -= complex(elm.Pb, elm.Qb)
493
+ data.S3_star[3 * ii + 2] -= complex(elm.Pc, elm.Qc)
494
+
495
+ elif elm.conn == ShuntConnectionType.Delta:
496
+ data.S3_delta[3 * ii + 0] -= complex(elm.Pa, elm.Qa)
497
+ data.S3_delta[3 * ii + 1] -= complex(elm.Pb, elm.Qb)
498
+ data.S3_delta[3 * ii + 2] -= complex(elm.Pc, elm.Qc)
499
+
500
+ else:
501
+ raise Exception(f"Unhandled connection type {elm.conn}")
502
+
503
+ data.active[ii] = elm.active
504
+ data.cost[ii] = elm.Cost
505
+ data.shift_key[ii] = elm.shift_key
506
+
507
+ if elm.use_kw:
508
+ # pass kW to MW
509
+ data.S[ii] /= 1000.0
510
+ data.cost[ii] /= 1000.0
511
+
512
+ # reactive power sharing data
513
+ if data.active[ii]:
514
+ bus_data.q_fixed[i] += data.S[ii].imag
515
+ # bus_data.ii_fixed[i] += data.I[ii].imag
516
+ # bus_data.b_fixed[i] += data.Y[ii].imag
517
+
518
+ # data.C_bus_elm[i, ii] = 1
519
+ ii += 1
520
+
521
+ for elm in circuit.get_external_grids():
522
+
523
+ if elm.bus is None:
524
+ data.bus_idx[ii] = -1
525
+ data.active[ii] = False
526
+ else:
527
+ i = bus_dict[elm.bus]
528
+ data.bus_idx[ii] = i
529
+ data.names[ii] = elm.name
530
+ data.idtag[ii] = elm.idtag
531
+ data.scalable[ii] = elm.scalable
532
+ data.original_idx[ii] = ii
533
+
534
+ # change stuff depending on the modes
535
+ if elm.mode == ExternalGridMode.VD:
536
+ # bus_data.bus_types[i] = BusMode.Slack_tpe.value # set as Slack
537
+ bus_data.set_bus_mode(i, BusMode.Slack_tpe)
538
+
539
+ set_bus_control_voltage(i=i,
540
+ j=-1,
541
+ remote_control=False,
542
+ bus_name=elm.bus.name,
543
+ bus_data=bus_data,
544
+ bus_voltage_used=bus_voltage_used,
545
+ candidate_Vm=elm.Vm_prof[t_idx] if time_series else elm.Vm,
546
+ use_stored_guess=use_stored_guess,
547
+ logger=logger)
548
+
549
+ elif elm.mode == ExternalGridMode.PV:
550
+
551
+ set_bus_control_voltage(i=i,
552
+ j=-1,
553
+ remote_control=False,
554
+ bus_name=elm.bus.name,
555
+ bus_data=bus_data,
556
+ bus_voltage_used=bus_voltage_used,
557
+ candidate_Vm=elm.Vm_prof[t_idx] if time_series else elm.Vm,
558
+ use_stored_guess=use_stored_guess,
559
+ logger=logger)
560
+
561
+ if time_series:
562
+ data.S[ii] += complex(elm.P_prof[t_idx], elm.Q_prof[t_idx])
563
+
564
+ if fill_three_phase:
565
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
566
+ data.S3_star[3 * ii + 0] += complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
567
+ data.S3_star[3 * ii + 1] += complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
568
+ data.S3_star[3 * ii + 2] += complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
569
+
570
+
571
+ elif elm.conn == ShuntConnectionType.Delta:
572
+ data.S3_delta[3 * ii + 0] += complex(elm.Pa_prof[t_idx], elm.Qa_prof[t_idx])
573
+ data.S3_delta[3 * ii + 1] += complex(elm.Pb_prof[t_idx], elm.Qb_prof[t_idx])
574
+ data.S3_delta[3 * ii + 2] += complex(elm.Pc_prof[t_idx], elm.Qc_prof[t_idx])
575
+
576
+ else:
577
+ raise Exception(f"Unhandled connection type {elm.conn}")
578
+
579
+ data.active[ii] = elm.active_prof[t_idx]
580
+ data.shift_key[ii] = elm.shift_key_prof[t_idx]
581
+
582
+ else:
583
+ data.S[ii] += complex(elm.P, elm.Q)
584
+
585
+ if fill_three_phase:
586
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
587
+ data.S3_star[3 * ii + 0] += complex(elm.Pa, elm.Qa)
588
+ data.S3_star[3 * ii + 1] += complex(elm.Pb, elm.Qb)
589
+ data.S3_star[3 * ii + 2] += complex(elm.Pc, elm.Qc)
590
+
591
+ elif elm.conn == ShuntConnectionType.Delta:
592
+ data.S3_delta[3 * ii + 0] += complex(elm.Pa, elm.Qa)
593
+ data.S3_delta[3 * ii + 1] += complex(elm.Pb, elm.Qb)
594
+ data.S3_delta[3 * ii + 2] += complex(elm.Pc, elm.Qc)
595
+
596
+ else:
597
+ raise Exception(f"Unhandled connection type {elm.conn}")
598
+
599
+ data.active[ii] = elm.active
600
+ data.shift_key[ii] = elm.shift_key
601
+
602
+ if elm.use_kw:
603
+ # pass kW to MW
604
+ data.S[ii] /= 1000.0
605
+ data.cost[ii] /= 1000.0
606
+
607
+ # reactive power sharing data
608
+ if data.active[ii]:
609
+ bus_data.q_fixed[i] += data.S[ii].imag
610
+ bus_data.ii_fixed[i] += data.I[ii].imag
611
+ bus_data.b_fixed[i] += data.Y[ii].imag
612
+
613
+ # data.C_bus_elm[i, ii] = 1
614
+ ii += 1
615
+
616
+ for elm in circuit.get_current_injections():
617
+
618
+ if elm.bus is None:
619
+ data.bus_idx[ii] = -1
620
+ data.active[ii] = False
621
+ else:
622
+ i = bus_dict[elm.bus]
623
+ data.bus_idx[ii] = i
624
+ data.names[ii] = elm.name
625
+ data.idtag[ii] = elm.idtag
626
+ data.original_idx[ii] = ii
627
+ data.mttf[ii] = elm.mttf
628
+ data.mttr[ii] = elm.mttr
629
+ data.scalable[ii] = elm.scalable
630
+
631
+ if time_series:
632
+ data.I[ii] += complex(elm.Ir_prof[t_idx], elm.Ii_prof[t_idx])
633
+
634
+ if fill_three_phase:
635
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
636
+
637
+ data.I3_star[3 * ii + 0] += complex(elm.Ir1_prof[t_idx], elm.Ii1_prof[t_idx])
638
+ data.I3_star[3 * ii + 1] += complex(elm.Ir2_prof[t_idx], elm.Ii2_prof[t_idx])
639
+ data.I3_star[3 * ii + 2] += complex(elm.Ir3_prof[t_idx], elm.Ii3_prof[t_idx])
640
+
641
+
642
+ elif elm.conn == ShuntConnectionType.Delta:
643
+
644
+ data.I3_delta[3 * ii + 0] += complex(elm.Ir1_prof[t_idx], elm.Ii1_prof[t_idx])
645
+ data.I3_delta[3 * ii + 1] += complex(elm.Ir2_prof[t_idx], elm.Ii2_prof[t_idx])
646
+ data.I3_delta[3 * ii + 2] += complex(elm.Ir3_prof[t_idx], elm.Ii3_prof[t_idx])
647
+
648
+ else:
649
+ raise Exception(f"Unhandled connection type {elm.conn}")
650
+
651
+ data.active[ii] = elm.active_prof[t_idx]
652
+ data.cost[ii] = elm.Cost_prof[t_idx]
653
+ data.shift_key[ii] = elm.shift_key_prof[t_idx]
654
+
655
+ else:
656
+ data.I[ii] += complex(elm.Ir, elm.Ii)
657
+
658
+ if fill_three_phase:
659
+
660
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
661
+
662
+ data.I3_star[3 * ii + 0] += complex(elm.Ir1, elm.Ii1)
663
+ data.I3_star[3 * ii + 1] += complex(elm.Ir2, elm.Ii2)
664
+ data.I3_star[3 * ii + 2] += complex(elm.Ir3, elm.Ii3)
665
+
666
+ elif elm.conn == ShuntConnectionType.Delta:
667
+
668
+ data.I3_delta[3 * ii + 0] += complex(elm.Ir1, elm.Ii1)
669
+ data.I3_delta[3 * ii + 1] += complex(elm.Ir2, elm.Ii2)
670
+ data.I3_delta[3 * ii + 2] += complex(elm.Ir3, elm.Ii3)
671
+
672
+ else:
673
+ raise Exception(f"Unhandled connection type {elm.conn}")
674
+
675
+ data.active[ii] = elm.active
676
+ data.cost[ii] = elm.Cost
677
+ data.shift_key[ii] = elm.shift_key
678
+
679
+ if elm.use_kw:
680
+ # pass kW to MW
681
+ data.I[ii] /= 1000.0
682
+ data.cost[ii] /= 1000.0
683
+
684
+ # reactive power sharing data
685
+ if data.active[ii]:
686
+ bus_data.q_fixed[i] += data.S[ii].imag
687
+ bus_data.ii_fixed[i] += data.I[ii].imag
688
+ bus_data.b_fixed[i] += data.Y[ii].imag
689
+
690
+ # data.C_bus_elm[i, ii] = 1
691
+ ii += 1
692
+
693
+ return data
694
+
695
+
696
+ def get_shunt_data(
697
+ data: ShuntData,
698
+ circuit: MultiCircuit,
699
+ bus_dict,
700
+ bus_voltage_used: BoolVec,
701
+ bus_data: BusData,
702
+ logger: Logger,
703
+ t_idx=-1,
704
+ time_series=False,
705
+ use_stored_guess=False,
706
+ control_remote_voltage: bool = True,
707
+ fill_three_phase: bool = False
708
+ ) -> None:
709
+ """
710
+
711
+ :param data:
712
+ :param circuit:
713
+ :param bus_dict:
714
+ :param bus_voltage_used:
715
+ :param bus_data:
716
+ :param logger:
717
+ :param t_idx:
718
+ :param time_series:
719
+ :param use_stored_guess:
720
+ :param control_remote_voltage:
721
+ :param fill_three_phase:
722
+ :return:
723
+ """
724
+ idx3 = np.array([0, 1, 2])
725
+
726
+ ii = 0
727
+ for k, elm in enumerate(circuit.get_shunts()):
728
+
729
+ if elm.bus is None:
730
+ data.bus_idx[k] = -1
731
+ data.active[k] = False
732
+ else:
733
+
734
+ i = bus_dict[elm.bus]
735
+ data.bus_idx[k] = i
736
+ data.names[k] = elm.name
737
+ data.idtag[k] = elm.idtag
738
+ data.original_idx[ii] = ii
739
+ data.mttf[k] = elm.mttf
740
+ data.mttr[k] = elm.mttr
741
+
742
+ if time_series:
743
+ data.active[k] = elm.active_prof[t_idx]
744
+ data.Y[k] = complex(elm.G_prof[t_idx], elm.B_prof[t_idx])
745
+
746
+ if fill_three_phase:
747
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
748
+
749
+ data.Y3_star[3 * ii + 0] = complex(elm.Ga_prof[t_idx], elm.Ba_prof[t_idx])
750
+ data.Y3_star[3 * ii + 1] = complex(elm.Gb_prof[t_idx], elm.Bb_prof[t_idx])
751
+ data.Y3_star[3 * ii + 2] = complex(elm.Gc_prof[t_idx], elm.Bc_prof[t_idx])
752
+
753
+ elif elm.conn == ShuntConnectionType.Delta:
754
+
755
+ data.Y3_star[3 * ii + idx3] = delta2StarAdmittance(
756
+ Yab=complex(elm.Ga_prof[t_idx], elm.Ba_prof[t_idx]),
757
+ Ybc=complex(elm.Gb_prof[t_idx], elm.Bb_prof[t_idx]),
758
+ Yca=complex(elm.Gc_prof[t_idx], elm.Bc_prof[t_idx])
759
+ )
760
+
761
+ else:
762
+ raise Exception(f"Unhandled connection type {elm.conn}")
763
+
764
+ else:
765
+ data.active[k] = elm.active
766
+ data.Y[k] = complex(elm.G, elm.B)
767
+
768
+ if fill_three_phase:
769
+
770
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
771
+
772
+ data.Y3_star[3 * ii + 0] = complex(elm.Ga, elm.Ba)
773
+ data.Y3_star[3 * ii + 1] = complex(elm.Gb, elm.Bb)
774
+ data.Y3_star[3 * ii + 2] = complex(elm.Gc, elm.Bc)
775
+
776
+ elif elm.conn == ShuntConnectionType.Delta:
777
+
778
+ data.Y3_star[3 * ii + idx3] = delta2StarAdmittance(
779
+ Yab=complex(elm.Ga, elm.Ba),
780
+ Ybc=complex(elm.Gb, elm.Bb),
781
+ Yca=complex(elm.Gc, elm.Bc)
782
+ )
783
+
784
+ else:
785
+ raise Exception(f"Unhandled connection type {elm.conn}")
786
+
787
+ if elm.use_kw:
788
+ # pass kW to MW
789
+ data.Y[ii] /= 1000.0
790
+
791
+ # reactive power sharing data
792
+ if data.active[ii]:
793
+ bus_data.b_fixed[i] += data.Y[ii].imag
794
+
795
+ # data.C_bus_elm[i, k] = 1
796
+ ii += 1
797
+
798
+ for elm in circuit.get_controllable_shunts():
799
+
800
+ if elm.bus is None:
801
+ data.bus_idx[ii] = -1
802
+ data.active[ii] = False
803
+ else:
804
+ i = bus_dict[elm.bus]
805
+ data.bus_idx[ii] = i
806
+ data.names[ii] = elm.name
807
+ data.idtag[ii] = elm.idtag
808
+ data.original_idx[ii] = ii
809
+ data.mttf[ii] = elm.mttf
810
+ data.mttr[ii] = elm.mttr
811
+
812
+ data.controllable[ii] = elm.is_controlled
813
+ data.vset[ii] = elm.Vset
814
+ data.qmin[ii] = elm.Bmin
815
+ data.qmax[ii] = elm.Bmax
816
+
817
+ if time_series:
818
+ data.Y[ii] += complex(elm.G_prof[t_idx], elm.B_prof[t_idx])
819
+ data.active[ii] = elm.active_prof[t_idx]
820
+ data.cost[ii] = elm.Cost_prof[t_idx]
821
+
822
+ if fill_three_phase:
823
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
824
+
825
+ data.Y3_star[3 * ii + 0] = complex(elm.Ga_prof[t_idx], elm.Ba_prof[t_idx])
826
+ data.Y3_star[3 * ii + 1] = complex(elm.Gb_prof[t_idx], elm.Bb_prof[t_idx])
827
+ data.Y3_star[3 * ii + 2] = complex(elm.Gc_prof[t_idx], elm.Bc_prof[t_idx])
828
+
829
+ elif elm.conn == ShuntConnectionType.Delta:
830
+
831
+ data.Y3_star[3 * ii + idx3] = delta2StarAdmittance(
832
+ Yab=complex(elm.Ga_prof[t_idx], elm.Ba_prof[t_idx]),
833
+ Ybc=complex(elm.Gb_prof[t_idx], elm.Bb_prof[t_idx]),
834
+ Yca=complex(elm.Gc_prof[t_idx], elm.Bc_prof[t_idx])
835
+ )
836
+
837
+ else:
838
+ raise Exception(f"Unhandled connection type {elm.conn}")
839
+
840
+ if elm.is_controlled and elm.active_prof[t_idx]:
841
+
842
+ if elm.control_bus_prof[t_idx] is not None:
843
+ remote_control = True
844
+ j = bus_dict[elm.control_bus_prof[t_idx]]
845
+ else:
846
+ remote_control = False
847
+ j = -1
848
+
849
+ data.controllable_bus_idx[ii] = j
850
+
851
+ set_bus_control_voltage(i=i,
852
+ j=j,
853
+ remote_control=remote_control and control_remote_voltage,
854
+ bus_name=elm.bus.name,
855
+ bus_data=bus_data,
856
+ bus_voltage_used=bus_voltage_used,
857
+ candidate_Vm=elm.Vset_prof[t_idx],
858
+ use_stored_guess=use_stored_guess,
859
+ logger=logger)
860
+
861
+ else:
862
+ data.Y[ii] += complex(elm.G, elm.B)
863
+ data.active[ii] = elm.active
864
+ data.cost[ii] = elm.Cost
865
+
866
+ if fill_three_phase:
867
+
868
+ if elm.conn == ShuntConnectionType.Star or elm.conn == ShuntConnectionType.GroundedStar:
869
+
870
+ data.Y3_star[3 * ii + 0] = complex(elm.Ga, elm.Ba)
871
+ data.Y3_star[3 * ii + 1] = complex(elm.Gb, elm.Bb)
872
+ data.Y3_star[3 * ii + 2] = complex(elm.Gc, elm.Bc)
873
+
874
+ elif elm.conn == ShuntConnectionType.Delta:
875
+
876
+ data.Y3_star[3 * ii + idx3] = delta2StarAdmittance(
877
+ Yab=complex(elm.Ga, elm.Ba),
878
+ Ybc=complex(elm.Gb, elm.Bb),
879
+ Yca=complex(elm.Gc, elm.Bc)
880
+ )
881
+
882
+ else:
883
+ raise Exception(f"Unhandled connection type {elm.conn}")
884
+
885
+ if elm.is_controlled and elm.active:
886
+ if elm.control_bus is not None:
887
+ remote_control = True
888
+ j = bus_dict[elm.control_bus]
889
+ else:
890
+ remote_control = False
891
+ j = -1
892
+
893
+ data.controllable_bus_idx[ii] = j
894
+
895
+ set_bus_control_voltage(i=i,
896
+ j=j,
897
+ remote_control=remote_control and control_remote_voltage,
898
+ bus_name=elm.bus.name,
899
+ bus_data=bus_data,
900
+ bus_voltage_used=bus_voltage_used,
901
+ candidate_Vm=elm.Vset,
902
+ use_stored_guess=use_stored_guess,
903
+ logger=logger)
904
+
905
+ if elm.use_kw:
906
+ # pass kW to MW
907
+ data.Y[ii] /= 1000.0
908
+
909
+ # reactive power sharing data
910
+ if data.active[ii]:
911
+ if data.controllable[ii]:
912
+ bus_data.q_shared_total[i] += data.Y[ii].imag
913
+ data.q_share[ii] = data.Y[ii].imag
914
+ else:
915
+ bus_data.b_fixed[i] += data.Y[ii].imag
916
+
917
+ # data.C_bus_elm[i, ii] = 1
918
+ ii += 1
919
+
920
+
921
+ def fill_generator_parent(
922
+ k: int,
923
+ data: GeneratorData | BatteryData,
924
+ elm: dev.Generator | dev.Battery,
925
+ bus_dict,
926
+ bus_voltage_used: BoolVec,
927
+ logger: Logger,
928
+ bus_data: BusData,
929
+ t_idx=-1,
930
+ time_series=False,
931
+ use_stored_guess=False,
932
+ control_remote_voltage: bool = True,
933
+ fill_three_phase: bool = False
934
+ ) -> None:
935
+ """
936
+ Fill the common ancestor of generation and batteries
937
+ :param k:
938
+ :param data:
939
+ :param elm:
940
+ :param bus_dict:
941
+ :param bus_voltage_used:
942
+ :param logger:
943
+ :param bus_data:
944
+ :param t_idx:
945
+ :param time_series:
946
+ :param use_stored_guess:
947
+ :param control_remote_voltage:
948
+ :param fill_three_phase:
949
+ :return:
950
+ """
951
+ if elm.bus is None:
952
+ data.bus_idx[k] = -1
953
+ data.active[k] = False
954
+ return
955
+
956
+ idx3 = np.arange(3)
957
+ i = bus_dict[elm.bus]
958
+ data.bus_idx[k] = i
959
+ data.names[k] = elm.name
960
+ data.idtag[k] = elm.idtag
961
+ data.original_idx[k] = k
962
+ data.mttf[k] = elm.mttf
963
+ data.mttr[k] = elm.mttr
964
+
965
+ data.controllable[k] = elm.is_controlled
966
+ data.installed_p[k] = elm.Snom
967
+ bus_data.installed_power[i] += elm.Snom
968
+
969
+ # r0, r1, r2, x0, x1, x2
970
+ data.r0[k] = elm.R0
971
+ data.r1[k] = elm.R1
972
+ data.r2[k] = elm.R2
973
+ data.x0[k] = elm.X0
974
+ data.x1[k] = elm.X1
975
+ data.x2[k] = elm.X2
976
+
977
+ data.ramp_up[k] = elm.RampUp
978
+ data.ramp_down[k] = elm.RampDown
979
+ data.min_time_up[k] = elm.MinTimeUp
980
+ data.min_time_down[k] = elm.MinTimeDown
981
+
982
+ data.dispatchable[k] = elm.enabled_dispatch
983
+ data.capex[k] = elm.capex
984
+
985
+ data.snom[k] = elm.Snom
986
+ data.scalable[k] = elm.scalable
987
+
988
+ if time_series:
989
+ data.p[k] = elm.P_prof[t_idx]
990
+ data.active[k] = elm.active_prof[t_idx]
991
+ data.pf[k] = elm.Pf_prof[t_idx]
992
+ data.v[k] = elm.Vset_prof[t_idx]
993
+ data.pmax[k] = elm.Pmax_prof[t_idx]
994
+ data.pmin[k] = elm.Pmin_prof[t_idx]
995
+
996
+ if elm.use_reactive_power_curve:
997
+ data.qmin[k] = elm.q_curve.get_qmin(data.p[i])
998
+ data.qmax[k] = elm.q_curve.get_qmax(data.p[i])
999
+ else:
1000
+ data.qmin[k] = elm.Qmin_prof[t_idx]
1001
+ data.qmax[k] = elm.Qmax_prof[t_idx]
1002
+
1003
+ data.cost_0[k] = elm.Cost0_prof[t_idx]
1004
+ data.cost_1[k] = elm.Cost_prof[t_idx]
1005
+ data.cost_2[k] = elm.Cost2_prof[t_idx]
1006
+ data.shift_key[k] = elm.shift_key_prof[t_idx]
1007
+
1008
+ if elm.active_prof[t_idx]:
1009
+
1010
+ if elm.srap_enabled_prof[t_idx] and data.p[k] > 0.0:
1011
+ bus_data.srap_availbale_power[i] += data.p[k]
1012
+
1013
+ if elm.is_controlled:
1014
+ if elm.control_bus_prof[t_idx] is not None:
1015
+ remote_control = True
1016
+ j = bus_dict[elm.control_bus_prof[t_idx]]
1017
+ else:
1018
+ remote_control = False
1019
+ j = -1
1020
+
1021
+ data.controllable_bus_idx[k] = j
1022
+
1023
+ set_bus_control_voltage(i=i,
1024
+ j=j,
1025
+ remote_control=remote_control and control_remote_voltage,
1026
+ bus_name=elm.bus.name,
1027
+ bus_data=bus_data,
1028
+ bus_voltage_used=bus_voltage_used,
1029
+ candidate_Vm=elm.Vset_prof[t_idx],
1030
+ use_stored_guess=use_stored_guess,
1031
+ logger=logger)
1032
+
1033
+ else:
1034
+
1035
+ data.p[k] = elm.P
1036
+ data.active[k] = elm.active
1037
+ data.pf[k] = elm.Pf
1038
+ data.v[k] = elm.Vset
1039
+ data.pmax[k] = elm.Pmax
1040
+ data.pmin[k] = elm.Pmin
1041
+
1042
+ # reactive power limits, for the given power value
1043
+ if elm.use_reactive_power_curve:
1044
+ data.qmin[k] = elm.q_curve.get_qmin(data.p[i])
1045
+ data.qmax[k] = elm.q_curve.get_qmax(data.p[i])
1046
+ else:
1047
+ data.qmin[k] = elm.Qmin
1048
+ data.qmax[k] = elm.Qmax
1049
+
1050
+ data.cost_0[k] = elm.Cost0
1051
+ data.cost_1[k] = elm.Cost
1052
+ data.cost_2[k] = elm.Cost2
1053
+ data.shift_key[k] = elm.shift_key
1054
+
1055
+ if elm.active:
1056
+
1057
+ if elm.srap_enabled and data.p[k] > 0.0:
1058
+ bus_data.srap_availbale_power[i] += data.p[k]
1059
+
1060
+ if elm.is_controlled:
1061
+ if elm.control_bus is not None:
1062
+ remote_control = True
1063
+ j = bus_dict[elm.control_bus]
1064
+ else:
1065
+ remote_control = False
1066
+ j = -1
1067
+
1068
+ data.controllable_bus_idx[k] = j
1069
+
1070
+ set_bus_control_voltage(i=i,
1071
+ j=j,
1072
+ remote_control=remote_control and control_remote_voltage,
1073
+ bus_name=elm.bus.name,
1074
+ bus_data=bus_data,
1075
+ bus_voltage_used=bus_voltage_used,
1076
+ candidate_Vm=elm.Vset,
1077
+ use_stored_guess=use_stored_guess,
1078
+ logger=logger)
1079
+
1080
+ if elm.use_kw:
1081
+ # pass kW to MW
1082
+ data.p[k] /= 1000.0
1083
+ data.pmax[k] /= 1000.0
1084
+ data.pmin[k] /= 1000.0
1085
+ data.qmax[k] /= 1000.0
1086
+ data.qmin[k] /= 1000.0
1087
+ data.snom[k] /= 1000.0
1088
+ # data.cost_0[k] /= 1000.0
1089
+ data.cost_1[k] /= 1000.0
1090
+ data.cost_2[k] /= 1e6 # this is because of MW^2
1091
+
1092
+ if fill_three_phase:
1093
+ # Note: for a generator that is balanced, the delta and star configurations
1094
+ # translate to the same values in star
1095
+ data.p3_star[3 * k + idx3] = data.p[k] / 3.0
1096
+
1097
+ # reactive power-sharing data
1098
+ if data.active[k]:
1099
+ if data.controllable[k]:
1100
+ bus_data.q_shared_total[i] += data.p[k]
1101
+ data.q_share[k] = data.p[k]
1102
+ else:
1103
+ bus_data.q_fixed[i] += data.get_q_at(k)
1104
+
1105
+
1106
+ def get_generator_data(
1107
+ data: GeneratorData,
1108
+ circuit: MultiCircuit,
1109
+ bus_dict,
1110
+ bus_voltage_used: BoolVec,
1111
+ logger: Logger,
1112
+ bus_data: BusData,
1113
+ opf_results: VALID_OPF_RESULTS | None = None,
1114
+ t_idx=-1,
1115
+ time_series=False,
1116
+ use_stored_guess=False,
1117
+ control_remote_voltage: bool = True,
1118
+ fill_three_phase: bool = False
1119
+ ) -> Dict[str, int]:
1120
+ """
1121
+
1122
+ :param data:
1123
+ :param circuit:
1124
+ :param bus_dict:
1125
+ :param bus_voltage_used:
1126
+ :param logger:
1127
+ :param bus_data:
1128
+ :param opf_results:
1129
+ :param t_idx:
1130
+ :param time_series:
1131
+ :param use_stored_guess:
1132
+ :param control_remote_voltage:
1133
+ :return:
1134
+ """
1135
+
1136
+ gen_index_dict: Dict[str, int] = dict()
1137
+ for k, elm in enumerate(circuit.get_generators()):
1138
+
1139
+ gen_index_dict[elm.idtag] = k # associate the idtag to the index
1140
+
1141
+ fill_generator_parent(k=k,
1142
+ elm=elm,
1143
+ data=data,
1144
+ bus_data=bus_data,
1145
+ bus_dict=bus_dict,
1146
+ bus_voltage_used=bus_voltage_used,
1147
+ logger=logger,
1148
+ t_idx=t_idx,
1149
+ time_series=time_series,
1150
+ use_stored_guess=use_stored_guess,
1151
+ control_remote_voltage=control_remote_voltage,
1152
+ fill_three_phase=fill_three_phase)
1153
+
1154
+ if opf_results is not None:
1155
+ # overwrite P with the OPF results
1156
+ if time_series:
1157
+ data.p[k] = opf_results.generator_power[t_idx, k] - opf_results.generator_shedding[t_idx, k]
1158
+ else:
1159
+ data.p[k] = opf_results.generator_power[k] - opf_results.generator_shedding[k]
1160
+
1161
+ return gen_index_dict
1162
+
1163
+
1164
+ def get_battery_data(
1165
+ data: BatteryData,
1166
+ circuit: MultiCircuit,
1167
+ bus_dict: Dict[Bus, int],
1168
+ bus_voltage_used: BoolVec,
1169
+ logger: Logger,
1170
+ bus_data: BusData,
1171
+ opf_results: VALID_OPF_RESULTS | None = None,
1172
+ t_idx=-1,
1173
+ time_series=False,
1174
+ use_stored_guess=False,
1175
+ control_remote_voltage: bool = True,
1176
+ fill_three_phase: bool = False
1177
+ ) -> None:
1178
+ """
1179
+
1180
+ :param data:
1181
+ :param circuit:
1182
+ :param bus_dict:
1183
+ :param bus_voltage_used:
1184
+ :param logger:
1185
+ :param bus_data:
1186
+ :param opf_results:
1187
+ :param t_idx:
1188
+ :param time_series:
1189
+ :param use_stored_guess:
1190
+ :param control_remote_voltage:
1191
+ :return:
1192
+ """
1193
+
1194
+ for k, elm in enumerate(circuit.get_batteries()):
1195
+
1196
+ fill_generator_parent(k=k,
1197
+ elm=elm,
1198
+ data=data,
1199
+ bus_data=bus_data,
1200
+ bus_dict=bus_dict,
1201
+ bus_voltage_used=bus_voltage_used,
1202
+ logger=logger,
1203
+ t_idx=t_idx,
1204
+ time_series=time_series,
1205
+ use_stored_guess=use_stored_guess,
1206
+ control_remote_voltage=control_remote_voltage,
1207
+ fill_three_phase=fill_three_phase)
1208
+
1209
+ data.enom[k] = elm.Enom
1210
+ data.min_soc[k] = elm.min_soc
1211
+ data.max_soc[k] = elm.max_soc
1212
+ data.soc_0[k] = elm.soc_0
1213
+ data.e_min[k] = elm.Enom * elm.min_soc
1214
+ data.e_max[k] = elm.Enom * elm.max_soc
1215
+ data.discharge_efficiency[k] = elm.discharge_efficiency
1216
+ data.charge_efficiency[k] = elm.charge_efficiency
1217
+
1218
+ if opf_results is not None:
1219
+ # overwrite P with the OPF results
1220
+ if time_series:
1221
+ data.p[k] = opf_results.battery_power[t_idx, k]
1222
+ else:
1223
+ data.p[k] = opf_results.battery_power[k]
1224
+
1225
+
1226
+ def fill_parent_branch(i: int,
1227
+ elm: BRANCH_TYPES,
1228
+ data: PassiveBranchData,
1229
+ bus_dict: Dict[Bus, int],
1230
+ t_idx: int = -1,
1231
+ time_series: bool = False):
1232
+ """
1233
+
1234
+ :param i:
1235
+ :param elm:
1236
+ :param data:
1237
+ :param bus_dict:
1238
+ :param t_idx:
1239
+ :param time_series:
1240
+ :return:
1241
+ """
1242
+ data.names[i] = elm.name
1243
+ data.idtag[i] = elm.idtag
1244
+
1245
+ data.mttf[i] = elm.mttf
1246
+ data.mttr[i] = elm.mttr
1247
+
1248
+ if time_series:
1249
+ data.active[i] = elm.active_prof[t_idx]
1250
+ data.rates[i] = elm.rate_prof[t_idx]
1251
+ data.contingency_rates[i] = elm.rate_prof[t_idx] * elm.contingency_factor_prof[t_idx]
1252
+ data.protection_rates[i] = elm.rate_prof[t_idx] * elm.protection_rating_factor_prof[t_idx]
1253
+
1254
+ data.overload_cost[i] = elm.Cost_prof[t_idx]
1255
+
1256
+ else:
1257
+ data.active[i] = elm.active
1258
+ data.rates[i] = elm.rate
1259
+ data.contingency_rates[i] = elm.rate * elm.contingency_factor
1260
+ data.protection_rates[i] = elm.rate * elm.protection_rating_factor
1261
+
1262
+ data.overload_cost[i] = elm.Cost
1263
+
1264
+ f = bus_dict[elm.bus_from]
1265
+ t = bus_dict[elm.bus_to]
1266
+ data.F[i] = f
1267
+ data.T[i] = t
1268
+
1269
+ data.original_idx[i] = i
1270
+ data.reducible[i] = int(elm.reducible)
1271
+ data.contingency_enabled[i] = int(elm.contingency_enabled)
1272
+ data.monitor_loading[i] = int(elm.monitor_loading)
1273
+
1274
+ data.virtual_tap_f[i], data.virtual_tap_t[i] = elm.get_virtual_taps()
1275
+
1276
+ return f, t
1277
+
1278
+
1279
+ def fill_controllable_branch(
1280
+ ii: int,
1281
+ elm: Union[dev.Transformer2W, dev.Winding, dev.VSC, dev.UPFC],
1282
+ data: PassiveBranchData,
1283
+ ctrl_data: ActiveBranchData,
1284
+ bus_data: BusData,
1285
+ bus_dict: Dict[Bus, int],
1286
+ t_idx: int,
1287
+ time_series: bool,
1288
+ opf_results: VALID_OPF_RESULTS | None,
1289
+ use_stored_guess: bool,
1290
+ bus_voltage_used: BoolVec,
1291
+ Sbase: float,
1292
+ control_taps_modules: bool,
1293
+ control_taps_phase: bool,
1294
+ logger: Logger):
1295
+ """
1296
+
1297
+ :param ii:
1298
+ :param elm:
1299
+ :param data:
1300
+ :param ctrl_data:
1301
+ :param bus_data:
1302
+ :param bus_dict:
1303
+ :param t_idx:
1304
+ :param time_series:
1305
+ :param opf_results:
1306
+ :param use_stored_guess:
1307
+ :param bus_voltage_used:
1308
+ :param Sbase:
1309
+ :param control_taps_modules:
1310
+ :param control_taps_phase:
1311
+ :param logger:
1312
+ :return:
1313
+ """
1314
+ fill_parent_branch(i=ii,
1315
+ elm=elm,
1316
+ data=data,
1317
+ bus_dict=bus_dict,
1318
+ t_idx=t_idx,
1319
+ time_series=time_series)
1320
+
1321
+ if time_series:
1322
+
1323
+ if control_taps_phase:
1324
+ ctrl_data.tap_phase_control_mode[ii] = elm.tap_phase_control_mode_prof[t_idx]
1325
+
1326
+ if control_taps_modules:
1327
+ ctrl_data.tap_module_control_mode[ii] = elm.tap_module_control_mode_prof[t_idx]
1328
+ if elm.regulation_bus is None:
1329
+ reg_bus = elm.bus_from
1330
+ if ctrl_data.tap_module_control_mode[ii] == TapModuleControl.Vm:
1331
+ logger.add_warning("Unspecified regulation bus",
1332
+ device_class=elm.device_type.value,
1333
+ device=elm.name)
1334
+ else:
1335
+ reg_bus = elm.regulation_bus
1336
+
1337
+ ctrl_data.tap_controlled_buses[ii] = bus_dict[reg_bus]
1338
+
1339
+ ctrl_data.Pset[ii] = elm.Pset_prof[t_idx] / Sbase
1340
+ ctrl_data.Qset[ii] = elm.Qset_prof[t_idx] / Sbase
1341
+ ctrl_data.vset[ii] = elm.vset_prof[t_idx]
1342
+
1343
+ if opf_results is not None:
1344
+ ctrl_data.tap_module[ii] = elm.tap_module
1345
+ ctrl_data.tap_angle[ii] = opf_results.phase_shift[t_idx, ii]
1346
+ else:
1347
+ ctrl_data.tap_module[ii] = elm.tap_module_prof[t_idx]
1348
+ ctrl_data.tap_angle[ii] = elm.tap_phase_prof[t_idx]
1349
+ else:
1350
+
1351
+ if control_taps_phase:
1352
+ ctrl_data.tap_phase_control_mode[ii] = elm.tap_phase_control_mode
1353
+
1354
+ if control_taps_modules:
1355
+ ctrl_data.tap_module_control_mode[ii] = elm.tap_module_control_mode
1356
+
1357
+ if elm.regulation_bus is None:
1358
+ reg_bus = elm.bus_from
1359
+ if ctrl_data.tap_module_control_mode[ii] == TapModuleControl.Vm:
1360
+ logger.add_warning("Unspecified regulation bus",
1361
+ device_class=elm.device_type.value,
1362
+ device=elm.name)
1363
+ else:
1364
+ reg_bus = elm.regulation_bus
1365
+ ctrl_data.tap_controlled_buses[ii] = bus_dict[reg_bus]
1366
+
1367
+ ctrl_data.Pset[ii] = elm.Pset / Sbase
1368
+ ctrl_data.Qset[ii] = elm.Qset / Sbase
1369
+ ctrl_data.vset[ii] = elm.vset
1370
+
1371
+ if opf_results is not None:
1372
+ ctrl_data.tap_module[ii] = elm.tap_module
1373
+ ctrl_data.tap_angle[ii] = opf_results.phase_shift[ii]
1374
+ else:
1375
+ ctrl_data.tap_module[ii] = elm.tap_module
1376
+ ctrl_data.tap_angle[ii] = elm.tap_phase
1377
+
1378
+ ctrl_data.is_controlled[ii] = 1
1379
+ ctrl_data.tap_module_min[ii] = elm.tap_module_min
1380
+ ctrl_data.tap_module_max[ii] = elm.tap_module_max
1381
+ ctrl_data.tap_angle_min[ii] = elm.tap_phase_min
1382
+ ctrl_data.tap_angle_max[ii] = elm.tap_phase_max
1383
+
1384
+ # if (ctrl_data.tap_module_control_mode[ii] not in (TapModuleControl.fixed, 0)
1385
+ # or ctrl_data.tap_phase_control_mode[ii] not in (TapPhaseControl.fixed, 0)):
1386
+ # ctrl_data.any_pf_control = True
1387
+
1388
+ if ctrl_data.tap_module_control_mode[ii] != 0:
1389
+ if ctrl_data.tap_module_control_mode[ii] != TapModuleControl.fixed:
1390
+ ctrl_data.any_pf_control = True
1391
+
1392
+ if not ctrl_data.any_pf_control: # if true, we can skip this step
1393
+ if ctrl_data.tap_phase_control_mode[ii] != 0:
1394
+ if ctrl_data.tap_phase_control_mode[ii] != TapPhaseControl.fixed:
1395
+ ctrl_data.any_pf_control = True
1396
+
1397
+ if not use_stored_guess:
1398
+ if ctrl_data.tap_module_control_mode[ii] == TapModuleControl.Vm:
1399
+ ctrl_data.any_pf_control = True
1400
+ bus_idx = ctrl_data.tap_controlled_buses[ii]
1401
+ if not bus_voltage_used[bus_idx]:
1402
+ if elm.vset > 0.0:
1403
+ bus_data.Vbus[bus_idx] = elm.vset
1404
+ else:
1405
+ logger.add_warning("Branch control voltage out of bounds",
1406
+ device_class=str(elm.device_type.value),
1407
+ device=elm.name,
1408
+ value=elm.vset)
1409
+ elif elm.vset != bus_data.Vbus[bus_idx]:
1410
+ logger.add_error(msg='Different control voltage set points',
1411
+ device=bus_data.names[bus_idx],
1412
+ value=elm.vset,
1413
+ expected_value=bus_data.Vbus[bus_idx])
1414
+
1415
+ # modify the voltage angle guess using the phase
1416
+ if ctrl_data.tap_angle[ii] != 0:
1417
+ f = bus_dict[elm.bus_from]
1418
+ t = bus_dict[elm.bus_to]
1419
+ Vm = abs(bus_data.Vbus[f])
1420
+ Va = np.angle(bus_data.Vbus[f], deg=False)
1421
+ bus_data.Vbus[f] = Vm * np.exp(1j * (Va + ctrl_data.tap_angle[ii]))
1422
+
1423
+
1424
+ def get_branch_data(
1425
+ data: PassiveBranchData,
1426
+ ctrl_data: ActiveBranchData,
1427
+ circuit: MultiCircuit,
1428
+ bus_dict: Dict[Bus, int],
1429
+ bus_data: BusData,
1430
+ bus_voltage_used: BoolVec,
1431
+ apply_temperature: bool,
1432
+ branch_tolerance_mode: BranchImpedanceMode,
1433
+ t_idx: int = -1,
1434
+ time_series: bool = False,
1435
+ opf_results: VALID_OPF_RESULTS | None = None,
1436
+ use_stored_guess: bool = False,
1437
+ control_taps_modules: bool = True,
1438
+ control_taps_phase: bool = True,
1439
+ control_remote_voltage: bool = True,
1440
+ logger: Logger = Logger(),
1441
+ fill_three_phase: bool = False
1442
+ ) -> Dict[BRANCH_TYPES, int]:
1443
+ """
1444
+ Compile BranchData for a time step or the snapshot
1445
+ :param data: BranchData
1446
+ :param ctrl_data: ControllableBranchData
1447
+ :param circuit: MultiCircuit
1448
+ :param bus_dict: Dictionary of buses to compute the indices
1449
+ :param bus_data: BusData
1450
+ :param bus_voltage_used:
1451
+ :param apply_temperature: apply the temperature correction?
1452
+ :param branch_tolerance_mode: BranchImpedanceMode
1453
+ :param t_idx: time index (-1 is useless)
1454
+ :param time_series: compile time series? else the sanpshot is compiled
1455
+ :param opf_results: OptimalPowerFlowResults
1456
+ :param use_stored_guess: use the stored voltage ?
1457
+ :param control_taps_modules: Control TapsModules
1458
+ :param control_taps_phase: Control TapsPhase
1459
+ :param control_remote_voltage: Control RemoteVoltage
1460
+ :param logger: Logger
1461
+ :param fill_three_phase: Fill the tree phase info?
1462
+ :return: BranchData
1463
+ """
1464
+
1465
+ branch_dict: Dict[BRANCH_TYPES, int] = dict()
1466
+ idx3 = np.array(range(3))
1467
+
1468
+ ii = 0
1469
+
1470
+ # Compile the lines
1471
+ for i, elm in enumerate(circuit.lines):
1472
+ # generic stuff
1473
+ fill_parent_branch(i=ii,
1474
+ elm=elm,
1475
+ data=data,
1476
+ bus_dict=bus_dict,
1477
+ t_idx=t_idx,
1478
+ time_series=time_series)
1479
+
1480
+ data.R[ii] = elm.R_corrected if apply_temperature else elm.R
1481
+
1482
+ if branch_tolerance_mode == BranchImpedanceMode.Lower:
1483
+ data.R[ii] *= (1 - elm.tolerance / 100.0)
1484
+ elif branch_tolerance_mode == BranchImpedanceMode.Upper:
1485
+ data.R[ii] *= (1 + elm.tolerance / 100.0)
1486
+
1487
+ data.X[ii] = elm.X
1488
+ data.B[ii] = elm.B
1489
+
1490
+ data.R0[ii] = elm.R0
1491
+ data.X0[ii] = elm.X0
1492
+ data.B0[ii] = elm.B0
1493
+
1494
+ data.R2[ii] = elm.R2
1495
+ data.X2[ii] = elm.X2
1496
+ data.B2[ii] = elm.B2
1497
+
1498
+ if fill_three_phase:
1499
+ """
1500
+ yff = ys_abc + ysh_abc / 2
1501
+ yft = - ys_abc
1502
+ ytf = - ys_abc
1503
+ ytt = ys_abc + ysh_abc / 2
1504
+ """
1505
+ k3 = 3 * ii + idx3
1506
+ y1 = elm.ys.values + elm.ysh.values / 2.0 * 1e-6
1507
+ y2 = - elm.ys.values
1508
+ data.Yff3[k3, :] = y1
1509
+ data.Yft3[k3, :] = y2
1510
+ data.Ytf3[k3, :] = y2
1511
+ data.Ytt3[k3, :] = y1
1512
+
1513
+ """ Save the phases of each line """
1514
+ data.phA[ii] = elm.ys.phA
1515
+ data.phB[ii] = elm.ys.phB
1516
+ data.phC[ii] = elm.ys.phC
1517
+
1518
+ # store for later
1519
+ branch_dict[elm] = ii
1520
+
1521
+ # handle """superconductor branches"""
1522
+ data.detect_superconductor_at(ii)
1523
+
1524
+ ii += 1
1525
+
1526
+ # DC-lines
1527
+ for i, elm in enumerate(circuit.dc_lines):
1528
+ # generic stuff
1529
+ fill_parent_branch(i=ii,
1530
+ elm=elm,
1531
+ data=data,
1532
+ bus_dict=bus_dict,
1533
+ t_idx=t_idx,
1534
+ time_series=time_series)
1535
+
1536
+ data.R[ii] = elm.R_corrected if apply_temperature else elm.R
1537
+
1538
+ if branch_tolerance_mode == BranchImpedanceMode.Lower:
1539
+ data.R[ii] *= (1 - elm.tolerance / 100.0)
1540
+ elif branch_tolerance_mode == BranchImpedanceMode.Upper:
1541
+ data.R[ii] *= (1 + elm.tolerance / 100.0)
1542
+
1543
+ # store for later
1544
+ branch_dict[elm] = ii
1545
+
1546
+ data.dc[ii] = 1
1547
+
1548
+ # handle """superconductor branches"""
1549
+ data.detect_superconductor_at(ii)
1550
+
1551
+ ii += 1
1552
+
1553
+ # 2-winding transformers
1554
+ for i, elm in enumerate(circuit.transformers2w):
1555
+ fill_controllable_branch(ii=ii,
1556
+ elm=elm,
1557
+ data=data,
1558
+ ctrl_data=ctrl_data,
1559
+ bus_data=bus_data,
1560
+ bus_dict=bus_dict,
1561
+ t_idx=t_idx,
1562
+ time_series=time_series,
1563
+ opf_results=opf_results,
1564
+ use_stored_guess=use_stored_guess,
1565
+ bus_voltage_used=bus_voltage_used,
1566
+ Sbase=circuit.Sbase,
1567
+ control_taps_modules=control_taps_modules,
1568
+ control_taps_phase=control_taps_phase,
1569
+ logger=logger)
1570
+
1571
+ data.R[ii] = elm.R_corrected if apply_temperature else elm.R
1572
+
1573
+ if branch_tolerance_mode == BranchImpedanceMode.Lower:
1574
+ data.R[ii] *= (1 - elm.tolerance / 100.0)
1575
+ elif branch_tolerance_mode == BranchImpedanceMode.Upper:
1576
+ data.R[ii] *= (1 + elm.tolerance / 100.0)
1577
+
1578
+ data.X[ii] = elm.X
1579
+ data.G[ii] = elm.G
1580
+ data.B[ii] = elm.B
1581
+
1582
+ data.R0[ii] = elm.R0
1583
+ data.X0[ii] = elm.X0
1584
+ data.G0[ii] = elm.G0
1585
+ data.B0[ii] = elm.B0
1586
+
1587
+ data.R2[ii] = elm.R2
1588
+ data.X2[ii] = elm.X2
1589
+ data.G2[ii] = elm.G2
1590
+ data.B2[ii] = elm.B2
1591
+
1592
+ if fill_three_phase:
1593
+ k3 = 3 * ii + idx3
1594
+ (data.Yff3[k3, :],
1595
+ data.Yft3[k3, :],
1596
+ data.Ytf3[k3, :],
1597
+ data.Ytt3[k3, :]) = elm.transformer_admittance(vtap_f=data.virtual_tap_f[ii],
1598
+ vtap_t=data.virtual_tap_t[ii],
1599
+ logger=logger)
1600
+ data.phA[ii] = 1
1601
+ data.phB[ii] = 1
1602
+ data.phC[ii] = 1
1603
+
1604
+ data.conn[ii] = elm.conn
1605
+ data.m_taps[ii] = elm.tap_changer.tap_modules_array
1606
+ data.tau_taps[ii] = elm.tap_changer.tap_angles_array
1607
+
1608
+ # store for later
1609
+ branch_dict[elm] = ii
1610
+
1611
+ # handle """superconductor branches"""
1612
+ data.detect_superconductor_at(ii)
1613
+
1614
+ ii += 1
1615
+
1616
+ # windings
1617
+ for i, elm in enumerate(circuit.windings):
1618
+
1619
+ if elm.bus_from is not None and elm.bus_to is not None:
1620
+ # generic stuff
1621
+ fill_controllable_branch(ii=ii,
1622
+ elm=elm,
1623
+ data=data,
1624
+ ctrl_data=ctrl_data,
1625
+ bus_data=bus_data,
1626
+ bus_dict=bus_dict,
1627
+ t_idx=t_idx,
1628
+ time_series=time_series,
1629
+ opf_results=opf_results,
1630
+ use_stored_guess=use_stored_guess,
1631
+ bus_voltage_used=bus_voltage_used,
1632
+ Sbase=circuit.Sbase,
1633
+ control_taps_modules=control_taps_modules,
1634
+ control_taps_phase=control_taps_phase,
1635
+ logger=logger)
1636
+
1637
+ data.R[ii] = elm.R_corrected if apply_temperature else elm.R
1638
+
1639
+ if branch_tolerance_mode == BranchImpedanceMode.Lower:
1640
+ data.R[ii] *= (1 - elm.tolerance / 100.0)
1641
+ elif branch_tolerance_mode == BranchImpedanceMode.Upper:
1642
+ data.R[ii] *= (1 + elm.tolerance / 100.0)
1643
+
1644
+ data.X[ii] = elm.X
1645
+ data.G[ii] = elm.G
1646
+ data.B[ii] = elm.B
1647
+
1648
+ data.R0[ii] = elm.R0
1649
+ data.X0[ii] = elm.X0
1650
+ data.G0[ii] = elm.G0
1651
+ data.B0[ii] = elm.B0
1652
+
1653
+ data.R2[ii] = elm.R2
1654
+ data.X2[ii] = elm.X2
1655
+ data.G2[ii] = elm.G2
1656
+ data.B2[ii] = elm.B2
1657
+
1658
+ data.conn[ii] = elm.conn
1659
+ data.m_taps[ii] = elm.tap_changer.tap_modules_array
1660
+ data.tau_taps[ii] = elm.tap_changer.tap_angles_array
1661
+
1662
+ # store for later
1663
+ branch_dict[elm] = ii
1664
+
1665
+ # handle """superconductor branches"""
1666
+ data.detect_superconductor_at(ii)
1667
+
1668
+ ii += 1
1669
+
1670
+ else:
1671
+ logger.add_error("Ill connected winding", device=elm.idtag)
1672
+
1673
+ # UPFC
1674
+ for i, elm in enumerate(circuit.upfc_devices):
1675
+ # generic stuff
1676
+ fill_controllable_branch(ii=ii,
1677
+ elm=elm,
1678
+ data=data,
1679
+ ctrl_data=ctrl_data,
1680
+ bus_data=bus_data,
1681
+ bus_dict=bus_dict,
1682
+ t_idx=t_idx,
1683
+ time_series=time_series,
1684
+ opf_results=opf_results,
1685
+ use_stored_guess=use_stored_guess,
1686
+ bus_voltage_used=bus_voltage_used,
1687
+ Sbase=circuit.Sbase,
1688
+ control_taps_modules=control_taps_modules,
1689
+ control_taps_phase=control_taps_phase,
1690
+ logger=logger)
1691
+ ysh1 = elm.get_ysh1()
1692
+ data.R[ii] = elm.R
1693
+ data.X[ii] = elm.X
1694
+ data.G[ii] = ysh1.real
1695
+ data.B[ii] = ysh1.imag
1696
+
1697
+ ysh0 = elm.get_ysh0()
1698
+ data.R0[ii] = elm.R0
1699
+ data.X0[ii] = elm.X0
1700
+ data.G0[ii] = ysh0.real
1701
+ data.B0[ii] = ysh0.imag
1702
+
1703
+ ysh2 = elm.get_ysh2()
1704
+ data.R2[ii] = elm.R2
1705
+ data.X2[ii] = elm.X2
1706
+ data.G2[ii] = ysh2.real
1707
+ data.B2[ii] = ysh2.imag
1708
+
1709
+ # store for later
1710
+ branch_dict[elm] = ii
1711
+
1712
+ # handle """superconductor branches"""
1713
+ data.detect_superconductor_at(ii)
1714
+
1715
+ ii += 1
1716
+
1717
+ # Series reactance
1718
+ for i, elm in enumerate(circuit.series_reactances):
1719
+ # generic stuff
1720
+ fill_parent_branch(i=ii,
1721
+ elm=elm,
1722
+ data=data,
1723
+ bus_dict=bus_dict,
1724
+ t_idx=t_idx,
1725
+ time_series=time_series)
1726
+
1727
+ data.R[ii] = elm.R_corrected if apply_temperature else elm.R
1728
+
1729
+ if branch_tolerance_mode == BranchImpedanceMode.Lower:
1730
+ data.R[ii] *= (1 - elm.tolerance / 100.0)
1731
+ elif branch_tolerance_mode == BranchImpedanceMode.Upper:
1732
+ data.R[ii] *= (1 + elm.tolerance / 100.0)
1733
+
1734
+ data.X[ii] = elm.X
1735
+
1736
+ data.R0[ii] = elm.R0
1737
+ data.X0[ii] = elm.X0
1738
+
1739
+ data.R2[ii] = elm.R2
1740
+ data.X2[ii] = elm.X2
1741
+
1742
+ # store for later
1743
+ branch_dict[elm] = ii
1744
+
1745
+ # handle """superconductor branches"""
1746
+ data.detect_superconductor_at(ii)
1747
+
1748
+ ii += 1
1749
+
1750
+ # Switches
1751
+ for i, elm in enumerate(circuit.switch_devices):
1752
+ # generic stuff
1753
+ fill_parent_branch(i=ii,
1754
+ elm=elm,
1755
+ data=data,
1756
+ bus_dict=bus_dict,
1757
+ t_idx=t_idx,
1758
+ time_series=time_series)
1759
+
1760
+ if fill_three_phase:
1761
+ data.phA[ii] = 1
1762
+ data.phB[ii] = 1
1763
+ data.phC[ii] = 1
1764
+
1765
+ data.R[ii] = elm.R
1766
+ data.X[ii] = elm.X
1767
+
1768
+ # store for later
1769
+ branch_dict[elm] = ii
1770
+
1771
+ # handle """superconductor branches"""
1772
+ data.detect_superconductor_at(ii)
1773
+
1774
+ ii += 1
1775
+
1776
+ return branch_dict
1777
+
1778
+
1779
+ def set_control_dev(k: int,
1780
+ f: int,
1781
+ t: int,
1782
+ control: ConverterControlType,
1783
+ control_dev: Bus | BRANCH_TYPES | None,
1784
+ control_val: float,
1785
+ control_bus_idx: IntVec,
1786
+ control_branch_idx: IntVec,
1787
+ bus_dict: Dict[Bus, int],
1788
+ bus_data: BusData,
1789
+ bus_voltage_used: BoolVec,
1790
+ use_stored_guess: bool,
1791
+ logger: Logger):
1792
+ """
1793
+
1794
+ :param k: device index
1795
+ :param f:
1796
+ :param t:
1797
+ :param control: ConverterControlType
1798
+ :param control_dev: control device
1799
+ :param control_val: control value
1800
+ :param control_bus_idx: array to be filled in
1801
+ :param control_branch_idx: array to be filled in
1802
+ :param bus_dict: dictionary to be filled in
1803
+ :param bus_data: bus data
1804
+ :param bus_voltage_used: used bus voltage
1805
+ :param use_stored_guess:
1806
+ :param logger:
1807
+ """
1808
+ if control_dev is not None:
1809
+ if control_dev.device_type == DeviceType.BusDevice:
1810
+
1811
+ bus_idx = bus_dict[control_dev]
1812
+
1813
+ control_bus_idx[k] = bus_idx
1814
+
1815
+ if control == ConverterControlType.Vm_ac:
1816
+
1817
+ set_bus_control_voltage_vsc(i=bus_idx,
1818
+ j=-1,
1819
+ remote_control=False,
1820
+ bus_name=str(bus_data.names[bus_idx]),
1821
+ bus_voltage_used=bus_voltage_used,
1822
+ bus_data=bus_data,
1823
+ candidate_Vm=control_val,
1824
+ use_stored_guess=use_stored_guess,
1825
+ logger=logger)
1826
+
1827
+ elif control == ConverterControlType.Vm_dc:
1828
+
1829
+ set_bus_control_voltage_vsc(i=bus_idx,
1830
+ j=-1,
1831
+ remote_control=False,
1832
+ bus_name=str(bus_data.names[bus_idx]),
1833
+ bus_voltage_used=bus_voltage_used,
1834
+ bus_data=bus_data,
1835
+ candidate_Vm=control_val,
1836
+ use_stored_guess=use_stored_guess,
1837
+ logger=logger)
1838
+
1839
+ else:
1840
+ # TODO: the formulation does not allow for VSC remote control yet
1841
+ # control_branch_idx[k] = branch_dict[control_dev]
1842
+ control_branch_idx[k] = k
1843
+
1844
+ else:
1845
+ if control == ConverterControlType.Vm_ac:
1846
+ control_bus_idx[k] = t
1847
+
1848
+ set_bus_control_voltage_vsc(i=t,
1849
+ j=-1,
1850
+ remote_control=False,
1851
+ bus_name=str(bus_data.names[t]),
1852
+ bus_voltage_used=bus_voltage_used,
1853
+ bus_data=bus_data,
1854
+ candidate_Vm=control_val,
1855
+ use_stored_guess=use_stored_guess,
1856
+ logger=logger)
1857
+
1858
+ elif control == ConverterControlType.Vm_dc:
1859
+ control_bus_idx[k] = f
1860
+
1861
+ set_bus_control_voltage_vsc(i=f,
1862
+ j=-1,
1863
+ remote_control=False,
1864
+ bus_name=str(bus_data.names[f]),
1865
+ bus_voltage_used=bus_voltage_used,
1866
+ bus_data=bus_data,
1867
+ candidate_Vm=control_val,
1868
+ use_stored_guess=use_stored_guess,
1869
+ logger=logger)
1870
+
1871
+ else:
1872
+ # control_branch_idx[k] = len(branch_dict) + k # TODO: why?
1873
+ control_branch_idx[k] = k
1874
+
1875
+
1876
+ def get_vsc_data(
1877
+ data: VscData,
1878
+ circuit: MultiCircuit,
1879
+ bus_dict: Dict[Bus, int],
1880
+ branch_dict: Dict[BRANCH_TYPES, int],
1881
+ bus_data: BusData,
1882
+ bus_voltage_used: BoolVec,
1883
+ t_idx: int = -1,
1884
+ time_series: bool = False,
1885
+ opf_results: VALID_OPF_RESULTS | None = None,
1886
+ use_stored_guess: bool = False,
1887
+ control_remote_voltage: bool = True,
1888
+ logger: Logger = Logger()
1889
+ ) -> None:
1890
+ """
1891
+ Compile VscData for a time step or the snapshot
1892
+ :param data: VscData
1893
+ :param circuit: MultiCircuit
1894
+ :param bus_dict: Dictionary of buses to compute the indices
1895
+ :param branch_dict: Dictionary of branches to compute the indices
1896
+ :param bus_data: BusData
1897
+ :param bus_voltage_used:
1898
+ :param t_idx: time index (-1 is useless)
1899
+ :param time_series: compile time series? else the sanpshot is compiled
1900
+ :param opf_results: OptimalPowerFlowResults
1901
+ :param use_stored_guess: use the stored voltage ?
1902
+ :param control_remote_voltage: Control RemoteVoltage
1903
+ :param logger: Logger
1904
+ :return: VscData
1905
+ """
1906
+
1907
+ ii = 0
1908
+
1909
+ # VSC
1910
+ for i, elm in enumerate(circuit.vsc_devices):
1911
+ # generic stuff
1912
+ data.names[i] = elm.name
1913
+ data.idtag[i] = elm.idtag
1914
+
1915
+ data.mttf[i] = elm.mttf
1916
+ data.mttr[i] = elm.mttr
1917
+ f = bus_dict[elm.bus_from]
1918
+ t = bus_dict[elm.bus_to]
1919
+ data.original_idx[i] = i
1920
+
1921
+ data.F[i] = f
1922
+ data.T[i] = t
1923
+
1924
+ if time_series:
1925
+ data.active[i] = elm.active_prof[t_idx]
1926
+ data.rates[i] = elm.rate_prof[t_idx]
1927
+ data.contingency_rates[i] = elm.rate_prof[t_idx] * elm.contingency_factor_prof[t_idx]
1928
+ data.protection_rates[i] = elm.rate_prof[t_idx] * elm.protection_rating_factor_prof[t_idx]
1929
+
1930
+ data.overload_cost[i] = elm.Cost_prof[t_idx]
1931
+
1932
+ data.control1[ii] = elm.control1_prof[t_idx]
1933
+ data.control2[ii] = elm.control2_prof[t_idx]
1934
+ data.control1_val[ii] = elm.control1_val_prof[t_idx]
1935
+ data.control2_val[ii] = elm.control2_val_prof[t_idx]
1936
+ set_control_dev(k=ii, f=f, t=t,
1937
+ control=data.control1[ii],
1938
+ control_dev=elm.control1_dev_prof[t_idx],
1939
+ control_val=data.control1_val[ii],
1940
+ control_bus_idx=data.control1_bus_idx,
1941
+ control_branch_idx=data.control1_branch_idx,
1942
+ bus_dict=bus_dict,
1943
+ bus_data=bus_data,
1944
+ bus_voltage_used=bus_voltage_used,
1945
+ use_stored_guess=use_stored_guess,
1946
+ logger=logger)
1947
+ set_control_dev(k=ii, f=f, t=t,
1948
+ control=data.control2[ii],
1949
+ control_dev=elm.control2_dev_prof[t_idx],
1950
+ control_val=data.control2_val[ii],
1951
+ control_bus_idx=data.control2_bus_idx,
1952
+ control_branch_idx=data.control2_branch_idx,
1953
+ bus_dict=bus_dict,
1954
+ bus_data=bus_data,
1955
+ bus_voltage_used=bus_voltage_used,
1956
+ use_stored_guess=use_stored_guess,
1957
+ logger=logger)
1958
+
1959
+ else:
1960
+ data.active[i] = elm.active
1961
+ data.rates[i] = elm.rate
1962
+ data.contingency_rates[i] = elm.rate * elm.contingency_factor
1963
+ data.protection_rates[i] = elm.rate * elm.protection_rating_factor
1964
+
1965
+ data.overload_cost[i] = elm.Cost
1966
+
1967
+ data.control1[ii] = elm.control1
1968
+ data.control2[ii] = elm.control2
1969
+ data.control1_val[ii] = elm.control1_val
1970
+ data.control2_val[ii] = elm.control2_val
1971
+ set_control_dev(k=ii, f=f, t=t,
1972
+ control=data.control1[ii],
1973
+ control_dev=elm.control1_dev,
1974
+ control_val=data.control1_val[ii],
1975
+ control_bus_idx=data.control1_bus_idx,
1976
+ control_branch_idx=data.control1_branch_idx,
1977
+ bus_dict=bus_dict,
1978
+ bus_data=bus_data,
1979
+ bus_voltage_used=bus_voltage_used,
1980
+ use_stored_guess=use_stored_guess,
1981
+ logger=logger)
1982
+
1983
+ set_control_dev(k=ii, f=f, t=t,
1984
+ control=data.control2[ii],
1985
+ control_dev=elm.control2_dev,
1986
+ control_val=data.control2_val[ii],
1987
+ control_bus_idx=data.control2_bus_idx,
1988
+ control_branch_idx=data.control2_branch_idx,
1989
+ bus_dict=bus_dict,
1990
+ bus_data=bus_data,
1991
+ bus_voltage_used=bus_voltage_used,
1992
+ use_stored_guess=use_stored_guess,
1993
+ logger=logger)
1994
+
1995
+ data.contingency_enabled[i] = int(elm.contingency_enabled)
1996
+ data.monitor_loading[i] = int(elm.monitor_loading)
1997
+
1998
+ data.Kdp[ii] = elm.kdp
1999
+ data.alpha1[ii] = elm.alpha1
2000
+ data.alpha2[ii] = elm.alpha2
2001
+ data.alpha3[ii] = elm.alpha3
2002
+
2003
+ ii += 1
2004
+
2005
+
2006
+ def get_hvdc_data(data: HvdcData,
2007
+ circuit: MultiCircuit,
2008
+ bus_dict,
2009
+ bus_types,
2010
+ bus_data: BusData,
2011
+ bus_voltage_used: BoolVec,
2012
+ t_idx=-1,
2013
+ time_series=False,
2014
+ opf_results: Union[OptimalPowerFlowResults, OptimalNetTransferCapacityResults, None] = None,
2015
+ use_stored_guess: bool = False,
2016
+ logger: Logger = Logger()):
2017
+ """
2018
+
2019
+ :param data:
2020
+ :param circuit:
2021
+ :param bus_dict:
2022
+ :param bus_types:
2023
+ :param bus_data:
2024
+ :param bus_voltage_used:
2025
+ :param t_idx:
2026
+ :param time_series:
2027
+ :param opf_results:
2028
+ :param use_stored_guess:
2029
+ :param logger:
2030
+ :return:
2031
+ """
2032
+
2033
+ # HVDC
2034
+ for i, elm in enumerate(circuit.hvdc_lines):
2035
+
2036
+ # generic stuff
2037
+ f = bus_dict[elm.bus_from]
2038
+ t = bus_dict[elm.bus_to]
2039
+ data.original_idx[i] = i
2040
+ data.dispatchable[i] = int(elm.dispatchable)
2041
+ data.F[i] = f
2042
+ data.T[i] = t
2043
+
2044
+ # hvdc values
2045
+ data.names[i] = elm.name
2046
+ data.idtag[i] = elm.idtag
2047
+
2048
+ if time_series:
2049
+ data.active[i] = elm.active_prof[t_idx]
2050
+ data.rates[i] = elm.rate_prof[t_idx]
2051
+ data.contingency_rates[i] = elm.rate_prof[t_idx] * elm.contingency_factor_prof[t_idx]
2052
+ data.protection_rates[i] = elm.rate_prof[t_idx] * elm.protection_rating_factor_prof[t_idx]
2053
+ data.angle_droop[i] = elm.angle_droop_prof[t_idx]
2054
+
2055
+ if opf_results is not None:
2056
+ # if we are taking the values from the OPF, do not allow the free mode
2057
+ data.control_mode[i] = HvdcControlType.type_1_Pset
2058
+ data.Pset[i] = opf_results.hvdc_Pf[t_idx, i]
2059
+ else:
2060
+ data.control_mode[i] = elm.control_mode
2061
+ data.Pset[i] = elm.Pset_prof[t_idx]
2062
+
2063
+ data.Vset_f[i] = elm.Vset_f_prof[t_idx]
2064
+ data.Vset_t[i] = elm.Vset_t_prof[t_idx]
2065
+
2066
+ # hack the bus types to believe they are PV
2067
+ if elm.active_prof[t_idx]:
2068
+ set_bus_control_voltage_hvdc(i=f,
2069
+ j=-1,
2070
+ remote_control=False,
2071
+ bus_name=elm.bus_from.name,
2072
+ bus_data=bus_data,
2073
+ bus_voltage_used=bus_voltage_used,
2074
+ candidate_Vm=elm.Vset_f_prof[t_idx],
2075
+ use_stored_guess=use_stored_guess,
2076
+ logger=logger)
2077
+
2078
+ set_bus_control_voltage_hvdc(i=t,
2079
+ j=-1,
2080
+ remote_control=False,
2081
+ bus_name=elm.bus_to.name,
2082
+ bus_data=bus_data,
2083
+ bus_voltage_used=bus_voltage_used,
2084
+ candidate_Vm=elm.Vset_t_prof[t_idx],
2085
+ use_stored_guess=use_stored_guess,
2086
+ logger=logger)
2087
+
2088
+ else:
2089
+ data.active[i] = elm.active
2090
+ data.rates[i] = elm.rate
2091
+ data.contingency_rates[i] = elm.rate * elm.contingency_factor
2092
+ data.protection_rates[i] = elm.rate * elm.protection_rating_factor
2093
+ data.angle_droop[i] = elm.angle_droop
2094
+ data.r[i] = elm.r
2095
+
2096
+ if opf_results is not None:
2097
+ # if we are taking the values from the OPF, do not allow the free mode
2098
+ data.control_mode[i] = HvdcControlType.type_1_Pset
2099
+ data.Pset[i] = opf_results.hvdc_Pf[i]
2100
+ else:
2101
+ data.control_mode[i] = elm.control_mode
2102
+ data.Pset[i] = elm.Pset
2103
+
2104
+ data.Vset_f[i] = elm.Vset_f
2105
+ data.Vset_t[i] = elm.Vset_t
2106
+
2107
+ # hack the bus types to believe they are PV
2108
+ if elm.active:
2109
+ set_bus_control_voltage_hvdc(i=f,
2110
+ j=-1,
2111
+ remote_control=False,
2112
+ bus_name=elm.bus_from.name,
2113
+ bus_data=bus_data,
2114
+ bus_voltage_used=bus_voltage_used,
2115
+ candidate_Vm=elm.Vset_f,
2116
+ use_stored_guess=use_stored_guess,
2117
+ logger=logger)
2118
+
2119
+ set_bus_control_voltage_hvdc(i=t,
2120
+ j=-1,
2121
+ remote_control=False,
2122
+ bus_name=elm.bus_to.name,
2123
+ bus_data=bus_data,
2124
+ bus_voltage_used=bus_voltage_used,
2125
+ candidate_Vm=elm.Vset_t,
2126
+ use_stored_guess=use_stored_guess,
2127
+ logger=logger)
2128
+
2129
+ data.Vnf[i] = elm.bus_from.Vnom
2130
+ data.Vnt[i] = elm.bus_to.Vnom
2131
+
2132
+ (data.Qmin_f[i], data.Qmax_f[i],
2133
+ data.Qmin_t[i], data.Qmax_t[i]) = elm.get_q_limits(P=data.Pset[i])
2134
+
2135
+
2136
+ def get_fluid_node_data(data: FluidNodeData,
2137
+ circuit: MultiCircuit,
2138
+ t_idx=-1,
2139
+ time_series=False) -> Dict[str, int]:
2140
+ """
2141
+
2142
+ :param data:
2143
+ :param circuit:
2144
+ :param time_series:
2145
+ :param t_idx:
2146
+ :return:
2147
+ """
2148
+ plant_dict: Dict[str, int] = dict()
2149
+
2150
+ for k, elm in enumerate(circuit.get_fluid_nodes()):
2151
+ plant_dict[elm.idtag] = k
2152
+
2153
+ data.names[k] = elm.name
2154
+ data.idtag[k] = elm.idtag
2155
+
2156
+ # Convert input data in hm3 to m3
2157
+ data.min_level[k] = 1e6 * elm.min_level
2158
+ data.max_level[k] = 1e6 * elm.max_level
2159
+ data.initial_level[k] = 1e6 * elm.initial_level
2160
+
2161
+ if time_series:
2162
+ data.inflow[k] = elm.inflow_prof[t_idx]
2163
+ data.spillage_cost[k] = elm.spillage_cost_prof[t_idx]
2164
+ data.max_soc[k] = elm.max_soc_prof[t_idx]
2165
+ data.min_soc[k] = elm.min_soc_prof[t_idx]
2166
+ else:
2167
+ data.inflow[k] = elm.inflow
2168
+ data.spillage_cost[k] = elm.spillage_cost
2169
+ data.max_soc[k] = elm.max_soc
2170
+ data.min_soc[k] = elm.min_soc
2171
+
2172
+ return plant_dict
2173
+
2174
+
2175
+ def get_fluid_turbine_data(data: FluidTurbineData,
2176
+ circuit: MultiCircuit,
2177
+ plant_dict: Dict[str, int],
2178
+ gen_dict: Dict[str, int],
2179
+ t_idx=-1) -> FluidTurbineData:
2180
+ """
2181
+
2182
+ :param data:
2183
+ :param circuit:
2184
+ :param plant_dict:
2185
+ :param gen_dict:
2186
+ :param t_idx:
2187
+ :return:
2188
+ """
2189
+ for k, elm in enumerate(circuit.get_fluid_turbines()):
2190
+ data.plant_idx[k] = plant_dict[elm.plant.idtag]
2191
+ data.generator_idx[k] = gen_dict[elm.generator.idtag]
2192
+
2193
+ data.names[k] = elm.name
2194
+ data.idtag[k] = elm.idtag
2195
+
2196
+ data.efficiency[k] = elm.efficiency
2197
+ data.max_flow_rate[k] = elm.max_flow_rate
2198
+
2199
+ return data
2200
+
2201
+
2202
+ def get_fluid_pump_data(data: FluidPumpData,
2203
+ circuit: MultiCircuit,
2204
+ plant_dict: Dict[str, int],
2205
+ gen_dict: Dict[str, int],
2206
+ t_idx=-1) -> FluidPumpData:
2207
+ """
2208
+
2209
+ :param data:
2210
+ :param circuit:
2211
+ :param plant_dict:
2212
+ :param gen_dict:
2213
+ :param t_idx:
2214
+ :return:
2215
+ """
2216
+
2217
+ for k, elm in enumerate(circuit.get_fluid_pumps()):
2218
+ data.plant_idx[k] = plant_dict[elm.plant.idtag]
2219
+ data.generator_idx[k] = gen_dict[elm.generator.idtag]
2220
+
2221
+ data.names[k] = elm.name
2222
+ data.idtag[k] = elm.idtag
2223
+
2224
+ data.efficiency[k] = elm.efficiency
2225
+ data.max_flow_rate[k] = elm.max_flow_rate
2226
+
2227
+ return data
2228
+
2229
+
2230
+ def get_fluid_p2x_data(data: FluidP2XData,
2231
+ circuit: MultiCircuit,
2232
+ plant_dict: Dict[str, int],
2233
+ gen_dict: Dict[str, int],
2234
+ t_idx=-1) -> FluidP2XData:
2235
+ """
2236
+
2237
+ :param data:
2238
+ :param circuit:
2239
+ :param plant_dict:
2240
+ :param gen_dict:
2241
+ :param t_idx:
2242
+ :return:
2243
+ """
2244
+
2245
+ for k, elm in enumerate(circuit.get_fluid_p2xs()):
2246
+ data.plant_idx[k] = plant_dict[elm.plant.idtag]
2247
+ data.generator_idx[k] = gen_dict[elm.generator.idtag]
2248
+
2249
+ data.names[k] = elm.name
2250
+ data.idtag[k] = elm.idtag
2251
+
2252
+ data.efficiency[k] = elm.efficiency
2253
+ data.max_flow_rate[k] = elm.max_flow_rate
2254
+
2255
+ return data
2256
+
2257
+
2258
+ def get_fluid_path_data(data: FluidPathData,
2259
+ circuit: MultiCircuit,
2260
+ plant_dict: Dict[str, int],
2261
+ t_idx=-1) -> FluidPathData:
2262
+ """
2263
+
2264
+ :param data: FluidPathData
2265
+ :param circuit:
2266
+ :param plant_dict:
2267
+ :param t_idx:
2268
+ :return:
2269
+ """
2270
+
2271
+ for k, elm in enumerate(circuit.get_fluid_paths()):
2272
+ data.names[k] = elm.name
2273
+ data.idtag[k] = elm.idtag
2274
+
2275
+ # pass idx, check
2276
+ data.source_idx[k] = plant_dict[elm.source.idtag]
2277
+ data.target_idx[k] = plant_dict[elm.target.idtag]
2278
+
2279
+ data.min_flow[k] = elm.min_flow
2280
+ data.max_flow[k] = elm.max_flow
2281
+
2282
+ return data
2283
+
2284
+
2285
+ def compile_numerical_circuit_at(circuit: MultiCircuit,
2286
+ t_idx: Union[int, None] = None,
2287
+ apply_temperature=False,
2288
+ branch_tolerance_mode=BranchImpedanceMode.Specified,
2289
+ opf_results: VALID_OPF_RESULTS | None = None,
2290
+ use_stored_guess=False,
2291
+ bus_dict: Union[Dict[Bus, int], None] = None,
2292
+ areas_dict: Union[Dict[Area, int], None] = None,
2293
+ control_taps_modules: bool = True,
2294
+ control_taps_phase: bool = True,
2295
+ control_remote_voltage: bool = True,
2296
+ fill_gep: bool = False,
2297
+ fill_three_phase: bool = False,
2298
+ logger=Logger()) -> NumericalCircuit:
2299
+ """
2300
+ Compile a NumericalCircuit from a MultiCircuit
2301
+ :param circuit: MultiCircuit instance
2302
+ :param t_idx: time step from the time series to gather data from, if None the snapshot is used
2303
+ :param apply_temperature: apply the branch temperature correction
2304
+ :param branch_tolerance_mode: Branch tolerance mode
2305
+ :param opf_results:(optional) OptimalPowerFlowResults instance
2306
+ :param use_stored_guess: use the storage voltage guess?
2307
+ :param bus_dict (optional) Dict[Bus, int] dictionary
2308
+ :param areas_dict (optional) Dict[Area, int] dictionary
2309
+ :param control_taps_modules: control taps modules?
2310
+ :param control_taps_phase: control taps phase?
2311
+ :param control_remote_voltage: control remote voltage?
2312
+ :param fill_gep: fill generation expansion planning parameters?
2313
+ :param fill_three_phase:
2314
+ :param logger: Logger instance
2315
+ :return: NumericalCircuit instance
2316
+ """
2317
+
2318
+ # if any valid time index is specified, then the data is compiled from the time series
2319
+ time_series = t_idx is not None
2320
+
2321
+ bus_voltage_used = np.zeros(circuit.get_bus_number(), dtype=bool)
2322
+ ngen = circuit.get_generators_number()
2323
+ nbatt = circuit.get_batteries_number()
2324
+ # declare the numerical circuit
2325
+ nc = NumericalCircuit(
2326
+ nbus=circuit.get_bus_number(),
2327
+ nbr=circuit.get_branch_number(add_vsc=False,
2328
+ add_hvdc=False,
2329
+ add_switch=True),
2330
+ nhvdc=circuit.get_hvdc_number(),
2331
+ nvsc=circuit.get_vsc_number(),
2332
+ nload=circuit.get_load_like_device_number(),
2333
+ ngen=ngen,
2334
+ nbatt=nbatt,
2335
+ nshunt=circuit.get_shunt_like_device_number(),
2336
+ nfluidnode=circuit.get_fluid_nodes_number(),
2337
+ nfluidturbine=circuit.get_fluid_turbines_number(),
2338
+ nfluidpump=circuit.get_fluid_pumps_number(),
2339
+ nfluidp2x=circuit.get_fluid_p2xs_number(),
2340
+ nfluidpath=circuit.get_fluid_paths_number(),
2341
+ sbase=circuit.Sbase,
2342
+ t_idx=t_idx
2343
+ )
2344
+
2345
+ if bus_dict is None:
2346
+ bus_dict = {bus: i for i, bus in enumerate(circuit.buses)}
2347
+
2348
+ if areas_dict is None:
2349
+ areas_dict = {elm: i for i, elm in enumerate(circuit.areas)}
2350
+
2351
+ get_bus_data(
2352
+ bus_data=nc.bus_data, # filled here
2353
+ circuit=circuit,
2354
+ t_idx=t_idx,
2355
+ time_series=time_series,
2356
+ areas_dict=areas_dict,
2357
+ use_stored_guess=use_stored_guess,
2358
+ fill_three_phase=fill_three_phase
2359
+ )
2360
+
2361
+ gen_dict = get_generator_data(
2362
+ data=nc.generator_data, # filled here
2363
+ circuit=circuit,
2364
+ bus_dict=bus_dict,
2365
+ bus_data=nc.bus_data,
2366
+ t_idx=t_idx,
2367
+ time_series=time_series,
2368
+ bus_voltage_used=bus_voltage_used,
2369
+ logger=logger,
2370
+ opf_results=opf_results,
2371
+ use_stored_guess=use_stored_guess,
2372
+ control_remote_voltage=control_remote_voltage,
2373
+ fill_three_phase= fill_three_phase
2374
+ )
2375
+
2376
+ get_battery_data(
2377
+ data=nc.battery_data, # filled here
2378
+ circuit=circuit,
2379
+ bus_dict=bus_dict,
2380
+ bus_data=nc.bus_data,
2381
+ t_idx=t_idx,
2382
+ time_series=time_series,
2383
+ bus_voltage_used=bus_voltage_used,
2384
+ logger=logger,
2385
+ opf_results=opf_results,
2386
+ use_stored_guess=use_stored_guess,
2387
+ control_remote_voltage=control_remote_voltage,
2388
+ fill_three_phase=fill_three_phase
2389
+ )
2390
+
2391
+ get_shunt_data(
2392
+ data=nc.shunt_data, # filled here
2393
+ circuit=circuit,
2394
+ bus_dict=bus_dict,
2395
+ bus_voltage_used=bus_voltage_used,
2396
+ bus_data=nc.bus_data,
2397
+ t_idx=t_idx,
2398
+ time_series=time_series,
2399
+ logger=logger,
2400
+ use_stored_guess=use_stored_guess,
2401
+ control_remote_voltage=control_remote_voltage,
2402
+ fill_three_phase=fill_three_phase
2403
+ )
2404
+
2405
+ get_load_data(
2406
+ data=nc.load_data,
2407
+ circuit=circuit,
2408
+ bus_dict=bus_dict,
2409
+ bus_voltage_used=bus_voltage_used,
2410
+ bus_data=nc.bus_data,
2411
+ logger=logger,
2412
+ t_idx=t_idx,
2413
+ time_series=time_series,
2414
+ opf_results=opf_results,
2415
+ use_stored_guess=use_stored_guess,
2416
+ fill_three_phase=fill_three_phase
2417
+ )
2418
+
2419
+ branch_dict = get_branch_data(
2420
+ data=nc.passive_branch_data,
2421
+ ctrl_data=nc.active_branch_data,
2422
+ circuit=circuit,
2423
+ t_idx=t_idx,
2424
+ time_series=time_series,
2425
+ bus_dict=bus_dict,
2426
+ bus_data=nc.bus_data,
2427
+ bus_voltage_used=bus_voltage_used,
2428
+ apply_temperature=apply_temperature,
2429
+ branch_tolerance_mode=branch_tolerance_mode,
2430
+ opf_results=opf_results,
2431
+ use_stored_guess=use_stored_guess,
2432
+ control_taps_modules=control_taps_modules,
2433
+ control_taps_phase=control_taps_phase,
2434
+ control_remote_voltage=control_remote_voltage,
2435
+ fill_three_phase=fill_three_phase
2436
+ )
2437
+
2438
+ get_vsc_data(
2439
+ data=nc.vsc_data,
2440
+ circuit=circuit,
2441
+ t_idx=t_idx,
2442
+ time_series=time_series,
2443
+ bus_dict=bus_dict,
2444
+ branch_dict=branch_dict,
2445
+ bus_data=nc.bus_data,
2446
+ bus_voltage_used=bus_voltage_used,
2447
+ opf_results=opf_results,
2448
+ use_stored_guess=use_stored_guess,
2449
+ control_remote_voltage=control_remote_voltage,
2450
+ )
2451
+
2452
+ get_hvdc_data(
2453
+ data=nc.hvdc_data,
2454
+ circuit=circuit,
2455
+ t_idx=t_idx,
2456
+ time_series=time_series,
2457
+ bus_dict=bus_dict,
2458
+ bus_types=nc.bus_data.bus_types,
2459
+ bus_data=nc.bus_data,
2460
+ bus_voltage_used=bus_voltage_used,
2461
+ opf_results=opf_results,
2462
+ use_stored_guess=use_stored_guess,
2463
+ logger=logger
2464
+ )
2465
+
2466
+ if len(circuit.fluid_nodes) > 0:
2467
+ plant_dict = get_fluid_node_data(
2468
+ data=nc.fluid_node_data,
2469
+ circuit=circuit,
2470
+ t_idx=t_idx,
2471
+ time_series=time_series
2472
+ )
2473
+
2474
+ get_fluid_turbine_data(
2475
+ data=nc.fluid_turbine_data,
2476
+ circuit=circuit,
2477
+ plant_dict=plant_dict,
2478
+ gen_dict=gen_dict,
2479
+ t_idx=t_idx
2480
+ )
2481
+
2482
+ get_fluid_pump_data(
2483
+ data=nc.fluid_pump_data,
2484
+ circuit=circuit,
2485
+ plant_dict=plant_dict,
2486
+ gen_dict=gen_dict,
2487
+ t_idx=t_idx
2488
+ )
2489
+
2490
+ get_fluid_p2x_data(
2491
+ data=nc.fluid_p2x_data,
2492
+ circuit=circuit,
2493
+ plant_dict=plant_dict,
2494
+ gen_dict=gen_dict,
2495
+ t_idx=t_idx
2496
+ )
2497
+
2498
+ get_fluid_path_data(
2499
+ data=nc.fluid_path_data,
2500
+ circuit=circuit,
2501
+ plant_dict=plant_dict,
2502
+ t_idx=t_idx
2503
+ )
2504
+
2505
+ if fill_gep:
2506
+
2507
+ # formulate the investment
2508
+ gen_dict = {elm.idtag: (idx, elm) for idx, elm in enumerate(circuit.generators)}
2509
+ batt_dict = {elm.idtag: (idx, elm) for idx, elm in enumerate(circuit.batteries)}
2510
+
2511
+ for investment in circuit.investments:
2512
+
2513
+ # search in generators
2514
+ data = gen_dict.get(investment.device_idtag, None)
2515
+ if data is not None:
2516
+ idx, elm = data
2517
+
2518
+ if investment.CAPEX != 0.0: # overwrite the base capex
2519
+ nc.generator_data.capex[idx] = investment.CAPEX
2520
+
2521
+ nc.generator_data.is_candidate[idx] = True
2522
+ nc.generator_data.discount_rate[idx] = investment.group.discount_rate
2523
+ else:
2524
+
2525
+ # search in batteries
2526
+ data = batt_dict.get(investment.device_idtag, None)
2527
+ if data is not None:
2528
+ idx, elm = data
2529
+
2530
+ if investment.CAPEX != 0.0: # overwrite the base capex
2531
+ nc.battery_data.capex[idx] = investment.CAPEX
2532
+
2533
+ nc.battery_data.is_candidate[idx] = True
2534
+ nc.battery_data.discount_rate[idx] = investment.group.discount_rate
2535
+ else:
2536
+ logger.add_error("Could not find investment device", value=investment.device_idtag)
2537
+
2538
+ nc.bus_dict = bus_dict
2539
+ nc.consolidate_information()
2540
+
2541
+ if nc.active_branch_data.any_pf_control is False:
2542
+ if nc.vsc_data.nelm > 0:
2543
+ nc.active_branch_data.any_pf_control = True
2544
+
2545
+ return nc