GridCal 5.3.43__tar.gz → 5.3.44__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.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +1 -1
  2. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +8 -1
  3. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +38 -6
  4. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +15 -44
  5. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/base_diagram_widget.py +27 -13
  6. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/generic_graphics.py +14 -0
  7. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/MainWindow.py +1 -1
  8. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +9 -0
  9. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Results/results.py +20 -3
  10. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/base_gui.py +2 -2
  11. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/simulations.py +57 -28
  12. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/icons_rc.py +1 -1
  13. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/__version__.py +1 -1
  14. gridcal-5.3.44/GridCal/adequacy_output.csv +955 -0
  15. {gridcal-5.3.43 → gridcal-5.3.44}/PKG-INFO +1 -1
  16. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ExecuteGridCal.py +0 -0
  17. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  18. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  19. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  20. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  21. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  22. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  23. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/__init__.py +0 -0
  24. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/gui.py +0 -0
  25. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  26. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  27. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  28. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  29. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  30. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  31. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  32. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  33. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  34. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  35. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  36. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  37. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  38. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  39. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  40. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  41. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  42. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
  43. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
  44. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
  45. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
  46. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
  47. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
  48. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
  49. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
  50. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  51. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  52. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  53. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  54. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  55. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  56. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  57. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  58. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  59. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  60. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  61. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  62. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  63. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  64. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  65. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  66. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  67. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  68. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  69. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  70. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  71. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  72. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  73. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  74. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  75. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  76. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  77. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  78. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  79. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  80. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  81. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  82. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  83. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  84. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  85. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  86. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  87. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  88. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  89. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  90. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  91. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  92. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  93. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  94. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  95. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  96. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  97. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  98. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  99. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  100. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  101. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  102. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  103. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  104. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  105. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  106. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  107. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/__init__.py +0 -0
  108. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  109. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  110. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  111. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  112. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/gui.py +0 -0
  113. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  114. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  115. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/__init__.py +0 -0
  116. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  117. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  118. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  119. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  120. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code4.py +0 -0
  121. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  122. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  123. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  124. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  125. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  126. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  127. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  128. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  129. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  130. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  131. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  132. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  133. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  134. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  135. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  136. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  137. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  138. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/GridCalMain.py +0 -0
  139. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  140. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  141. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  142. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  143. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  144. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  145. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  146. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  147. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  148. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  149. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  150. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  151. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  152. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  153. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/__init__.py +0 -0
  154. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/object_select_window.py +0 -0
  155. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/update_gui_file.py +0 -0
  156. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  157. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  158. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  159. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  160. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  161. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  162. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  163. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  164. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  165. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  166. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  167. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  168. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  169. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  170. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  171. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  172. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  173. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  174. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  175. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  176. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  177. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  178. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  179. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  180. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  181. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  182. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  183. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  184. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  185. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  186. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  187. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  188. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  189. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  190. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  191. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  192. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  193. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  194. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  195. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  196. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  197. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  198. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  199. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  200. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  201. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  202. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  203. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  204. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  205. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  206. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Visualization/__init__.py +0 -0
  207. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Visualization/visualization.py +0 -0
  208. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/__init__.py +0 -0
  209. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  210. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  211. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  212. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  213. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  214. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  215. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  216. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/__init__.py +0 -0
  217. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/associations_model.py +0 -0
  218. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/general_dialogues.py +0 -0
  219. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/gui_functions.py +0 -0
  220. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/messages.py +0 -0
  221. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/object_model.py +0 -0
  222. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/pandas_model.py +0 -0
  223. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/plot_config.py +0 -0
  224. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/profiles_model.py +0 -0
  225. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/python_console.py +0 -0
  226. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/python_highlighter.py +0 -0
  227. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/results_model.py +0 -0
  228. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/table_view_header_wrap.py +0 -0
  229. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/themes.py +0 -0
  230. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/toast_widget.py +0 -0
  231. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/update_gui_all.py +0 -0
  232. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/update_gui_common.py +0 -0
  233. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/wrappable_table_model.py +0 -0
  234. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/LICENSE.txt +0 -0
  235. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/__init__.py +0 -0
  236. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/export_results_driver.py +0 -0
  237. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/file_handler.py +0 -0
  238. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/server_driver.py +0 -0
  239. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/session.py +0 -0
  240. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/synchronization_driver.py +0 -0
  241. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/__init__.py +0 -0
  242. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
  243. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
  244. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
  245. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
  246. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
  247. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  248. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  249. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  250. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  251. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  252. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  253. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  254. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  255. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  256. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  257. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  258. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  259. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  260. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  261. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  262. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  263. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  264. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  265. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  266. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  267. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  268. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  269. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  270. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  271. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  272. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  273. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  274. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  275. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  276. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  277. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  278. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  279. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  280. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  281. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  282. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  283. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  284. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  285. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/__init__.py +0 -0
  286. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/GridCal.ico +0 -0
  287. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/GridCal.svg +0 -0
  288. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/__init__.py +0 -0
  289. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/cables.csv +0 -0
  290. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/sequence_lines.csv +0 -0
  291. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/transformers.csv +0 -0
  292. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/wires.csv +0 -0
  293. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/plugins.py +0 -0
  294. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/templates.py +0 -0
  295. {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/update.py +0 -0
  296. {gridcal-5.3.43 → gridcal-5.3.44}/setup.cfg +0 -0
  297. {gridcal-5.3.43 → gridcal-5.3.44}/setup.py +0 -0
@@ -69,7 +69,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
69
69
 
70
70
  self.index = index
71
71
 
72
- self.resize(r * 10)
72
+ self.resize(r)
73
73
  self.setAcceptHoverEvents(True) # Enable hover events for the item
74
74
  self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
75
75
  self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable) # Allow selecting the node
