GridCal 5.3.49__tar.gz → 5.3.51__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 (297) hide show
  1. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +1 -1
  2. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +1 -1
  3. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +44 -10
  4. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +47 -10
  5. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +8 -0
  6. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/simulations.py +57 -33
  7. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/icons_rc.py +1 -1
  8. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/__version__.py +1 -1
  9. {gridcal-5.3.49 → gridcal-5.3.51}/PKG-INFO +1 -1
  10. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ExecuteGridCal.py +0 -0
  11. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  12. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  13. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  14. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  15. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  16. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  17. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/__init__.py +0 -0
  18. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/gui.py +0 -0
  19. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  20. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  21. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  22. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  23. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  24. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  25. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  26. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  27. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  28. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  29. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  30. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  31. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  32. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  33. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  34. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  35. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  36. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
  37. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
  38. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
  39. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
  40. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
  41. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
  42. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
  43. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
  44. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  45. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  46. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  47. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  48. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  49. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  50. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  51. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  52. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  53. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  54. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  55. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  56. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  57. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  58. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  59. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  60. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  61. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  62. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  63. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  64. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  65. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  66. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  67. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  68. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  69. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  70. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  71. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  72. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  73. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  74. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  75. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  76. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  77. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  78. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  79. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  80. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  81. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  82. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  83. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  84. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  85. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  86. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  87. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  88. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  89. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  90. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  91. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  92. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  93. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  94. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  95. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  96. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  97. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  98. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  99. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  100. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  101. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/__init__.py +0 -0
  102. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  103. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  104. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  105. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  106. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  107. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  108. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridGenerator/gui.py +0 -0
  109. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  110. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  111. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/__init__.py +0 -0
  112. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  113. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  114. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  115. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  116. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/demo_code4.py +0 -0
  117. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  118. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  119. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  120. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  121. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  122. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  123. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  124. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  125. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  126. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  127. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  128. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  129. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  130. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  131. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  132. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  133. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  134. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/GridCalMain.py +0 -0
  135. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/MainWindow.py +0 -0
  136. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  137. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  138. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  139. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  140. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  141. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  142. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  143. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  144. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  145. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  146. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  147. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  148. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  149. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  150. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  151. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  152. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/__init__.py +0 -0
  153. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/object_select_window.py +0 -0
  154. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Main/update_gui_file.py +0 -0
  155. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  156. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  157. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  158. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  159. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  160. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  161. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  162. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  163. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  164. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  165. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  166. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  167. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  168. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  169. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  170. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  171. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  172. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  173. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  174. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  175. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  176. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  177. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  178. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  179. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  180. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  181. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  182. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  183. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  184. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  185. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  186. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  187. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  188. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  189. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  190. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  191. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  192. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  193. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  194. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  195. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  196. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  197. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  198. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  199. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  200. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  201. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  202. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  203. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  204. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  205. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Visualization/__init__.py +0 -0
  206. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Visualization/visualization.py +0 -0
  207. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Widgets/__init__.py +0 -0
  208. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  209. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  210. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  211. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  212. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  213. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  214. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  215. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/__init__.py +0 -0
  216. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/associations_model.py +0 -0
  217. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/general_dialogues.py +0 -0
  218. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/gui_functions.py +0 -0
  219. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/messages.py +0 -0
  220. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/object_model.py +0 -0
  221. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/pandas_model.py +0 -0
  222. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/plot_config.py +0 -0
  223. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/profiles_model.py +0 -0
  224. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/python_console.py +0 -0
  225. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/python_highlighter.py +0 -0
  226. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/results_model.py +0 -0
  227. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/table_view_header_wrap.py +0 -0
  228. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/themes.py +0 -0
  229. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/toast_widget.py +0 -0
  230. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/update_gui_all.py +0 -0
  231. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/update_gui_common.py +0 -0
  232. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Gui/wrappable_table_model.py +0 -0
  233. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/LICENSE.txt +0 -0
  234. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/__init__.py +0 -0
  235. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/export_results_driver.py +0 -0
  236. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/file_handler.py +0 -0
  237. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/server_driver.py +0 -0
  238. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/session.py +0 -0
  239. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/Session/synchronization_driver.py +0 -0
  240. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/__init__.py +0 -0
  241. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
  242. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
  243. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
  244. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
  245. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
  246. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  247. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  248. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  249. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  250. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  251. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  252. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  253. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  254. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  255. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  256. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  257. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  258. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  259. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  260. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  261. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  262. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  263. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  264. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  265. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  266. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  267. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  268. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  269. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  270. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  271. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  272. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  273. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  274. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  275. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  276. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  277. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  278. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  279. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  280. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  281. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  282. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  283. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  284. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/__init__.py +0 -0
  285. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/adequacy_output.csv +0 -0
  286. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/GridCal.ico +0 -0
  287. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/GridCal.svg +0 -0
  288. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/__init__.py +0 -0
  289. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/cables.csv +0 -0
  290. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/sequence_lines.csv +0 -0
  291. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/transformers.csv +0 -0
  292. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/data/wires.csv +0 -0
  293. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/plugins.py +0 -0
  294. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/templates.py +0 -0
  295. {gridcal-5.3.49 → gridcal-5.3.51}/GridCal/update.py +0 -0
  296. {gridcal-5.3.49 → gridcal-5.3.51}/setup.cfg +0 -0
  297. {gridcal-5.3.49 → gridcal-5.3.51}/setup.py +0 -0
