GridCal 5.3.50__tar.gz → 5.3.52__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.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +1 -1
  2. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +1 -1
  3. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +44 -10
  4. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +47 -10
  5. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +8 -0
  6. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/simulations.py +57 -33
  7. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/icons_rc.py +204 -204
  8. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/__version__.py +1 -1
  9. {gridcal-5.3.50 → gridcal-5.3.52}/PKG-INFO +1 -1
  10. gridcal-5.3.50/GridCal/adequacy_output.csv +0 -955
  11. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ExecuteGridCal.py +0 -0
  12. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  13. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  14. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  15. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  16. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  17. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  18. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/__init__.py +0 -0
  19. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/gui.py +0 -0
  20. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  21. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  22. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  23. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  24. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  25. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  26. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  27. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  28. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  29. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  30. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  31. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  32. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  33. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  34. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  35. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  36. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  37. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
  38. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
  39. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
  40. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
  41. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
  42. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
  43. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
  44. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
  45. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  46. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  47. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  48. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  49. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  50. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  51. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  52. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  53. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  54. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  55. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  56. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  57. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  58. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  59. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  60. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  61. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  62. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  63. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  64. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  65. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  66. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  67. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  68. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  69. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  70. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  71. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  72. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  73. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  74. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  75. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  76. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  77. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  78. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  79. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  80. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  81. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  82. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  83. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  84. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  85. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  86. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  87. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  88. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  89. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  90. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  91. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  92. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  93. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  94. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  95. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  96. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  97. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  98. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  99. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  100. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  101. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  102. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/__init__.py +0 -0
  103. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  104. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  105. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  106. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  107. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  108. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  109. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridGenerator/gui.py +0 -0
  110. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  111. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  112. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/__init__.py +0 -0
  113. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  114. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  115. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  116. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  117. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/demo_code4.py +0 -0
  118. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  119. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  120. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  121. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  122. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  123. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  124. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  125. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  126. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  127. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  128. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  129. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  130. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  131. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  132. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  133. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  134. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  135. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/GridCalMain.py +0 -0
  136. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/MainWindow.py +0 -0
  137. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  138. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  139. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  140. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  141. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  142. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  143. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  144. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  145. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  146. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  147. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  148. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  149. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  150. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  151. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  152. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  153. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/__init__.py +0 -0
  154. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/object_select_window.py +0 -0
  155. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Main/update_gui_file.py +0 -0
  156. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  157. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  158. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  159. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  160. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  161. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  162. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  163. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  164. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  165. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  166. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  167. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  168. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  169. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  170. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  171. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  172. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  173. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  174. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  175. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  176. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  177. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  178. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  179. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  180. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  181. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  182. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  183. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  184. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  185. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  186. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  187. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  188. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  189. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  190. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  191. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  192. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  193. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  194. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  195. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  196. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  197. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  198. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  199. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  200. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  201. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  202. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  203. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  204. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  205. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  206. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Visualization/__init__.py +0 -0
  207. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Visualization/visualization.py +0 -0
  208. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Widgets/__init__.py +0 -0
  209. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  210. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  211. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  212. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  213. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  214. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  215. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  216. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/__init__.py +0 -0
  217. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/associations_model.py +0 -0
  218. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/general_dialogues.py +0 -0
  219. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/gui_functions.py +0 -0
  220. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/messages.py +0 -0
  221. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/object_model.py +0 -0
  222. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/pandas_model.py +0 -0
  223. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/plot_config.py +0 -0
  224. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/profiles_model.py +0 -0
  225. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/python_console.py +0 -0
  226. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/python_highlighter.py +0 -0
  227. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/results_model.py +0 -0
  228. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/table_view_header_wrap.py +0 -0
  229. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/themes.py +0 -0
  230. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/toast_widget.py +0 -0
  231. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/update_gui_all.py +0 -0
  232. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/update_gui_common.py +0 -0
  233. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Gui/wrappable_table_model.py +0 -0
  234. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/LICENSE.txt +0 -0
  235. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/__init__.py +0 -0
  236. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/export_results_driver.py +0 -0
  237. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/file_handler.py +0 -0
  238. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/server_driver.py +0 -0
  239. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/session.py +0 -0
  240. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/Session/synchronization_driver.py +0 -0
  241. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/__init__.py +0 -0
  242. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
  243. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
  244. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
  245. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
  246. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
  247. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  248. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  249. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  250. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  251. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  252. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  253. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  254. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  255. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  256. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  257. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  258. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  259. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  260. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  261. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  262. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  263. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  264. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  265. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  266. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  267. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  268. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  269. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  270. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  271. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  272. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  273. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  274. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  275. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  276. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  277. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  278. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  279. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  280. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  281. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  282. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  283. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  284. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  285. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/__init__.py +0 -0
  286. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/GridCal.ico +0 -0
  287. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/GridCal.svg +0 -0
  288. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/__init__.py +0 -0
  289. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/cables.csv +0 -0
  290. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/sequence_lines.csv +0 -0
  291. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/transformers.csv +0 -0
  292. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/data/wires.csv +0 -0
  293. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/plugins.py +0 -0
  294. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/templates.py +0 -0
  295. {gridcal-5.3.50 → gridcal-5.3.52}/GridCal/update.py +0 -0
  296. {gridcal-5.3.50 → gridcal-5.3.52}/setup.cfg +0 -0
  297. {gridcal-5.3.50 → gridcal-5.3.52}/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