@@ -17,7 +17,7 @@ from GridCal.Gui.messages import yes_no_question
17
17
  from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER
18
18
  from GridCal.Gui.Diagrams.Editors.line_editor import LineEditor
19
19
 
20
- from GridCalEngine.Devices.types import BRANCH_TYPES
20
+ from GridCalEngine.Devices.types import BRANCH_TYPES, ALL_DEV_TYPES
21
21
  from GridCalEngine.enumerations import DeviceType
22
22
 
23
23
  if TYPE_CHECKING:
@@ -132,6 +132,13 @@ class MapLineSegment(QGraphicsLineItem):
132
132
  """
133
133
  return [self.container]
134
134
 
135
+ def get_associated_devices(self) -> List[ALL_DEV_TYPES]:
136
+ """
137
+ This forwards to the map line container for the appropriate deletion of everything
138
+ :return:
139
+ """
140
+ return [self.container.api_object]
141
+
135
142
  def set_width(self, width: float):
136
143
  """
137
144
 
@@ -20,7 +20,7 @@ from GridCal.Gui.object_model import ObjectsModel
20
20
  from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
21
21
  from GridCal.Gui.Diagrams.SchematicWidget import schematic_widget
22
22
 
23
- from GridCalEngine.Devices.types import ALL_DEV_TYPES
23
+ from GridCalEngine.Devices.types import ALL_DEV_TYPES, INJECTION_DEVICE_TYPES, BRANCH_TYPES
24
24
  from GridCalEngine.Devices.Substation.bus import Bus
25
25
  from GridCalEngine.Devices import VoltageLevel
26
26
  from GridCalEngine.Devices.Substation.substation import Substation
@@ -795,22 +795,54 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
795
795
  :return:
796
796
  """
797
797
  associated_buses = self.editor.circuit.get_substation_buses(substation=self.api_object)
798
- associated_buses_graphics = list()
799
798
  associated_lines_graphics: List[MapLineContainer] = list()
799
+ for line in self.editor.circuit.lines:
800
+ if line.bus_to in associated_buses or line.bus_from in associated_buses:
801
+ associated_lines_graphics.append(self.editor.graphics_manager.query(elm=line))
800
802
 
801
803
  # TODO: Connectivity nodes / busbars? Probably this is only when dealing with the schematic
802
804
 
803
- for bus in associated_buses:
804
- associated_buses_graphics.append(self.editor.graphics_manager.query(elm=bus))
805
+ # for bus in associated_buses:
806
+ # associated_buses_graphics.append(self.editor.graphics_manager.query(elm=bus))
805
807
 
806
- for segment in self.get_hosting_line_segments():
807
- associated_lines_graphics.append(segment.container)
808
+ # for segment in self.get_hosting_line_segments():
809
+ # associated_lines_graphics.append(segment.container)
808
810
 
809
811
  return self.voltage_level_graphics + associated_lines_graphics
810
812
 
813
+
814
+ def get_associated_devices(self) -> List[ALL_DEV_TYPES]:
815
+ """
816
+ This function returns all the api_object devices associated with the selected graphic object.
817
+ :return: List of the associated devices.
818
+ """
819
+ associated_vl = [vl.api_object for vl in self.voltage_level_graphics]
820
+ associated_buses = self.editor.circuit.get_substation_buses(substation=self.api_object)
821
+ associated_branches: List[BRANCH_TYPES] = list()
822
+ associated_shunts: List[INJECTION_DEVICE_TYPES] = list()
823
+
824
+ for branch in self.editor.circuit.get_branches():
825
+ if branch.bus_to in associated_buses or branch.bus_from in associated_buses:
826
+ associated_branches.append(branch)
827
+
828
+ for inj in self.editor.circuit.get_injection_devices_iter():
829
+ if inj.bus in associated_buses:
830
+ associated_shunts.append(inj)
831
+
832
+ # TODO: Connectivity nodes / busbars? Probably this is only when dealing with the schematic
833
+
834
+ # for bus in associated_buses:
835
+ # associated_buses_graphics.append(self.editor.graphics_manager.query(elm=bus))
836
+
837
+ # for segment in self.get_hosting_line_segments():
838
+ # associated_lines_graphics.append(segment.container)
839
+
840
+ return associated_vl + associated_branches + associated_shunts + associated_buses
841
+
811
842
  def delete(self):
812
843
  """
813
844
 
814
845
  :return:
815
846
  """
847
+
816
848
  self.editor.delete_with_dialogue(selected=[self], delete_from_db=False)
@@ -506,7 +506,7 @@ class GridMapWidget(BaseDiagramWidget):
506
506
  lat=lat,
507
507
  lon=lon,
508
508
  index=index,
509
- r=0.005)
509
+ r=self.diagram.min_branch_width)
510
510
 
511
511
  self.graphics_manager.add_device(elm=api_object, graphic=graphic_object)
512
512
 
@@ -1180,7 +1180,7 @@ class GridMapWidget(BaseDiagramWidget):
1180
1180
  arrow_size = self.diagram.arrow_size # self.get_arrow_scale()
1181
1181
 
1182
1182
  # Try colouring the branches
1183
- if self.circuit.get_branch_number_wo_hvdc():
1183
+ if self.circuit.get_branch_number(add_hvdc=False, add_vsc=False, add_switch=True):
1184
1184
 
1185
1185
  lnorm = np.abs(loadings)
1186
1186
  lnorm[lnorm == np.inf] = 0
@@ -1705,8 +1705,8 @@ class GridMapWidget(BaseDiagramWidget):
1705
1705
 
1706
1706
  line1 = selected_lines[0][0]
1707
1707
  line2 = selected_lines[1][0]
1708
- line1_graphic = selected_lines[0][1]
1709
- line2_graphic = selected_lines[1][1]
1708
+ line1_graphic: MapAcLine = selected_lines[0][1]
1709
+ line2_graphic: MapAcLine = selected_lines[1][1]
1710
1710
 
1711
1711
  if line1.template != line2.template:
1712
1712
  self.gui.show_error_toast('Line merging could not be done, lines have different templates. Check if that '
@@ -1823,11 +1823,10 @@ class GridMapWidget(BaseDiagramWidget):
1823
1823
  pass
1824
1824
 
1825
1825
  self.circuit.add_line(new_line)
1826
- self.circuit.delete_line(line1)
1827
- self.circuit.delete_line(line2)
1828
1826
 
1829
- self.remove_branch_graphic(line=line1_graphic)
1830
- self.remove_branch_graphic(line=line2_graphic)
1827
+ self.remove_element(device=line1, graphic_object=line1_graphic, delete_from_db=True)
1828
+ self.remove_element(device=line2, graphic_object=line2_graphic, delete_from_db=True)
1829
+
1831
1830
  self.add_api_line(api_object=new_line)
1832
1831
 
1833
1832
  self.gui.show_info_toast(message='Line merging successful!')
@@ -2586,11 +2585,7 @@ class GridMapWidget(BaseDiagramWidget):
2586
2585
  selected_substations = self.get_selected_substations_tup()
2587
2586
 
2588
2587
  if len(selected_lines) != 1 or len(selected_substations) != 2:
2589
- msg = QMessageBox()
2590
- msg.setIcon(QMessageBox.Icon.Information)
2591
- msg.setText("Please select exactly one line and two substations.")
2592
- msg.setWindowTitle("Selection Error")
2593
- msg.exec()
2588
+ self.gui.show_error_toast(message="Please select exactly one line and two substations.")
2594
2589
  return
2595
2590
 
2596
2591
  # Get the API objects
@@ -2615,11 +2610,7 @@ class GridMapWidget(BaseDiagramWidget):
2615
2610
  line_api.bus_from = bus
2616
2611
  break
2617
2612
  if bus_from_idtag_0 == line_api.bus_from.idtag:
2618
- msg = QMessageBox()
2619
- msg.setIcon(QMessageBox.Icon.Information)
2620
- msg.setText("The new substation did not have any valid bus to connect the line.")
2621
- msg.setWindowTitle("No valid bus")
2622
- msg.exec()
2613
+ self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
2623
2614
  return
2624
2615
 
2625
2616
  elif substation_api_1.idtag == bus_to.substation.idtag:
@@ -2630,11 +2621,7 @@ class GridMapWidget(BaseDiagramWidget):
2630
2621
  line_api.bus_to = bus
2631
2622
  break
2632
2623
  if bus_to_idtag_0 == line_api.bus_to.idtag:
2633
- msg = QMessageBox()
2634
- msg.setIcon(QMessageBox.Icon.Information)
2635
- msg.setText("The new substation did not have any valid bus to connect the line.")
2636
- msg.setWindowTitle("No valid bus")
2637
- msg.exec()
2624
+ self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
2638
2625
  return
2639
2626
 
2640
2627
 
@@ -2646,11 +2633,7 @@ class GridMapWidget(BaseDiagramWidget):
2646
2633
  line_api.bus_from = bus
2647
2634
  break
2648
2635
  if bus_from_idtag_0 == line_api.bus_from.idtag:
2649
- msg = QMessageBox()
2650
- msg.setIcon(QMessageBox.Icon.Information)
2651
- msg.setText("The new substation did not have any valid bus to connect the line.")
2652
- msg.setWindowTitle("No valid bus")
2653
- msg.exec()
2636
+ self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
2654
2637
  return
2655
2638
 
2656
2639
  elif substation_api_2.idtag == bus_to.substation.idtag:
@@ -2661,33 +2644,21 @@ class GridMapWidget(BaseDiagramWidget):
2661
2644
  line_api.bus_to = bus
2662
2645
  break
2663
2646
  if bus_to_idtag_0 == line_api.bus_to.idtag:
2664
- msg = QMessageBox()
2665
- msg.setIcon(QMessageBox.Icon.Information)
2666
- msg.setText("The new substation did not have any valid bus to connect the line.")
2667
- msg.setWindowTitle("No valid bus")
2668
- msg.exec()
2647
+ self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
2669
2648
  return
2670
2649
 
2671
2650
  else:
2672
- msg = QMessageBox()
2673
- msg.setIcon(QMessageBox.Icon.Information)
2674
- msg.setText("None of the selected substations are related to the line.")
2675
- msg.setWindowTitle("No Action")
2676
- msg.exec()
2651
+ self.gui.show_error_toast(message="None of the selected substations are related to the line.")
2677
2652
  return
2678
2653
 
2679
2654
  # Remove past graphic item and add the new one
2680
2655
 
2681
- self.remove_branch_graphic(line=line_graphic, delete_from_db=False)
2656
+ self.remove_element(device=line_api, graphic_object=line_graphic, delete_from_db=False)
2682
2657
  line = self.add_api_line(api_object=line_api)
2683
2658
  line.calculate_total_length()
2684
2659
 
2685
- msg = QMessageBox()
2686
- msg.setIcon(QMessageBox.Icon.Information)
2687
- msg.setText(f"Line {line_api.name} had its connection to substation {removed_substation} changed to substation "
2660
+ self.gui.show_info_toast(f"Line {line_api.name} had its connection to substation {removed_substation} changed to substation "
2688
2661
  f"{added_substation}.")
2689
- msg.setWindowTitle("Operation Successful")
2690
- msg.exec()
2691
2662
 
2692
2663
 
2693
2664
  def generate_map_diagram(
@@ -291,7 +291,7 @@ class BaseDiagramWidget(QSplitter):
291
291
  graphic_object.delete_from_associations()
292
292
 
293
293
  if delete_from_db:
294
- self.circuit.delete_element(obj=graphic_object.api_object)
294
+ self.circuit.delete_element(obj=device)
295
295
 
296
296
  # # For any other associated, graphic, delete too
297
297
  # for child_graphic in graphic_object.get_associated_widgets():
@@ -315,6 +315,19 @@ class BaseDiagramWidget(QSplitter):
315
315
  self.object_editor_table.setModel(None)
316
316
 
317
317
  return True
318
+
319
+ if graphic_object is None and device is not None:
320
+
321
+ if delete_from_db:
322
+ self.circuit.delete_element(obj=device)
323
+ self.delete_element_utility_function(device=device, propagate=delete_from_db)
324
+ self.object_editor_table.setModel(None)
325
+
326
+ else:
327
+ pass
328
+
329
+ return True
330
+
318
331
  else:
319
332
  self.gui.show_warning_toast(f"Graphic object {graphic_object} and device {device} are none")
320
333
  self.object_editor_table.setModel(None)
@@ -346,24 +359,24 @@ class BaseDiagramWidget(QSplitter):
346
359
  if len(selected) > 0:
347
360
 
348
361
  # get the set of all affected GenericDiagramWidget instances
349
- extended: Set[GenericDiagramWidget] = set()
362
+ extended: Set[ALL_DEV_TYPES] = set()
350
363
 
351
364
  for graphic_obj in selected:
352
365
 
353
366
  if graphic_obj is not None:
354
367
  if isinstance(graphic_obj, GenericDiagramWidget):
355
- extended.add(graphic_obj)
368
+ extended.add(graphic_obj.api_object)
356
369
 
357
- for child_graphic in graphic_obj.get_associated_widgets():
358
- if child_graphic is not None:
359
- extended.add(child_graphic)
370
+ for child_item in graphic_obj.get_associated_devices():
371
+ if child_item is not None:
372
+ extended.add(child_item)
360
373
 
361
- extended_lst: List[GenericDiagramWidget] = list(extended)
374
+ extended_lst: List[ALL_DEV_TYPES] = list(extended)
362
375
 
363
376
  dlg = DeleteDialogue(
364
- names_list=[f"{graphic_obj.api_object.device_type.value}: "
365
- f"{graphic_obj.api_object.name}"
366
- for graphic_obj in extended_lst],
377
+ names_list=[f"{device.device_type.value}: "
378
+ f"{device.name}"
379
+ for device in extended_lst],
367
380
  delete_from_db=delete_from_db,
368
381
  title="Delete Selected",
369
382
  checks=False,
@@ -373,9 +386,10 @@ class BaseDiagramWidget(QSplitter):
373
386
  dlg.exec()
374
387
 
375
388
  if dlg.is_accepted:
376
- for graphic_object in extended_lst:
377
- self.remove_element(device=graphic_object.api_object,
378
- graphic_object=graphic_object,
389
+ for device in extended_lst:
390
+
391
+ self.remove_element(device=device,
392
+ graphic_object=self.graphics_manager.query(elm=device),
379
393
  delete_from_db=dlg.delete_from_db)
380
394
 
381
395
  return True, dlg.delete_from_db
@@ -189,6 +189,20 @@ class GenericDiagramWidget:
189
189
  return list()
190
190
 
191
191
 
192
+ def get_associated_devices(self):
193
+
194
+ """
195
+ Get a list of all graphical elements associated with this widget.
196
+ In the case of a BusGraphicsItem, it will be all the shunt connections
197
+ plus the LineGraphicItems connecting to it, etc.
198
+ This function is meant to be overloaded.
199
+ :return:
200
+
201
+ """
202
+
203
+ return list()
204
+
205
+
192
206
  class Polygon(QGraphicsPolygonItem):
193
207
  """