@@ -453,7 +453,7 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
453
453
  devs = list()
454
454
  # find associated Branches in reverse order
455
455
  for obj in substation_buses:
456
- for branch_list in self.editor.circuit.get_branch_lists():
456
+ for branch_list in self.editor.circuit.get_branch_lists(add_vsc=True, add_hvdc=True, add_switch=True):
457
457
  for i in range(len(branch_list) - 1, -1, -1):
458
458
  if branch_list[i].bus_from == obj:
459
459
  devs.append(branch_list[i])
@@ -1186,7 +1186,7 @@ class GridMapWidget(BaseDiagramWidget):
1186
1186
  lnorm[lnorm == np.inf] = 0
1187
1187
  Sfabs = np.abs(Sf)
1188
1188
  Sfnorm = Sfabs / np.max(Sfabs + 1e-20)
1189
- for i, branch in enumerate(self.circuit.get_branches_wo_hvdc_iter()):
1189
+ for i, branch in enumerate(self.circuit.get_branches_iter(add_vsc=False, add_hvdc=False, add_switch=True)):
1190
1190
 
1191
1191
  # try to find the diagram object of the DB object
1192
1192
  graphic_object: Union[MapAcLine, MapDcLine] = self.graphics_manager.query(branch)
@@ -72,19 +72,39 @@ class VscGraphicItem(LineGraphicTemplateItem):
72
72
  checkeable=True,
73
73
  checked_value=self.draw_labels)
74
74
 
75
- rabf = menu.addAction('Change bus')
76
- move_bus_icon = QIcon()
77
- move_bus_icon.addPixmap(QPixmap(":/Icons/icons/move_bus.svg"))
78
- rabf.setIcon(move_bus_icon)
79
- rabf.triggered.connect(self.change_bus)
75
+ # rabf = menu.addAction('Change bus')
76
+ # move_bus_icon = QIcon()
77
+ # move_bus_icon.addPixmap(QPixmap(":/Icons/icons/move_bus.svg"))
78
+ # rabf.setIcon(move_bus_icon)
79
+ # rabf.triggered.connect(self.change_bus)
80
+
81
+ add_menu_entry(menu=menu,
82
+ text="Change bus",
83
+ function_ptr=self.change_bus,
84
+ icon_path=":/Icons/icons/move_bus.svg")
85
+
86
+ add_menu_entry(menu=menu,
87
+ text="Set Control dev 1",
88
+ function_ptr=self.set_control_dev_1,
89
+ icon_path=":/Icons/icons/move_bus.svg")
90
+
91
+ add_menu_entry(menu=menu,
92
+ text="Set Control dev 2",
93
+ function_ptr=self.set_control_dev_2,
94
+ icon_path=":/Icons/icons/move_bus.svg")
80
95
 
81
96
  menu.addSeparator()
82
97
 
