GridCal 5.3.25__tar.gz → 5.3.26__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 (289) hide show
  1. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +8 -6
  2. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +6 -8
  3. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +5 -0
  4. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +20 -2
  5. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/MainWindow.py +81 -58
  6. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/simulations.py +3 -1
  7. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/__version__.py +1 -1
  8. {gridcal-5.3.25 → gridcal-5.3.26}/PKG-INFO +1 -1
  9. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ExecuteGridCal.py +0 -0
  10. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  11. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  12. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  13. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  14. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  15. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  16. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/__init__.py +0 -0
  17. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/gui.py +0 -0
  18. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  19. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  20. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  21. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  22. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  23. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  24. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  25. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  26. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  27. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  28. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  29. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  30. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  31. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  32. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  33. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  34. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  35. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  36. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  37. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  38. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  39. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  40. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  41. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  42. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  43. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  44. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  45. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  46. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  47. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  48. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  49. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  50. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  51. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  52. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  53. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  54. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  55. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  56. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  57. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  58. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  59. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  60. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  61. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  62. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  63. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  64. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  65. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  66. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  67. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  68. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  69. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  70. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  71. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  72. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  73. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  74. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  75. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  76. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  77. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  78. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  79. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  80. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  81. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  82. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  83. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  84. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  85. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  86. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  87. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  88. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  89. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  90. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  91. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  92. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  93. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  94. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  95. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  96. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  97. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  98. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  99. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/__init__.py +0 -0
  100. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  101. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  102. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  103. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  104. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  105. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  106. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridGenerator/gui.py +0 -0
  107. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  108. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  109. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/__init__.py +0 -0
  110. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  111. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/demo_code.py +0 -0
  112. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
  113. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
  114. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  115. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  116. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  117. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  118. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  119. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  120. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  121. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  122. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  123. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  124. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  125. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  126. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  127. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  128. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  129. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  130. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  131. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/GridCalMain.py +0 -0
  132. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  133. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  134. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  135. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  136. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  137. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  138. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  139. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  140. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  141. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  142. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  143. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  144. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  145. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  146. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  147. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  148. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  149. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/__init__.py +0 -0
  150. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/icons_rc.py +0 -0
  151. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/object_select_window.py +0 -0
  152. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Main/update_gui_file.py +0 -0
  153. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  154. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  155. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  156. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  157. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  158. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  159. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  160. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  161. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  162. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  163. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  164. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  165. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  166. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  167. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  168. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  169. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  170. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  171. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  172. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  173. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  174. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  175. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  176. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  177. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  178. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  179. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  180. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  181. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  182. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  183. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  184. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  185. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  186. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  187. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  188. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  189. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  190. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  191. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  192. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  193. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  194. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  195. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  196. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  197. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  198. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  199. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  200. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  201. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  202. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  203. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Visualization/__init__.py +0 -0
  204. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Visualization/visualization.py +0 -0
  205. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Widgets/__init__.py +0 -0
  206. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  207. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  208. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  209. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  210. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  211. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  212. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  213. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/__init__.py +0 -0
  214. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/associations_model.py +0 -0
  215. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/general_dialogues.py +0 -0
  216. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/gui_functions.py +0 -0
  217. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/messages.py +0 -0
  218. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/object_model.py +0 -0
  219. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/pandas_model.py +0 -0
  220. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/plot_config.py +0 -0
  221. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/profiles_model.py +0 -0
  222. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/python_console.py +0 -0
  223. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/python_highlighter.py +0 -0
  224. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/results_model.py +0 -0
  225. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/table_view_header_wrap.py +0 -0
  226. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/themes.py +0 -0
  227. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/toast_widget.py +0 -0
  228. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/update_gui_all.py +0 -0
  229. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/update_gui_common.py +0 -0
  230. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Gui/wrappable_table_model.py +0 -0
  231. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/LICENSE.txt +0 -0
  232. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/__init__.py +0 -0
  233. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/export_results_driver.py +0 -0
  234. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/file_handler.py +0 -0
  235. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/server_driver.py +0 -0
  236. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/session.py +0 -0
  237. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/Session/synchronization_driver.py +0 -0
  238. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/__init__.py +0 -0
  239. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  240. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  241. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  242. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  243. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  244. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  245. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  246. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  247. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  248. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  249. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  250. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  251. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  252. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  253. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  254. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  255. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  256. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  257. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  258. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  259. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  260. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  261. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  262. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  263. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  264. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  265. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  266. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  267. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  268. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  269. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  270. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  271. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  272. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  273. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  274. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  275. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  276. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  277. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/__init__.py +0 -0
  278. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/GridCal.ico +0 -0
  279. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/GridCal.svg +0 -0
  280. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/__init__.py +0 -0
  281. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/cables.csv +0 -0
  282. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/sequence_lines.csv +0 -0
  283. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/transformers.csv +0 -0
  284. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/data/wires.csv +0 -0
  285. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/plugins.py +0 -0
  286. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/templates.py +0 -0
  287. {gridcal-5.3.25 → gridcal-5.3.26}/GridCal/update.py +0 -0
  288. {gridcal-5.3.25 → gridcal-5.3.26}/setup.cfg +0 -0
  289. {gridcal-5.3.25 → gridcal-5.3.26}/setup.py +0 -0