194
208
  PolygonItem
@@ -5074,7 +5074,7 @@ class Ui_mainWindow(object):
5074
5074
  #if QT_CONFIG(tooltip)
5075
5075
  self.actionTry_to_fix_buses_location.setToolTip(QCoreApplication.translate("mainWindow", u"Set selected buses location closer to their neighbours", None))
5076
5076
  #endif // QT_CONFIG(tooltip)
5077
- self.actionSet_OPF_generation_to_profiles.setText(QCoreApplication.translate("mainWindow", u"Copy OPF generation to profiles (destructive)", None))
5077
+ self.actionSet_OPF_generation_to_profiles.setText(QCoreApplication.translate("mainWindow", u"Copy OPF generation to database (destructive)", None))
5078
5078
  #if QT_CONFIG(tooltip)
5079
5079
  self.actionSet_OPF_generation_to_profiles.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Copy OPF data</span></p><p>Destructive copy of the OPF generation results to the input profiles</p></body></html>", None))
5080
5080
  #endif // QT_CONFIG(tooltip)
@@ -715,13 +715,22 @@ class DiagramsMain(CompiledArraysMain):
715
715
  bus_active=bus_active,
716
716
  loadings=results.loading,
717
717
  types=results.bus_types,
718
+
718
719
  Sf=results.Sf,