83
- ra2 = menu.addAction('Delete')
84
- del_icon = QIcon()
85
- del_icon.addPixmap(QPixmap(":/Icons/icons/delete3.svg"))
86
- ra2.setIcon(del_icon)
87
- ra2.triggered.connect(self.delete)
98
+ # ra2 = menu.addAction('Delete')
99
+ # del_icon = QIcon()
100
+ # del_icon.addPixmap(QPixmap(":/Icons/icons/delete3.svg"))
101
+ # ra2.setIcon(del_icon)
102
+ # ra2.triggered.connect(self.delete)
103
+
104
+ add_menu_entry(menu=menu,
105
+ text="Delete",
106
+ function_ptr=self.delete,
107
+ icon_path=":/Icons/icons/delete3.svg")
88
108
 
89
109
  menu.addSeparator()
90
110
 
@@ -146,3 +166,17 @@ class VscGraphicItem(LineGraphicTemplateItem):
146
166
  """
147
167
  self.api_object.regulation_bus = self.api_object.bus_to
148
168
  self.api_object.tap_module_control_mode = TapModuleControl.Vm
169
+
170
+ def set_control_dev_1(self):
171
+ """
172
+
173
+ :return:
174
+ """
175
+ self.editor.set_vsc_control_dev(graphic=self, control_idx=1)
176
+
177
+ def set_control_dev_2(self):
178
+ """
179
+
180
+ :return:
181
+ """
182
+ self.editor.set_vsc_control_dev(graphic=self, control_idx=2)
@@ -3498,7 +3498,10 @@ class SchematicWidget(BaseDiagramWidget):
3498
3498
  # VSC lines
3499
3499
  if vsc_Pf is not None:
3500
3500
 
3501
- vsc_sending_power_norm = np.abs(vsc_Pt + 1j * vsc_Qt) / (max_flow + 1e-20)
3501
+ if vsc_Qt is None:
3502
+ vsc_sending_power_norm = np.abs(vsc_Pt) / (max_flow + 1e-20)
3503
+ else:
3504
+ vsc_sending_power_norm = np.abs(vsc_Pt + 1j * vsc_Qt) / (max_flow + 1e-20)
3502
3505
 
3503
3506
  if self.circuit.get_vsc_number() == len(vsc_Pf):
3504
3507
  for i, elm in enumerate(self.circuit.vsc_devices):
@@ -3549,15 +3552,25 @@ class SchematicWidget(BaseDiagramWidget):
3549
3552
 
3550
3553
  tooltip += '\nPower (from):\t' + "{:10.4f}".format(vsc_Pf[i]) + ' [MW]'
3551
3554
 
3552
- if vsc_losses is not None:
3553
- tooltip += '\nPower (to):\t' + "{:10.4f}".format(vsc_Pt[i]) + ' [MW]'
3554
- tooltip += '\nPower (to):\t' + "{:10.4f}".format(vsc_Qt[i]) + ' [Mvar]'
3555
- tooltip += '\nLosses: \t\t' + "{:10.4f}".format(vsc_losses[i]) + ' [MW]'
3556
- graphic_object.set_arrows_with_power(Sf=vsc_Pf[i] + 1j * 0.0,
3557
- St=vsc_Pt[i] + 1j * vsc_Qt[i])
3555
+ if vsc_Qt is None:
3556
+ if vsc_losses is not None:
3557
+ tooltip += '\nPower (to):\t' + "{:10.4f}".format(vsc_Pt[i]) + ' [MW]'
3558
+ tooltip += '\nLosses: \t\t' + "{:10.4f}".format(vsc_losses[i]) + ' [MW]'
3559
+ graphic_object.set_arrows_with_power(Sf=vsc_Pf[i],
3560
+ St=vsc_Pt[i])
3561
+ else:
3562
+ graphic_object.set_arrows_with_power(Sf=vsc_Pf[i],
3563
+ St=-vsc_Pf[i])
3558
3564
  else:
3559
- graphic_object.set_arrows_with_power(Sf=vsc_Pf[i] + 1j * 0.0,
3560
- St=-vsc_Pf[i] + 1j * vsc_Qt[i])
3565
+ if vsc_losses is not None:
3566
+ tooltip += '\nPower (to):\t' + "{:10.4f}".format(vsc_Pt[i]) + ' [MW]'
3567
+ tooltip += '\nPower (to):\t' + "{:10.4f}".format(vsc_Qt[i]) + ' [Mvar]'
3568
+ tooltip += '\nLosses: \t\t' + "{:10.4f}".format(vsc_losses[i]) + ' [MW]'
3569
+ graphic_object.set_arrows_with_power(Sf=vsc_Pf[i] + 1j * 0.0,
3570
+ St=vsc_Pt[i] + 1j * vsc_Qt[i])
3571
+ else:
3572
+ graphic_object.set_arrows_with_power(Sf=vsc_Pf[i] + 1j * 0.0,
3573
+ St=-vsc_Pf[i] + 1j * vsc_Qt[i])
3561
3574
 
3562
3575
  graphic_object.setToolTipText(tooltip)
3563
3576
  graphic_object.set_colour(color, w, style)
@@ -3787,7 +3800,7 @@ class SchematicWidget(BaseDiagramWidget):
3787
3800
  bus_dict[bus.idtag] = graphic_object
3788
3801
 
3789
3802
  # third pass: we must also add all those branches connecting the selected buses
3790
- for lst in self.circuit.get_branch_lists():
3803
+ for lst in self.circuit.get_branch_lists(add_vsc=True, add_hvdc=True, add_switch=True):
3791
3804
  for api_object in lst:
3792
3805
  if api_object.bus_from.idtag in bus_dict or api_object.bus_to.idtag in bus_dict:
3793
3806
  diagram.set_point(device=api_object,
@@ -4316,6 +4329,30 @@ class SchematicWidget(BaseDiagramWidget):
4316
4329
  if idx_bus_list[0][1] == line_graphics.api_object.bus_from:
4317
4330
  idx, old_bus, old_bus_graphic_item = idx_bus_list[0]
4318
4331
 
4332
+ def set_vsc_control_dev(self, graphic: VscGraphicItem, control_idx: int):
4333
+ """
4334
+ Set the VSC control1_dev or control1_dev with the selected bus
4335
+ :param graphic: VscGraphicItem
4336
+ :param control_idx: 1 or 2 to set control1_dev or control1_dev
4337
+ """
4338
+
4339
+ idx_bus_list = self.get_selected_buses()
4340
+
4341
+ if len(idx_bus_list) == 1:
4342
+
4343
+ # detect the bus and its combinations
4344
+ idx, sel_bus, sel_bus_graphic_item = idx_bus_list[0]
4345
+
4346
+ if control_idx == 1:
4347
+ graphic.api_object.control1_dev = sel_bus
4348
+ elif control_idx == 2:
4349
+ graphic.api_object.control2_dev = sel_bus
4350
+ else:
4351
+ print("control_idx must be either 1 or 2")
4352
+ else:
4353
+ error_msg(f"You need to select exactly one bus to be set as the VSC control device {control_idx}",
4354
+ "Set VSC control device 1")
4355
+
4319
4356
  def get_picture_width(self) -> int:
4320
4357
  return self.editor_graphics_view.width()
4321
4358
 
@@ -827,13 +827,21 @@ class DiagramsMain(CompiledArraysMain):
827
827
  bus_active=bus_active,
828
828
  loadings=results.loading,
829
829
  types=results.bus_types,
830
+
830
831
  Sf=results.Sf,
831
832
  St=results.St,
832
833
  br_active=br_active,
834
+
833
835
  hvdc_Pf=results.hvdc_Pf,
834
836
  hvdc_Pt=-results.hvdc_Pf,
835
837
  hvdc_loading=results.hvdc_loading,
836
838
  hvdc_active=hvdc_active,
839
+
840
+ vsc_Pf=results.vsc_Pf,
841
+ vsc_Pt=-results.vsc_Pf,
842
+ vsc_loading=results.vsc_loading,
843
+ vsc_active=vsc_active,
844
+
837
845
  use_flow_based_width=use_flow_based_width,
838
846
  min_branch_width=min_branch_width,
839
847
  max_branch_width=max_branch_width,
@@ -218,7 +218,7 @@ class SimulationsMain(TimeEventsMain):
218
218
  self.ui.actionLinearAnalysis.triggered.connect(self.linear_pf_dispatcher)
219
219
  self.ui.actionContingency_analysis.triggered.connect(self.contingencies_dispatcher)
220
220
  self.ui.actionOTDF_time_series.triggered.connect(self.run_contingency_analysis_ts)
221
- self.ui.actionATC.triggered.connect(self.optimal_ntc_dispatcher)
221
+ self.ui.actionATC.triggered.connect(self.atc_dispatcher)
222
222
  self.ui.actionATC_Time_Series.triggered.connect(self.run_available_transfer_capacity_ts)
223
223
  self.ui.actionPTDF_time_series.triggered.connect(self.run_linear_analysis_ts)
224
224
  self.ui.actionClustering.triggered.connect(self.run_clustering)
@@ -850,16 +850,16 @@ class SimulationsMain(TimeEventsMain):
850
850
  else:
851
851
  self.run_opf()
852
852
 
853
- def optimal_ntc_dispatcher(self):
853
+ def atc_dispatcher(self):
854
854
  """