@@ -496,7 +496,8 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
496
496
  def calculate_total_length(self) -> float:
497
497
  """
498
498
  Calculate the total length of the line by summing the distances between all waypoints
499
- using the haversine formula, and update the line's length property. Issue #23
499
+ using the haversine formula, and update the line's length property. The coordiates used are the
500
+ ones from the api_object, not the graphic objects, in order to avoid undesired recalculations. Issue #23
500
501
 
501
502
  :return: Total length in kilometers
502
503
  """
@@ -508,17 +509,18 @@ class MapLineContainer(GenericDiagramWidget, QGraphicsItemGroup):
508
509
  # Add the substation from
509
510
  substation_from = self.substation_from()
510
511
  if substation_from is not None:
511
- connection_points.append((substation_from.lat, substation_from.lon))
512
-
512
+ connection_points.append((substation_from.api_object.latitude, substation_from.api_object.longitude))
513
+
513
514
  # Add all intermediate points
514
515
  for node in self.nodes_list:
515
- connection_points.append((node.lat, node.lon))
516
+ connection_points.append((node.api_object.lat, node.api_object.long))
516
517
 
517
518
  # Add the substation to
518
519
  substation_to = self.substation_to()
520
+
519
521
  if substation_to is not None:
520
- connection_points.append((substation_to.lat, substation_to.lon))
521
-
522
+ connection_points.append((substation_to.api_object.latitude, substation_to.api_object.longitude))
523
+
522
524
  # Calculate total length by summing distances between consecutive points
523
525
  total_length = 0.0
524
526
  for i in range(len(connection_points) - 1):
@@ -282,7 +282,7 @@ class MapLineSegment(QGraphicsLineItem):
282
282
  add_menu_entry(menu=menu,
283
283
  text="Change substation connection of the line",
284
284
  function_ptr=self.editor.change_line_connection,
285
- icon_path=":/Icons/icons/divide.svg") # TODO: Think what icon can work well
285
+ icon_path=":/Icons/icons/move_bus.svg")
286
286
  else:
287
287
  pass
288
288
 
@@ -509,10 +509,8 @@ class MapLineSegment(QGraphicsLineItem):
509
509
  total_length = self.container.calculate_total_length()
510
510
 
511
511
  # Show a message with the calculated length
512
- from PySide6.QtWidgets import QMessageBox
513
- msg = QMessageBox()
514
- msg.setIcon(QMessageBox.Icon.Information)
515
- msg.setText(f"Line length calculated: {total_length:.2f} km")
516
- msg.setInformativeText(f"The length property of line '{self.api_object.name}' has been updated.")
517
- msg.setWindowTitle("Length Calculation")
518
- msg.exec()
512
+ self.editor.gui.show_info_toast(
513
+ message=f"Line length calculated: {total_length:.2f} km. The length property of line "
514
+ f"{self.api_object.name} has been updated.")
515
+
516
+
@@ -638,8 +638,13 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
638
638
  for line in self.editor.circuit.lines:
639
639
  if line.bus_from in removed_buses:
640
640
  line.bus_from = recipient_buses[line.bus_from.Vnom]
641
+ line_graphic = self.editor.graphics_manager.query(elm=line)
642
+ line_graphic.calculate_total_length()
643
+
641
644
  if line.bus_to in removed_buses:
642
645
  line.bus_to = recipient_buses[line.bus_to.Vnom]
646
+ line_graphic = self.editor.graphics_manager.query(elm=line)
647
+ line_graphic.calculate_total_length()
643
648
 
644
649
  for bus in removed_buses:
645
650
  self.editor.circuit.delete_bus(obj=bus, delete_associated=False)
@@ -55,7 +55,7 @@ from GridCal.Gui.Diagrams.graphics_manager import ALL_MAP_GRAPHICS
55
55
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
56
56
  from GridCal.Gui.Diagrams.base_diagram_widget import BaseDiagramWidget
57
57
  from GridCal.Gui.object_model import ObjectsModel
58
- from GridCal.Gui.messages import error_msg, info_msg
58
+ from GridCal.Gui.messages import error_msg, info_msg, yes_no_question
59
59
 
60
60
  if TYPE_CHECKING:
61
61
  from GridCal.Gui.Main.SubClasses.Model.diagrams import DiagramsMain
@@ -1400,6 +1400,23 @@ class GridMapWidget(BaseDiagramWidget):
1400
1400
  gelm.api_object.lat = gelm.lat
1401
1401
  gelm.api_object.long = gelm.lon
1402
1402
 
1403
+ ok = yes_no_question(title='Update lengths?',
1404
+ text='Do you want to update lengths of lines? \n'
1405
+ 'IMPORTANT: This will take into account every movement of substation and line '
1406
+ 'locations. If you are unsure of the effects of this updating, click no and perform '
1407
+ 'the individual length update in a new map or in the specific line.')
1408
+ if ok:
1409
+ line_graphics_list = self.graphics_manager.graphic_dict[DeviceType.LineDevice]
1410
+
1411
+ for key, line_graphic in line_graphics_list.items():
1412
+ line_graphic.calculate_total_length()
1413
+
1414
+ self.gui.show_info_toast(message='Line lengths UPDATED')
1415
+
1416
+
1417
+ else:
1418
+ self.gui.show_info_toast(message='Line lengths NOT UPDATED')
1419
+
1403
1420
  def plot_substation(self, i: int, api_object: Substation):