719
720
  St=results.St,
720
721
  br_active=br_active,
722
+
721
723
  hvdc_Pf=results.hvdc_Pf,
722
724
  hvdc_Pt=-results.hvdc_Pf,
723
725
  hvdc_loading=results.hvdc_loading,
724
726
  hvdc_active=hvdc_active,
727
+
728
+ vsc_Pf=results.vsc_Pf,
729
+ vsc_Pt=-results.vsc_Pf,
730
+ vsc_Qt=np.zeros_like(results.vsc_Pf),
731
+ vsc_loading=results.vsc_loading,
732
+ vsc_active=vsc_active,
733
+
725
734
  fluid_node_p2x_flow=results.fluid_node_p2x_flow,
726
735
  fluid_node_current_level=results.fluid_node_current_level,
727
736
  fluid_node_spillage=results.fluid_node_spillage,
@@ -301,17 +301,34 @@ class ResultsMain(SimulationsMain):
301
301
 
302
302
  def copy_opf_to_profiles(self):
303
303
  """
304
- Copy the results from the OPF time series to the profiles
304
+ Copy the results from the OPF snapshot and time series to the database
305
305
  """
306
- _, results = self.session.optimal_power_flow_ts
307
306
 
307
+ # copy the snapshot if that exits
308
+ _, results = self.session.optimal_power_flow
308
309
  if results is not None:
309
310
 