855
855
  Dispatch the NTC action
856
856
  :return:
857
857
  """
858
858
  if self.server_driver.is_running():
859
859
  if self.ts_flag():
860
- instruction = RemoteInstruction(operation=SimulationTypes.OPF_NTC_TS_run)
860
+ instruction = RemoteInstruction(operation=SimulationTypes.NetTransferCapacityTS_run)
861
861
  else:
862
- instruction = RemoteInstruction(operation=SimulationTypes.OPF_NTC_run)
862
+ instruction = RemoteInstruction(operation=SimulationTypes.NetTransferCapacity_run)
863
863
 
864
864
  self.run_remote(instruction=instruction)
865
865
  else:
@@ -2277,13 +2277,21 @@ class SimulationsMain(TimeEventsMain):
2277
2277
  """
2278
2278
  Actions to run after the OPF simulation
2279
2279
  """
2280
- _, results = self.session.optimal_net_transfer_capacity
2280
+ drv, results = self.session.optimal_net_transfer_capacity
2281
2281
 
2282
2282
  if results is not None:
2283
2283
  self.remove_simulation(SimulationTypes.OPF_NTC_run)
2284
2284
  self.update_available_results()
2285
2285
  self.colour_diagrams()
2286
2286
 
2287
+ if results.converged:
2288
+ if drv.logger.error_count() == 0:
2289
+ self.show_info_toast("Optimal result")
2290
+ else:
2291
+ self.show_warning_toast("Optimal result with errors :/")
2292
+ else:
2293
+ self.show_warning_toast("Not optimal result :/")
2294
+
2287
2295
  if not self.session.is_anything_running():
2288
2296
  self.UNLOCK()
2289
2297
 
@@ -2600,20 +2608,32 @@ class SimulationsMain(TimeEventsMain):
2600
2608
  )
2601
2609
 
2602
2610
  elif obj_fn_tpe == InvestmentsEvaluationObjectives.GenerationAdequacy:
2603
- problem = sim.AdequacyInvestmentProblem(
2604
- grid=self.circuit,
2605
- n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
2606
- use_monte_carlo=True,
2607
- save_file=False
2608
- )
2611
+
2612
+ if self.circuit.has_time_series:
2613
+ problem = sim.AdequacyInvestmentProblem(
2614
+ grid=self.circuit,
2615
+ n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
2616
+ use_monte_carlo=True,
2617
+ save_file=False,
2618
+ time_indices=self.get_time_indices()
2619
+ )
2620
+ else:
2621
+ self.show_warning_toast('Adequacy studies need time data...')
2622
+ return
2609
2623
 
2610
2624
  elif obj_fn_tpe == InvestmentsEvaluationObjectives.SimpleDispatch:
2611
- problem = sim.AdequacyInvestmentProblem(
2612
- grid=self.circuit,
2613
- n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
2614
- use_monte_carlo=False,
2615
- save_file=False
2616
- )
2625
+
2626
+ if self.circuit.has_time_series:
2627
+ problem = sim.AdequacyInvestmentProblem(
2628
+ grid=self.circuit,
2629
+ n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
2630
+ use_monte_carlo=False,
2631
+ save_file=False,
2632
+ time_indices=self.get_time_indices()
2633
+ )
2634
+ else:
2635
+ self.show_warning_toast('Adequacy studies need time data...')
2636
+ return
2617
2637
 
2618
2638
  else:
2619
2639
  self.show_error_toast("Objective not supported yet :/")
@@ -2893,30 +2913,34 @@ class SimulationsMain(TimeEventsMain):
2893
2913
  """