1404
1421
  """
1405
1422
  Plot branch results
@@ -2264,7 +2281,8 @@ class GridMapWidget(BaseDiagramWidget):
2264
2281
  # Remove past graphic item and add the new one
2265
2282
 
2266
2283
  self.remove_branch_graphic(line=line_graphic, delete_from_db=False)
2267
- self.add_api_line(api_object=line_api)
2284
+ line = self.add_api_line(api_object=line_api)
2285
+ line.calculate_total_length()
2268
2286
 
2269
2287
  msg = QMessageBox()
2270
2288
  msg.setIcon(QMessageBox.Icon.Information)
@@ -2590,6 +2590,12 @@ class Ui_mainWindow(object):
2590
2590
 
2591
2591
  self.verticalLayout_4.addWidget(self.orthogonalize_pf_controls_checkBox)
2592
2592
 
2593
+ self.initialize_pf_angles_checkBox = QCheckBox(self.frame_36)
2594
+ self.initialize_pf_angles_checkBox.setObjectName(u"initialize_pf_angles_checkBox")
2595
+ self.initialize_pf_angles_checkBox.setFont(font1)
2596
+
2597
+ self.verticalLayout_4.addWidget(self.initialize_pf_angles_checkBox)
2598
+
2593
2599
  self.label_54 = QLabel(self.frame_36)
2594
2600
  self.label_54.setObjectName(u"label_54")
2595
2601
 
@@ -2909,11 +2915,23 @@ class Ui_mainWindow(object):
2909
2915
  self.groupBox.setFont(font6)
2910
2916
  self.gridLayout_18 = QGridLayout(self.groupBox)
2911
2917
  self.gridLayout_18.setObjectName(u"gridLayout_18")
2912
- self.label_103 = QLabel(self.groupBox)
2913
- self.label_103.setObjectName(u"label_103")
2914
- self.label_103.setFont(font7)
2918
+ self.label_10 = QLabel(self.groupBox)
2919
+ self.label_10.setObjectName(u"label_10")
2920
+ self.label_10.setFont(font7)
2915
2921
 
2916
- self.gridLayout_18.addWidget(self.label_103, 2, 0, 1, 1)
2922
+ self.gridLayout_18.addWidget(self.label_10, 0, 0, 1, 1)
2923
+
2924
+ self.opfZonalGroupByComboBox = QComboBox(self.groupBox)
2925
+ self.opfZonalGroupByComboBox.setObjectName(u"opfZonalGroupByComboBox")
2926
+ self.opfZonalGroupByComboBox.setFont(font7)
2927
+
2928
+ self.gridLayout_18.addWidget(self.opfZonalGroupByComboBox, 2, 1, 1, 1)
2929
+
2930
+ self.opfUnitCommitmentCheckBox = QCheckBox(self.groupBox)
2931
+ self.opfUnitCommitmentCheckBox.setObjectName(u"opfUnitCommitmentCheckBox")
2932
+ self.opfUnitCommitmentCheckBox.setFont(font7)
2933
+
2934
+ self.gridLayout_18.addWidget(self.opfUnitCommitmentCheckBox, 5, 0, 1, 1)
2917
2935
 
2918
2936
  self.label_132 = QLabel(self.groupBox)
2919
2937
  self.label_132.setObjectName(u"label_132")
@@ -2926,48 +2944,39 @@ class Ui_mainWindow(object):
2926
2944
 
2927
2945
  self.gridLayout_18.addWidget(self.opf_time_grouping_comboBox, 1, 1, 1, 1)
2928
2946
 
2929
- self.label_4 = QLabel(self.groupBox)
2930
- self.label_4.setObjectName(u"label_4")
2931
- self.label_4.setFont(font7)
2947
+ self.mip_solver_comboBox = QComboBox(self.groupBox)
2948
+ self.mip_solver_comboBox.setObjectName(u"mip_solver_comboBox")
2949
+ self.mip_solver_comboBox.setFont(font7)
2932
2950
 
2933
- self.gridLayout_18.addWidget(self.label_4, 1, 0, 1, 1)
2951
+ self.gridLayout_18.addWidget(self.mip_solver_comboBox, 0, 1, 1, 1)
2952
+
2953
+ self.fixOpfCheckBox = QCheckBox(self.groupBox)
2954
+ self.fixOpfCheckBox.setObjectName(u"fixOpfCheckBox")
2955
+ self.fixOpfCheckBox.setFont(font7)
2956
+
2957
+ self.gridLayout_18.addWidget(self.fixOpfCheckBox, 8, 0, 1, 2)
2934
2958
 
2935
2959
  self.considerContingenciesOpfCheckBox = QCheckBox(self.groupBox)
2936
2960
  self.considerContingenciesOpfCheckBox.setObjectName(u"considerContingenciesOpfCheckBox")
2937
2961
  self.considerContingenciesOpfCheckBox.setFont(font7)
2938
2962
 
2939
- self.gridLayout_18.addWidget(self.considerContingenciesOpfCheckBox, 5, 0, 1, 2)
2963
+ self.gridLayout_18.addWidget(self.considerContingenciesOpfCheckBox, 6, 0, 1, 2)
2940
2964
 
2941
- self.label_10 = QLabel(self.groupBox)
2942
- self.label_10.setObjectName(u"label_10")
2943
- self.label_10.setFont(font7)
2965
+ self.label_4 = QLabel(self.groupBox)
2966
+ self.label_4.setObjectName(u"label_4")
2967
+ self.label_4.setFont(font7)
2944
2968
 
2945
- self.gridLayout_18.addWidget(self.label_10, 0, 0, 1, 1)
2969
+ self.gridLayout_18.addWidget(self.label_4, 1, 0, 1, 1)
2946
2970
 
2947
- self.opfContingencyToleranceSpinBox = QDoubleSpinBox(self.groupBox)
2948
- self.opfContingencyToleranceSpinBox.setObjectName(u"opfContingencyToleranceSpinBox")
2949
- self.opfContingencyToleranceSpinBox.setFont(font7)
2950
- self.opfContingencyToleranceSpinBox.setDecimals(4)
2951
- self.opfContingencyToleranceSpinBox.setSingleStep(0.010000000000000)
2952
- self.opfContingencyToleranceSpinBox.setValue(0.050000000000000)
2971
+ self.save_mip_checkBox = QCheckBox(self.groupBox)
2972
+ self.save_mip_checkBox.setObjectName(u"save_mip_checkBox")
2973
+ self.save_mip_checkBox.setFont(font7)
2953
2974
 
2954
- self.gridLayout_18.addWidget(self.opfContingencyToleranceSpinBox, 3, 1, 1, 1)
2975
+ self.gridLayout_18.addWidget(self.save_mip_checkBox, 11, 0, 1, 2)
2955
2976
 
2956
2977
  self.verticalSpacer_18 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
2957
2978
 
2958
- self.gridLayout_18.addItem(self.verticalSpacer_18, 10, 0, 1, 1)
2959
-
2960
- self.opfZonalGroupByComboBox = QComboBox(self.groupBox)
2961
- self.opfZonalGroupByComboBox.setObjectName(u"opfZonalGroupByComboBox")
2962
- self.opfZonalGroupByComboBox.setFont(font7)
2963
-
2964
- self.gridLayout_18.addWidget(self.opfZonalGroupByComboBox, 2, 1, 1, 1)
2965
-
2966
- self.mip_solver_comboBox = QComboBox(self.groupBox)
2967
- self.mip_solver_comboBox.setObjectName(u"mip_solver_comboBox")
2968
- self.mip_solver_comboBox.setFont(font7)
2969
-
2970
- self.gridLayout_18.addWidget(self.mip_solver_comboBox, 0, 1, 1, 1)
2979
+ self.gridLayout_18.addItem(self.verticalSpacer_18, 12, 0, 1, 1)
2971
2980
 
2972
2981
  self.label_104 = QLabel(self.groupBox)
2973
2982
  self.label_104.setObjectName(u"label_104")
@@ -2975,17 +2984,26 @@ class Ui_mainWindow(object):
2975
2984
 
2976
2985
  self.gridLayout_18.addWidget(self.label_104, 3, 0, 1, 1)
2977
2986
 
2978
- self.save_mip_checkBox = QCheckBox(self.groupBox)
2979
- self.save_mip_checkBox.setObjectName(u"save_mip_checkBox")
2980
- self.save_mip_checkBox.setFont(font7)
2987
+ self.label_103 = QLabel(self.groupBox)
2988
+ self.label_103.setObjectName(u"label_103")
2989
+ self.label_103.setFont(font7)
2981
2990
 
2982
- self.gridLayout_18.addWidget(self.save_mip_checkBox, 9, 0, 1, 2)
2991
+ self.gridLayout_18.addWidget(self.label_103, 2, 0, 1, 1)
2983
2992
 
2984
- self.fixOpfCheckBox = QCheckBox(self.groupBox)
2985
- self.fixOpfCheckBox.setObjectName(u"fixOpfCheckBox")
2986
- self.fixOpfCheckBox.setFont(font7)
2993
+ self.opfContingencyToleranceSpinBox = QDoubleSpinBox(self.groupBox)
2994
+ self.opfContingencyToleranceSpinBox.setObjectName(u"opfContingencyToleranceSpinBox")
2995
+ self.opfContingencyToleranceSpinBox.setFont(font7)
2996
+ self.opfContingencyToleranceSpinBox.setDecimals(4)
2997
+ self.opfContingencyToleranceSpinBox.setSingleStep(0.010000000000000)
2998
+ self.opfContingencyToleranceSpinBox.setValue(0.050000000000000)
2987
2999
 
2988
- self.gridLayout_18.addWidget(self.fixOpfCheckBox, 6, 0, 1, 2)
3000
+ self.gridLayout_18.addWidget(self.opfContingencyToleranceSpinBox, 3, 1, 1, 1)
3001
+
3002
+ self.opfGEPCheckBox = QCheckBox(self.groupBox)
3003
+ self.opfGEPCheckBox.setObjectName(u"opfGEPCheckBox")
3004
+ self.opfGEPCheckBox.setFont(font7)
3005
+
3006
+ self.gridLayout_18.addWidget(self.opfGEPCheckBox, 7, 0, 1, 2)
2989
3007
 
2990
3008
 
2991
3009
  self.gridLayout_10.addWidget(self.groupBox, 3, 3, 1, 1)
@@ -3065,12 +3083,6 @@ class Ui_mainWindow(object):
3065
3083
 
3066
3084
  self.gridLayout_26.addWidget(self.opfMaximizeExcahngeCheckBox, 5, 0, 1, 2)
3067
3085
 
3068
- self.opfUnitCommitmentCheckBox = QCheckBox(self.groupBox_2)
3069
- self.opfUnitCommitmentCheckBox.setObjectName(u"opfUnitCommitmentCheckBox")
3070
- self.opfUnitCommitmentCheckBox.setFont(font7)
3071
-
3072
- self.gridLayout_26.addWidget(self.opfUnitCommitmentCheckBox, 4, 0, 1, 2)
3073
-
3074
3086
  self.skipOpfGenerationLimitsCheckBox = QCheckBox(self.groupBox_2)
3075
3087
  self.skipOpfGenerationLimitsCheckBox.setObjectName(u"skipOpfGenerationLimitsCheckBox")
3076
3088
  self.skipOpfGenerationLimitsCheckBox.setFont(font7)
@@ -5624,6 +5636,10 @@ class Ui_mainWindow(object):
5624
5636
  self.orthogonalize_pf_controls_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"If checked, the controls are adjusted to their closest tap", None))
5625
5637
  #endif // QT_CONFIG(tooltip)
5626
5638
  self.orthogonalize_pf_controls_checkBox.setText(QCoreApplication.translate("mainWindow", u"Orthogonalize controls", None))
5639
+ #if QT_CONFIG(tooltip)
5640
+ self.initialize_pf_angles_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"If checked, the power flow solution is initialized with a linear (so called DC) power flow first", None))
5641
+ #endif // QT_CONFIG(tooltip)
5642
+ self.initialize_pf_angles_checkBox.setText(QCoreApplication.translate("mainWindow", u"Initialize angles", None))
5627
5643
  self.label_54.setText("")
5628
5644
  #if QT_CONFIG(tooltip)
5629
5645
  self.temperature_correction_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"Correct the branches resistance using the temperature", None))
@@ -5701,32 +5717,40 @@ class Ui_mainWindow(object):
5701
5717
  #endif // QT_CONFIG(tooltip)
5702
5718
  self.ips_control_Qlimits_checkBox.setText(QCoreApplication.translate("mainWindow", u"Control Q limits", None))
5703
5719
  self.groupBox.setTitle(QCoreApplication.translate("mainWindow", u"Linear settings", None))
5704
- self.label_103.setText(QCoreApplication.translate("mainWindow", u"Zone grouping", None))
5720
+ self.label_10.setText(QCoreApplication.translate("mainWindow", u"MIP solver", None))
5721
+ #if QT_CONFIG(tooltip)
5722
+ self.opfUnitCommitmentCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Apply unit commitment technique", None))
5723
+ #endif // QT_CONFIG(tooltip)
5724
+ self.opfUnitCommitmentCheckBox.setText(QCoreApplication.translate("mainWindow", u"Unit commitment", None))
5705
5725
  self.label_132.setText("")
5706
5726
  #if QT_CONFIG(tooltip)
5707
5727
  self.opf_time_grouping_comboBox.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p>Choose the time grouping to possibly shorten the solution time.</p><p>This splits the time series by week, month, etc. and the subproblems are solved sequentially.</p></body></html>", None))
5708
5728
  #endif // QT_CONFIG(tooltip)
5709
- self.label_4.setText(QCoreApplication.translate("mainWindow", u"Time grouping", None))
5710
5729
  #if QT_CONFIG(tooltip)
5711
- self.considerContingenciesOpfCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Consider the contingencies, only applies to OPF", None))
5730
+ self.mip_solver_comboBox.setToolTip(QCoreApplication.translate("mainWindow", u"Choose the external mixed integer programming solver", None))
5712
5731
  #endif // QT_CONFIG(tooltip)
5713
- self.considerContingenciesOpfCheckBox.setText(QCoreApplication.translate("mainWindow", u"Consider contingencies", None))
5714
- self.label_10.setText(QCoreApplication.translate("mainWindow", u"MIP solver", None))
5715
5732
  #if QT_CONFIG(tooltip)
5716
- self.opfContingencyToleranceSpinBox.setToolTip(QCoreApplication.translate("mainWindow", u"LODF matrix tolerance choosing contingencies", None))
5733
+ self.fixOpfCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Fix infeasible problems and rey with the relaxed problem. Applies to OPF and NTC", None))
5717
5734
  #endif // QT_CONFIG(tooltip)
5735
+ self.fixOpfCheckBox.setText(QCoreApplication.translate("mainWindow", u"Fix infeasibilities and retry", None))
5718
5736
  #if QT_CONFIG(tooltip)
5719
- self.mip_solver_comboBox.setToolTip(QCoreApplication.translate("mainWindow", u"Choose the external mixed integer programming solver", None))
5737
+ self.considerContingenciesOpfCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Consider the contingencies when dispatching", None))
5720
5738
  #endif // QT_CONFIG(tooltip)
5721
- self.label_104.setText(QCoreApplication.translate("mainWindow", u"Contingency tolerance", None))
5739
+ self.considerContingenciesOpfCheckBox.setText(QCoreApplication.translate("mainWindow", u"Compute contingencies", None))
5740
+ self.label_4.setText(QCoreApplication.translate("mainWindow", u"Time grouping", None))
5722
5741
  #if QT_CONFIG(tooltip)
5723
5742
  self.save_mip_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p>The program will save the MIP file in .lp format in the user GridCal folder before running a linear optimization study.</p></body></html>", None))
5724
5743
  #endif // QT_CONFIG(tooltip)
5725
5744
  self.save_mip_checkBox.setText(QCoreApplication.translate("mainWindow", u"Save MIP file", None))
5745
+ self.label_104.setText(QCoreApplication.translate("mainWindow", u"Contingency tolerance", None))
5746
+ self.label_103.setText(QCoreApplication.translate("mainWindow", u"Zone grouping", None))
5726
5747
  #if QT_CONFIG(tooltip)
5727
- self.fixOpfCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Fix infeasible problems and rey with the relaxed problem. Applies to OPF and NTC", None))
5748
+ self.opfContingencyToleranceSpinBox.setToolTip(QCoreApplication.translate("mainWindow", u"LODF matrix tolerance choosing contingencies", None))
5728
5749
  #endif // QT_CONFIG(tooltip)
5729
- self.fixOpfCheckBox.setText(QCoreApplication.translate("mainWindow", u"Fix infeasibilities and retry", None))
5750
+ #if QT_CONFIG(tooltip)
5751
+ self.opfGEPCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"Apply generation expansion planning", None))
5752
+ #endif // QT_CONFIG(tooltip)
5753
+ self.opfGEPCheckBox.setText(QCoreApplication.translate("mainWindow", u"Generation expansion planning", None))
5730
5754
  self.label_73.setText(QCoreApplication.translate("mainWindow", u"Optimal Power Flow", None))
5731
5755
  self.groupBox_2.setTitle(QCoreApplication.translate("mainWindow", u"General settings", None))
5732
5756
  self.label_128.setText(QCoreApplication.translate("mainWindow", u"Verbose", None))
@@ -5743,7 +5767,6 @@ class Ui_mainWindow(object):
5743
5767
  self.addOptimalPowerFlowReportCheckBox.setText(QCoreApplication.translate("mainWindow", u"Add report", None))
5744
5768
  self.label_133.setText("")
5745
5769
  self.opfMaximizeExcahngeCheckBox.setText(QCoreApplication.translate("mainWindow", u"Maximize area exchange", None))
5746
- self.opfUnitCommitmentCheckBox.setText(QCoreApplication.translate("mainWindow", u"Unit commitment", None))
5747
5770
  self.skipOpfGenerationLimitsCheckBox.setText(QCoreApplication.translate("mainWindow", u"Skip generation limits", None))
5748
5771
  self.label_72.setText("")
5749
5772
  self.settings_tabWidget.setTabText(self.settings_tabWidget.indexOf(self.opf_tab), QCoreApplication.translate("mainWindow", u"Opf", None))
@@ -729,7 +729,6 @@ class SimulationsMain(TimeEventsMain):
729
729
  verbose=self.ui.verbositySpinBox.value(),
730
730
  tolerance=tolerance,
731
731
  max_iter=self.ui.max_iterations_spinBox.value(),
732
- max_outer_loop_iter=1000,
733
732
  control_q=self.ui.control_q_checkBox.isChecked(),
734
733
  control_taps_phase=self.ui.control_tap_phase_checkBox.isChecked(),
735
734
  control_taps_modules=self.ui.control_tap_modules_checkBox.isChecked(),
@@ -741,6 +740,7 @@ class SimulationsMain(TimeEventsMain):
741
740
  ignore_single_node_islands=self.ui.ignore_single_node_islands_checkBox.isChecked(),
742
741
  trust_radius=self.ui.muSpinBox.value(),
743
742
  use_stored_guess=self.ui.use_voltage_guess_checkBox.isChecked(),
743
+ initialize_angles=self.ui.initialize_pf_angles_checkBox.isChecked(),
744
744
  generate_report=self.ui.addPowerFlowReportCheckBox.isChecked()
745
745
  )
746
746
 
@@ -1951,6 +1951,7 @@ class SimulationsMain(TimeEventsMain):
1951
1951
  unit_commitment = self.ui.opfUnitCommitmentCheckBox.isChecked()
1952
1952
  generate_report = self.ui.addOptimalPowerFlowReportCheckBox.isChecked()
1953
1953
  robust = self.ui.fixOpfCheckBox.isChecked()
1954
+ generation_expansion_planning = self.ui.opfGEPCheckBox.isChecked()
1954
1955
 
1955
1956
  if self.ui.save_mip_checkBox.isChecked():
1956
1957
  folder = opf_file_path()
@@ -1995,6 +1996,7 @@ class SimulationsMain(TimeEventsMain):
1995
1996
  maximize_flows=maximize_flows,
1996
1997
  inter_aggregation_info=inter_aggregation_info,
1997
1998
  unit_commitment=unit_commitment,
1999
+ generation_expansion_planning=generation_expansion_planning,
1998
2000
  export_model_fname=export_model_fname,
1999
2001
  generate_report=generate_report,
2000
2002
  ips_method=ips_method,
@@ -6,7 +6,7 @@ import datetime
6
6
  _current_year_ = datetime.datetime.now().year
7
7
 
8
8
  # do not forget to keep a three-number version!!!
9
- __GridCal_VERSION__ = "5.3.25"
9
+ __GridCal_VERSION__ = "5.3.26"
10
10
 
11
11
  url = 'https://github.com/SanPen/GridCal'
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: GridCal
3
- Version: 5.3.25
3
+ Version: 5.3.26
4
4
  Summary: GridCal is a Power Systems simulation program intended for professional use and research
5
5
  Home-page: https://github.com/SanPen/GridCal
6
6
  Author: Santiago Peñate Vera et. Al.