310
311
  ok = yes_no_question('Are you sure that you want to overwrite '
311
- 'the generation, batteries and load profiles '
312
+ 'the generation, batteries and load snapshot values '
312
313
  'with the OPF results?',
313
314
  title="Overwrite profiles with OPF results")
314
315
 
316
+ if ok:
317
+ self.circuit.set_opf_snapshot_results(results)
318
+ self.show_info_toast("P snapshot set from the OPF results")
319
+
320
+ else:
321
+ self.show_warning_toast('The OPF time series has no results :(')
322
+
323
+ # copy the time series if that exists --------------------------------------------------------------------------
324
+ _, results = self.session.optimal_power_flow_ts
325
+ if results is not None:
326
+
327
+ ok = yes_no_question('Are you sure that you want to overwrite '
328
+ 'the generation, batteries and load profiles '
329
+ 'with the OPF time series results?',
330
+ title="Overwrite profiles with OPF results")
331
+
315
332
  if ok:
316
333
  self.circuit.set_opf_ts_results(results)
317
334
  self.show_info_toast("P profiles set from the OPF results")
@@ -23,7 +23,7 @@ from PySide6 import QtGui, QtWidgets, QtCore
23
23
  # Engine imports
24
24
  from GridCalEngine.Devices.multi_circuit import MultiCircuit
25
25
  import GridCalEngine.Simulations as sim
26
- from GridCalEngine.enumerations import EngineType, DeviceType
26
+ from GridCalEngine.enumerations import EngineType, DeviceType, SimulationTypes
27
27
  from GridCalEngine.Compilers.circuit_to_data import compile_numerical_circuit_at
28
28
  from GridCalEngine.DataStructures.numerical_circuit import NumericalCircuit
29
29
 
@@ -129,7 +129,7 @@ class BaseMainGui(QMainWindow):
129
129
  self.lock_ui = False
130
130
  self.ui.progress_frame.setVisible(self.lock_ui)
131
131
 
132
- self.stuff_running_now: List[str] = list()
132
+ self.stuff_running_now: List[SimulationTypes] = list()
133
133
 
134
134
  self.session: SimulationSession = SimulationSession(name='GUI session')
135
135
 
@@ -190,7 +190,9 @@ class SimulationsMain(TimeEventsMain):
190
190
  self.investment_evaluation_objfunc_dict = OrderedDict()
191
191
  lst = list()
192
192
  for method in [InvestmentsEvaluationObjectives.PowerFlow,
193
- InvestmentsEvaluationObjectives.TimeSeriesPowerFlow]:
193
+ InvestmentsEvaluationObjectives.TimeSeriesPowerFlow,
194
+ InvestmentsEvaluationObjectives.GenerationAdequacy,
195
+ InvestmentsEvaluationObjectives.SimpleDispatch]:
194
196
  self.investment_evaluation_objfunc_dict[method.value] = method
195
197
  lst.append(method.value)
196
198
  self.ui.investment_evaluation_objfunc_ComboBox.setModel(gf.get_list_model(lst))
@@ -562,29 +564,22 @@ class SimulationsMain(TimeEventsMain):
562
564
  :return:
563
565
  """
564
566
  model = QtGui.QStandardItemModel()
565
- model.setHorizontalHeaderLabels([
566
- "Combination", "capex", "opex", "losses", "overload_score", "voltage_score"
567
- ])
567
+ model.setHorizontalHeaderLabels(["Combination"] + list(drv.problem.get_objectives_names()))
568
568
 
569
569
  results = drv.results
570
570
  for i in range(results.max_eval):
571
- idx = np.where(results._combinations[i, :] != 0)[0]
571
+ idx = np.where(results.x[i, :] != 0)[0]
572
572
  if len(idx):
573
- row_items = [
574
- QtGui.QStandardItem(f"Combination {i}"),
575
- QtGui.QStandardItem(f"{results._capex[i]:.2f}"),
576
- QtGui.QStandardItem(f"{results._opex[i]:.2f}"),
577
- QtGui.QStandardItem(f"{results._losses[i]:.2f}"),
578
- QtGui.QStandardItem(f"{results._overload_score[i]:.2f}"),
579
- QtGui.QStandardItem(f"{results._voltage_score[i]:.2f}"),
573
+ row_items = [QtGui.QStandardItem(f"Combination {i}")] + [
574
+ QtGui.QStandardItem(f"{fi:.2f}") for fi in drv.results.f[i, :]
580
575
  ]
581
576
  model.appendRow(row_items)
582
577
 
583
578
  # Add names as child nodes under this combination
584
579
  names_parent_item = row_items[0] # Use the first column (Combination) as parent
585
580
  for k in idx:
586
- name_item = QtGui.QStandardItem(results.investment_groups_names[k])
587
- names_parent_item.appendRow([name_item] + [QtGui.QStandardItem("") for _ in range(5)])
581
+ name_item = QtGui.QStandardItem(results.x_names[k])
582
+ names_parent_item.appendRow([name_item])
588
583
 
589
584
  return model
590
585
 
@@ -2586,22 +2581,56 @@ class SimulationsMain(TimeEventsMain):
2586
2581
  plugin_fcn_ptr=fn_ptr
2587
2582
  )
2588
2583
 
2589
- opf_time_series_results = self.get_opf_ts_results(
2590
- use_opf=self.ui.actionOpf_to_Power_flow.isChecked()
2591
- )
2584
+ if obj_fn_tpe == InvestmentsEvaluationObjectives.PowerFlow:
2585
+ problem = sim.PowerFlowInvestmentProblem(
2586
+ grid=self.circuit,
2587
+ pf_options=self.get_selected_power_flow_options()
2588
+ )
2589
+
2590
+ elif obj_fn_tpe == InvestmentsEvaluationObjectives.TimeSeriesPowerFlow:
2591
+ problem = sim.TimeSeriesPowerFlowInvestmentProblem(
2592
+ grid=self.circuit,
2593
+ pf_options=self.get_selected_power_flow_options(),
2594
+ time_indices=self.get_time_indices(),
2595
+ clustering_results=self.get_clustering_results(),
2596
+ opf_time_series_results=self.get_opf_ts_results(
2597
+ use_opf=self.ui.actionOpf_to_Power_flow.isChecked()
2598
+ ),
2599
+ engine=self.get_preferred_engine()
2600
+ )
2601
+
2602
+ 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
+ )
2609
+
2610
+ 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
+ )
2592
2617
 
2593
- drv = sim.InvestmentsEvaluationDriver(grid=self.circuit,
2594
- options=options,
2595
- time_indices=self.get_time_indices(),
2596
- opf_time_series_results=opf_time_series_results,
2597
- clustering_results=self.get_clustering_results(),
2598
- engine=self.get_preferred_engine()
2599
- )
2618
+ else:
2619
+ self.show_error_toast("Objective not supported yet :/")
2620
+ return
2600
2621
 
2601
- self.session.run(drv,
2602
- post_func=self.post_run_investments_evaluation,
2603
- prog_func=self.ui.progressBar.setValue,
2604
- text_func=self.ui.progress_label.setText)
2622
+ drv = sim.InvestmentsEvaluationDriver(
2623
+ grid=self.circuit,
2624
+ options=options,
2625
+ problem=problem
2626
+ )
2627
+
2628
+ self.session.run(
2629
+ drv,
2630
+ post_func=self.post_run_investments_evaluation,
2631
+ prog_func=self.ui.progressBar.setValue,
2632
+ text_func=self.ui.progress_label.setText
2633
+ )
2605
2634
  self.add_simulation(SimulationTypes.InvestmentsEvaluation_run)
2606
2635
  self.LOCK()
2607
2636
 
@@ -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\x96\xe9\xde\xde\x95\
38478
+ \x00\x00\x01\x97\x08\x82\x1d\x17\
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.43"
9
+ __GridCal_VERSION__ = "5.3.44"
10
10
 
11
11
  url = 'https://github.com/SanPen/GridCal'
12
12