2894
2914
  if self.circuit.valid_for_simulation():
2895
2915
 
2896
- if not self.session.is_this_running(SimulationTypes.Reliability_run):
2916
+ if self.circuit.get_time_number() > 0:
2897
2917
 
2898
- self.add_simulation(SimulationTypes.Reliability_run)
2918
+ if not self.session.is_this_running(SimulationTypes.Reliability_run):
2899
2919
 
2900
- self.LOCK()
2920
+ self.add_simulation(SimulationTypes.Reliability_run)
2901
2921
 
2902
- # Compile the grid
2903
- self.ui.progress_label.setText('Compiling the grid...')
2904
- QtGui.QGuiApplication.processEvents()
2922
+ self.LOCK()
2905
2923
 
2906
- pf_options = self.get_selected_power_flow_options()
2924
+ # Compile the grid
2925
+ self.ui.progress_label.setText('Compiling the grid...')
2926
+ QtGui.QGuiApplication.processEvents()
2907
2927
 
2908
- drv = sim.ReliabilityStudyDriver(grid=self.circuit,
2909
- pf_options=pf_options,
2910
- n_sim=self.ui.max_iterations_reliability_spinBox.value())
2928
+ pf_options = self.get_selected_power_flow_options()
2911
2929
 
2912
- self.session.run(drv,
2913
- post_func=self.post_reliability,
2914
- prog_func=self.ui.progressBar.setValue,
2915
- text_func=self.ui.progress_label.setText)
2930
+ drv = sim.ReliabilityStudyDriver(grid=self.circuit,
2931
+ pf_options=pf_options,
2932
+ time_indices=self.get_time_indices(),
2933
+ n_sim=self.ui.max_iterations_reliability_spinBox.value())
2916
2934
 
2917
- else:
2918
- self.show_warning_toast('Another OPF time series is running already...')
2935
+ self.session.run(drv,
2936
+ post_func=self.post_reliability,
2937
+ prog_func=self.ui.progressBar.setValue,
2938
+ text_func=self.ui.progress_label.setText)
2919
2939
 
2940
+ else:
2941
+ self.show_warning_toast('Another reliability study is running already...')
2942
+ else:
2943
+ self.show_warning_toast('Reliability studies need time data...')
2920
2944
  else:
2921
2945
  pass
2922
2946
 
@@ -38475,7 +38475,7 @@ qt_resource_struct = b"\
38475
38475
  \x00\x00\x06b\x00\x01\x00\x00\x00\x01\x00\x02X+\
38476
38476
  \x00\x00\x01\x8b\xd7}+~\
38477
38477
  \x00\x00\x00\x9c\x00\x01\x00\x00\x00\x01\x00\x00&x\
38478
- \x00\x00\x01\x97 \xf7\xf60\
38478
+ \x00\x00\x01\x97/]\x1f\xdc\
38479
38479
  \x00\x00\x0d\x90\x00\x00\x00\x00\x00\x01\x00\x04\xc7%\
38480
38480
  \x00\x00\x01\x88\xae\xf9[-\
38481
38481
  \x00\x00\x0c&\x00\x00\x00\x00\x00\x01\x00\x04Cm\
@@ -6,7 +6,7 @@ import datetime
6
6
  _current_year_ = datetime.datetime.now().year
7
7
 
8
8
  # remember to keep a three-number version!!!
9
- __GridCal_VERSION__ = "5.3.49"
9
+ __GridCal_VERSION__ = "5.3.51"
10
10
 
11
11
  url = 'https://github.com/SanPen/GridCal'
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: GridCal
3
- Version: 5.3.49
3
+ Version: 5.3.51
4
4
  Summary: GridCal is a Power Systems simulation program intended for professional use and research
5
5
  Home-page: https://github.com/SanPen/GridCal
6
6
  Author: Santiago Peñate Vera et. Al.