GridCal 5.2.0__tar.gz → 5.2.2__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 (288) hide show
  1. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/object_plot_analysis.py +50 -1
  2. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +3 -2
  3. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/GridCalMain.py +2 -2
  4. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/MainWindow.py +122 -100
  5. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +1 -0
  6. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/io.py +24 -1
  7. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/simulations.py +58 -1
  8. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/icons_rc.py +50 -50
  9. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/file_handler.py +11 -7
  10. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/__version__.py +1 -1
  11. GridCal-5.2.2/GridCal/data/GridCal.ico +0 -0
  12. GridCal-5.2.2/GridCal/data/GridCal.svg +88 -0
  13. {GridCal-5.2.0 → GridCal-5.2.2}/PKG-INFO +1 -1
  14. GridCal-5.2.2/setup.py +230 -0
  15. GridCal-5.2.0/setup.py +0 -116
  16. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ExecuteGridCal.py +0 -0
  17. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  18. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  19. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  20. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  21. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  22. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  23. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/__init__.py +0 -0
  24. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/gui.py +0 -0
  25. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  26. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  27. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  28. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  29. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  30. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  31. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  32. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  33. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  34. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  35. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  36. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  37. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  38. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  39. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  40. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  41. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  42. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  43. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  44. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  45. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  46. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  47. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  48. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  49. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  50. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  51. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  52. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  53. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  54. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  55. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  56. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  57. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
  58. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
  59. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
  60. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
  61. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
  62. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
  63. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
  64. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  65. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  66. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  67. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  68. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  69. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  70. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  71. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  72. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
  73. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  74. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  75. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  76. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  77. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  78. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  79. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  80. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  81. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  82. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_editor.py +0 -0
  83. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  84. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  85. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  86. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  87. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  88. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  89. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  90. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  91. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  92. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  93. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  94. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  95. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  96. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  97. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  98. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  99. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  100. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  101. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  102. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  103. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  104. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  105. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  106. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  107. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  108. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  109. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  110. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  111. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  112. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  113. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  114. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  115. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/__init__.py +0 -0
  116. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  117. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  118. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  119. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  120. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  121. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  122. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/GridGenerator/gui.py +0 -0
  123. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  124. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  125. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  126. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  127. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  128. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  129. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  130. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  131. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  132. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  133. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  134. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  135. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  136. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  137. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  138. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  139. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  140. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  141. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  142. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  143. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  144. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  145. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  146. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  147. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  148. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  149. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  150. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  151. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  152. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  153. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/__init__.py +0 -0
  154. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/object_select_window.py +0 -0
  155. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Main/update_gui_file.py +0 -0
  156. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  157. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  158. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  159. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  160. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  161. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  162. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  163. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  164. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  165. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  166. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  167. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  168. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  169. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  170. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  171. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  172. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  173. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  174. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  175. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  176. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  177. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  178. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  179. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  180. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  181. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  182. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  183. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  184. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  185. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  186. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  187. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  188. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  189. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  190. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  191. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  192. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  193. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  194. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  195. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  196. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  197. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  198. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  199. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  200. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  201. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  202. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  203. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  204. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  205. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  206. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  207. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  208. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Visualization/__init__.py +0 -0
  209. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Visualization/visualization.py +0 -0
  210. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Widgets/__init__.py +0 -0
  211. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  212. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  213. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  214. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  215. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  216. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  217. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  218. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/__init__.py +0 -0
  219. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/associations_model.py +0 -0
  220. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/console_widget.py +0 -0
  221. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/general_dialogues.py +0 -0
  222. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/gui_functions.py +0 -0
  223. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/messages.py +0 -0
  224. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/object_model.py +0 -0
  225. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/pandas_model.py +0 -0
  226. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/plot_config.py +0 -0
  227. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/profiles_model.py +0 -0
  228. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/results_model.py +0 -0
  229. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/table_view_header_wrap.py +0 -0
  230. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/themes.py +0 -0
  231. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/update_gui_all.py +0 -0
  232. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/update_gui_common.py +0 -0
  233. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Gui/wrappable_table_model.py +0 -0
  234. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/LICENSE.txt +0 -0
  235. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/__init__.py +0 -0
  236. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/export_results_driver.py +0 -0
  237. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/server_driver.py +0 -0
  238. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/session.py +0 -0
  239. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/Session/synchronization_driver.py +0 -0
  240. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/__init__.py +0 -0
  241. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  242. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  243. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  244. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  245. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  246. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  247. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  248. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  249. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  250. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  251. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  252. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  253. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  254. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  255. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  256. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  257. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  258. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  259. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  260. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  261. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  262. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  263. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  264. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  265. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  266. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  267. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  268. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  269. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  270. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  271. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  272. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  273. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  274. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  275. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  276. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  277. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  278. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  279. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/__init__.py +0 -0
  280. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/data/__init__.py +0 -0
  281. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/data/cables.csv +0 -0
  282. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/data/sequence_lines.csv +0 -0
  283. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/data/transformers.csv +0 -0
  284. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/data/wires.csv +0 -0
  285. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/plugins.py +0 -0
  286. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/templates.py +0 -0
  287. {GridCal-5.2.0 → GridCal-5.2.2}/GridCal/update.py +0 -0
  288. {GridCal-5.2.0 → GridCal-5.2.2}/setup.cfg +0 -0
@@ -774,6 +774,8 @@ def analyze_buses(elements: List[Bus],
774
774
  object_type: DeviceType,
775
775
  tap_min: float,
776
776
  tap_max: float,
777
+ v_low: float,
778
+ v_high: float,
777
779
  logger: GridErrorLog,
778
780
  fixable_errors: List[FIXABLE_ERROR_TYPES]):
779
781
  """
@@ -782,6 +784,8 @@ def analyze_buses(elements: List[Bus],
782
784
  :param object_type:
783
785
  :param tap_min:
784
786
  :param tap_max:
787
+ :param v_low:
788
+ :param v_high:
785
789
  :param logger:
786
790
  :param fixable_errors:
787
791
  :return:
@@ -805,6 +809,49 @@ def analyze_buses(elements: List[Bus],
805
809
  lower_limit=tap_min,
806
810
  upper_limit=tap_max))
807
811
 
812
+ if elm.Vmin == 0.0:
813
+ logger.add(object_type=object_type.value,
814
+ element_name=elm.name,
815
+ element_index=i,
816
+ severity=LogSeverity.Error,
817
+ propty='Vmin',
818
+ message='Vmin = 0, that affects the nonlinear OPF',
819
+ lower="0",
820
+ val=elm.Vmin)
821
+ fixable_errors.append(FixableErrorOutOfRange(grid_element=elm,
822
+ property_name='Vmin',
823
+ value=elm.Vmin,
824
+ lower_limit=v_low,
825
+ upper_limit=v_low))
826
+
827
+ if elm.Vmax < elm.Vmin or elm.Vmax == 0:
828
+
829
+ if elm.Vmax == 0:
830
+ logger.add(object_type=object_type.value,
831
+ element_name=elm.name,
832
+ element_index=i,
833
+ severity=LogSeverity.Error,
834
+ propty='Vmax',
835
+ message=' Vmax = 0, that affects the nonlinear OPF',
836
+ lower="0",
837
+ val=elm.Vmax)
838
+
839
+ if elm.Vmax < elm.Vmin:
840
+ logger.add(object_type=object_type.value,
841
+ element_name=elm.name,
842
+ element_index=i,
843
+ severity=LogSeverity.Error,
844
+ propty='Vmax',
845
+ message=' Vmax <= Vmin, that affects the nonlinear OPF',
846
+ lower="0",
847
+ val=elm.Vmax)
848
+
849
+ fixable_errors.append(FixableErrorOutOfRange(grid_element=elm,
850
+ property_name='Vmax',
851
+ value=elm.Vmax,
852
+ lower_limit=v_high,
853
+ upper_limit=v_high))
854
+
808
855
  if elm.name == '':
809
856
  logger.add(object_type=object_type.value,
810
857
  element_name=elm.name,
@@ -1219,6 +1266,8 @@ def grid_analysis(circuit: MultiCircuit,
1219
1266
  tap_min=tap_min,
1220
1267
  tap_max=tap_max,
1221
1268
  logger=logger,
1269
+ v_low=v_low,
1270
+ v_high=v_high,
1222
1271
  fixable_errors=fixable_errors)
1223
1272
 
1224
1273
  analyze_lines(elements=circuit.get_lines(),
@@ -1353,7 +1402,7 @@ def grid_analysis(circuit: MultiCircuit,
1353
1402
  # analyze the numerical stability
1354
1403
  nc = compile_numerical_circuit_at(circuit, t_idx=None) # compile the snapshot
1355
1404
 
1356
- rcond, unstable = sparse_instability_svd_test(nc.Bbus, condition_number_thrshold=1.0/condition_number_thrshold)
1405
+ rcond, unstable = sparse_instability_svd_test(nc.Bbus, condition_number_thrshold=1.0 / condition_number_thrshold)
1357
1406
 
1358
1407
  if unstable:
1359
1408
  logger.add(object_type='matrix',
@@ -210,9 +210,10 @@ class LineEditor(QDialog):
210
210
  if length != 0.0:
211
211
 
212
212
  if self.selected_template is not None:
213
- self.line.set_length(val=length, update_electrical_values=False)
213
+ self.line.disable_auto_updates()
214
+ self.line.set_length(val=length)
214
215
  self.line.apply_template(obj=self.selected_template, Sbase=self.Sbase)
215
-
216
+ self.line.enable_auto_updates()
216
217
  else:
217
218
  wf = 2 * np.pi * self.frequency
218
219
  self.line.fill_design_properties(
@@ -25,7 +25,7 @@ This class is the handler of the main gui of GridCal.
25
25
  # Main Window
26
26
  ########################################################################################################################
27
27
 
28
- class MainGUI(ScriptingMain):
28
+ class GridCalMainGUI(ScriptingMain):
29
29
  """
30
30
  MainGUI
31
31
  """
@@ -136,7 +136,7 @@ def runGridCal() -> None:
136
136
  app = QApplication(sys.argv)
137
137
  # app.setStyle('Fusion') # ['Breeze', 'Oxygen', 'QtCurve', 'Windows', 'Fusion']
138
138
 
139
- window_ = MainGUI()
139
+ window_ = GridCalMainGUI()
140
140
 
141
141
  # process the argument if provided
142
142
  if len(sys.argv) > 1:
@@ -701,7 +701,7 @@ class Ui_mainWindow(object):
701
701
  self.tab_3.setObjectName(u"tab_3")
702
702
  self.verticalLayout_37 = QVBoxLayout(self.tab_3)
703
703
  self.verticalLayout_37.setObjectName(u"verticalLayout_37")
704
- self.verticalLayout_37.setContentsMargins(0, 0, 0, 5)
704
+ self.verticalLayout_37.setContentsMargins(0, 0, 0, 1)
705
705
  self.diagramsListView = QListView(self.tab_3)
706
706
  self.diagramsListView.setObjectName(u"diagramsListView")
707
707
  self.diagramsListView.setFont(font1)
@@ -709,49 +709,21 @@ class Ui_mainWindow(object):
709
709
 
710
710
  self.verticalLayout_37.addWidget(self.diagramsListView)
711
711
 
712
- self.grid_colouring_frame = QFrame(self.tab_3)
713
- self.grid_colouring_frame.setObjectName(u"grid_colouring_frame")
714
- self.grid_colouring_frame.setMaximumSize(QSize(16777215, 50))
715
- self.grid_colouring_frame.setFrameShape(QFrame.NoFrame)
716
- self.grid_colouring_frame.setFrameShadow(QFrame.Raised)
717
- self.horizontalLayout_30 = QHBoxLayout(self.grid_colouring_frame)
718
- self.horizontalLayout_30.setObjectName(u"horizontalLayout_30")
719
- self.horizontalLayout_30.setContentsMargins(1, 1, 1, 0)
720
- self.available_results_to_color_comboBox = QComboBox(self.grid_colouring_frame)
721
- self.available_results_to_color_comboBox.setObjectName(u"available_results_to_color_comboBox")
722
- self.available_results_to_color_comboBox.setMinimumSize(QSize(164, 0))
723
- self.available_results_to_color_comboBox.setFont(font1)
724
-
725
- self.horizontalLayout_30.addWidget(self.available_results_to_color_comboBox)
726
-
727
- self.colour_results_pushButton = QPushButton(self.grid_colouring_frame)
728
- self.colour_results_pushButton.setObjectName(u"colour_results_pushButton")
729
- self.colour_results_pushButton.setMaximumSize(QSize(32, 16777215))
730
712
  icon78 = QIcon()
731
- icon78.addFile(u":/Icons/icons/color_grid.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
732
- self.colour_results_pushButton.setIcon(icon78)
733
-
734
- self.horizontalLayout_30.addWidget(self.colour_results_pushButton)
735
-
736
-
737
- self.verticalLayout_37.addWidget(self.grid_colouring_frame)
738
-
739
- self.schematic_step_label = QLabel(self.tab_3)
740
- self.schematic_step_label.setObjectName(u"schematic_step_label")
741
- self.schematic_step_label.setFont(font1)
742
- self.schematic_step_label.setAlignment(Qt.AlignCenter)
743
-
744
- self.verticalLayout_37.addWidget(self.schematic_step_label)
745
-
746
- self.diagram_step_slider = QSlider(self.tab_3)
747
- self.diagram_step_slider.setObjectName(u"diagram_step_slider")
748
- self.diagram_step_slider.setOrientation(Qt.Horizontal)
749
-
750
- self.verticalLayout_37.addWidget(self.diagram_step_slider)
751
-
752
- icon79 = QIcon()
753
- icon79.addFile(u":/Icons/icons/show_color_controls.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
754
- self.tabWidget_6.addTab(self.tab_3, icon79, "")
713
+ icon78.addFile(u":/Icons/icons/show_color_controls.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
714
+ self.tabWidget_6.addTab(self.tab_3, icon78, "")
715
+ self.tab = QWidget()
716
+ self.tab.setObjectName(u"tab")
717
+ self.verticalLayout = QVBoxLayout(self.tab)
718
+ self.verticalLayout.setObjectName(u"verticalLayout")
719
+ self.verticalLayout.setContentsMargins(0, 0, 0, 1)
720
+ self.combinationsTreeView = QTreeView(self.tab)
721
+ self.combinationsTreeView.setObjectName(u"combinationsTreeView")
722
+ self.combinationsTreeView.setFrameShape(QFrame.NoFrame)
723
+
724
+ self.verticalLayout.addWidget(self.combinationsTreeView)
725
+
726
+ self.tabWidget_6.addTab(self.tab, icon50, "")
755
727
  self.tab_4 = QWidget()
756
728
  self.tab_4.setObjectName(u"tab_4")
757
729
  self.verticalLayout_38 = QVBoxLayout(self.tab_4)
@@ -763,7 +735,7 @@ class Ui_mainWindow(object):
763
735
  self.frame_58.setFrameShadow(QFrame.Raised)
764
736
  self.gridLayout = QGridLayout(self.frame_58)
765
737
  self.gridLayout.setObjectName(u"gridLayout")
766
- self.gridLayout.setContentsMargins(6, 0, 6, 0)
738
+ self.gridLayout.setContentsMargins(6, 0, 6, 4)
767
739
  self.label_118 = QLabel(self.frame_58)
768
740
  self.label_118.setObjectName(u"label_118")
769
741
  font2 = QFont()
@@ -1100,12 +1072,51 @@ class Ui_mainWindow(object):
1100
1072
 
1101
1073
  self.verticalLayout_38.addWidget(self.frame_58)
1102
1074
 
1103
- icon80 = QIcon()
1104
- icon80.addFile(u":/Icons/icons/gear.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
1105
- self.tabWidget_6.addTab(self.tab_4, icon80, "")
1075
+ icon79 = QIcon()
1076
+ icon79.addFile(u":/Icons/icons/gear.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
1077
+ self.tabWidget_6.addTab(self.tab_4, icon79, "")
1106
1078
 
1107
1079
  self.verticalLayout_2.addWidget(self.tabWidget_6)
1108
1080
 
1081
+ self.grid_colouring_frame = QFrame(self.diagram_selection_frame)
1082
+ self.grid_colouring_frame.setObjectName(u"grid_colouring_frame")
1083
+ self.grid_colouring_frame.setFrameShape(QFrame.NoFrame)
1084
+ self.grid_colouring_frame.setFrameShadow(QFrame.Raised)
1085
+ self.gridLayout_31 = QGridLayout(self.grid_colouring_frame)
1086
+ self.gridLayout_31.setObjectName(u"gridLayout_31")
1087
+ self.gridLayout_31.setContentsMargins(0, 0, 4, 0)
1088
+ self.schematic_step_label = QLabel(self.grid_colouring_frame)
1089
+ self.schematic_step_label.setObjectName(u"schematic_step_label")
1090
+ self.schematic_step_label.setFont(font1)
1091
+ self.schematic_step_label.setAlignment(Qt.AlignCenter)
1092
+
1093
+ self.gridLayout_31.addWidget(self.schematic_step_label, 2, 0, 1, 3)
1094
+
1095
+ self.available_results_to_color_comboBox = QComboBox(self.grid_colouring_frame)
1096
+ self.available_results_to_color_comboBox.setObjectName(u"available_results_to_color_comboBox")
1097
+ self.available_results_to_color_comboBox.setMinimumSize(QSize(164, 0))
1098
+ self.available_results_to_color_comboBox.setFont(font1)
1099
+
1100
+ self.gridLayout_31.addWidget(self.available_results_to_color_comboBox, 0, 0, 2, 2)
1101
+
1102
+ self.colour_results_pushButton = QPushButton(self.grid_colouring_frame)
1103
+ self.colour_results_pushButton.setObjectName(u"colour_results_pushButton")
1104
+ self.colour_results_pushButton.setMaximumSize(QSize(32, 16777215))
1105
+ icon80 = QIcon()
1106
+ icon80.addFile(u":/Icons/icons/color_grid.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
1107
+ self.colour_results_pushButton.setIcon(icon80)
1108
+
1109
+ self.gridLayout_31.addWidget(self.colour_results_pushButton, 0, 2, 2, 1)
1110
+
1111
+ self.diagram_step_slider = QSlider(self.grid_colouring_frame)
1112
+ self.diagram_step_slider.setObjectName(u"diagram_step_slider")
1113
+ self.diagram_step_slider.setOrientation(Qt.Horizontal)
1114
+
1115
+ self.gridLayout_31.addWidget(self.diagram_step_slider, 3, 0, 1, 3)
1116
+
1117
+
1118
+ self.verticalLayout_2.addWidget(self.grid_colouring_frame)
1119
+
1109
1120
  self.diagram_selection_splitter.addWidget(self.diagram_selection_frame)
1110
1121
 
1111
1122
  self.verticalLayout_5.addWidget(self.diagram_selection_splitter)
@@ -2761,14 +2772,24 @@ class Ui_mainWindow(object):
2761
2772
  self.groupBox_3.setFont(font6)
2762
2773
  self.gridLayout_27 = QGridLayout(self.groupBox_3)
2763
2774
  self.gridLayout_27.setObjectName(u"gridLayout_27")
2764
- self.label_127 = QLabel(self.groupBox_3)
2765
- self.label_127.setObjectName(u"label_127")
2775
+ self.verticalSpacer_21 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
2776
+
2777
+ self.gridLayout_27.addItem(self.verticalSpacer_21, 8, 0, 1, 1)
2778
+
2779
+ self.label_129 = QLabel(self.groupBox_3)
2780
+ self.label_129.setObjectName(u"label_129")
2766
2781
  font7 = QFont()
2767
2782
  font7.setPointSize(9)
2768
2783
  font7.setBold(False)
2769
- self.label_127.setFont(font7)
2784
+ self.label_129.setFont(font7)
2770
2785
 
2771
- self.gridLayout_27.addWidget(self.label_127, 3, 0, 1, 1)
2786
+ self.gridLayout_27.addWidget(self.label_129, 2, 0, 1, 1)
2787
+
2788
+ self.ips_initialize_with_pf_checkBox = QCheckBox(self.groupBox_3)
2789
+ self.ips_initialize_with_pf_checkBox.setObjectName(u"ips_initialize_with_pf_checkBox")
2790
+ self.ips_initialize_with_pf_checkBox.setFont(font7)
2791
+
2792
+ self.gridLayout_27.addWidget(self.ips_initialize_with_pf_checkBox, 6, 0, 1, 2)
2772
2793
 
2773
2794
  self.ips_method_comboBox = QComboBox(self.groupBox_3)
2774
2795
  self.ips_method_comboBox.setObjectName(u"ips_method_comboBox")
@@ -2776,15 +2797,19 @@ class Ui_mainWindow(object):
2776
2797
 
2777
2798
  self.gridLayout_27.addWidget(self.ips_method_comboBox, 0, 1, 1, 1)
2778
2799
 
2779
- self.label_125 = QLabel(self.groupBox_3)
2780
- self.label_125.setObjectName(u"label_125")
2781
- self.label_125.setFont(font7)
2800
+ self.ips_iterations_spinBox = QSpinBox(self.groupBox_3)
2801
+ self.ips_iterations_spinBox.setObjectName(u"ips_iterations_spinBox")
2802
+ self.ips_iterations_spinBox.setFont(font7)
2803
+ self.ips_iterations_spinBox.setMinimum(1)
2804
+ self.ips_iterations_spinBox.setMaximum(9999999)
2805
+ self.ips_iterations_spinBox.setValue(100)
2782
2806
 
2783
- self.gridLayout_27.addWidget(self.label_125, 0, 0, 1, 1)
2807
+ self.gridLayout_27.addWidget(self.ips_iterations_spinBox, 2, 1, 1, 1)
2784
2808
 
2785
- self.verticalSpacer_21 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
2809
+ self.label_130 = QLabel(self.groupBox_3)
2810
+ self.label_130.setObjectName(u"label_130")
2786
2811
 
2787
- self.gridLayout_27.addItem(self.verticalSpacer_21, 7, 0, 1, 1)
2812
+ self.gridLayout_27.addWidget(self.label_130, 5, 0, 1, 1)
2788
2813
 
2789
2814
  self.label_126 = QLabel(self.groupBox_3)
2790
2815
  self.label_126.setObjectName(u"label_126")
@@ -2801,11 +2826,11 @@ class Ui_mainWindow(object):
2801
2826
 
2802
2827
  self.gridLayout_27.addWidget(self.ips_tolerance_spinBox, 1, 1, 1, 1)
2803
2828
 
2804
- self.ips_initialize_with_pf_checkBox = QCheckBox(self.groupBox_3)
2805
- self.ips_initialize_with_pf_checkBox.setObjectName(u"ips_initialize_with_pf_checkBox")
2806
- self.ips_initialize_with_pf_checkBox.setFont(font7)
2829
+ self.label_125 = QLabel(self.groupBox_3)
2830
+ self.label_125.setObjectName(u"label_125")
2831
+ self.label_125.setFont(font7)
2807
2832
 
2808
- self.gridLayout_27.addWidget(self.ips_initialize_with_pf_checkBox, 6, 0, 1, 2)
2833
+ self.gridLayout_27.addWidget(self.label_125, 0, 0, 1, 1)
2809
2834
 
2810
2835
  self.ips_trust_radius_doubleSpinBox = QDoubleSpinBox(self.groupBox_3)
2811
2836
  self.ips_trust_radius_doubleSpinBox.setObjectName(u"ips_trust_radius_doubleSpinBox")
@@ -2816,25 +2841,17 @@ class Ui_mainWindow(object):
2816
2841
 
2817
2842
  self.gridLayout_27.addWidget(self.ips_trust_radius_doubleSpinBox, 3, 1, 1, 1)
2818
2843
 
2819
- self.ips_iterations_spinBox = QSpinBox(self.groupBox_3)
2820
- self.ips_iterations_spinBox.setObjectName(u"ips_iterations_spinBox")
2821
- self.ips_iterations_spinBox.setFont(font7)
2822
- self.ips_iterations_spinBox.setMinimum(1)
2823
- self.ips_iterations_spinBox.setMaximum(9999999)
2824
- self.ips_iterations_spinBox.setValue(100)
2825
-
2826
- self.gridLayout_27.addWidget(self.ips_iterations_spinBox, 2, 1, 1, 1)
2827
-
2828
- self.label_129 = QLabel(self.groupBox_3)
2829
- self.label_129.setObjectName(u"label_129")
2830
- self.label_129.setFont(font7)
2844
+ self.label_127 = QLabel(self.groupBox_3)
2845
+ self.label_127.setObjectName(u"label_127")
2846
+ self.label_127.setFont(font7)
2831
2847
 
2832
- self.gridLayout_27.addWidget(self.label_129, 2, 0, 1, 1)
2848
+ self.gridLayout_27.addWidget(self.label_127, 3, 0, 1, 1)
2833
2849
 
2834
- self.label_130 = QLabel(self.groupBox_3)
2835
- self.label_130.setObjectName(u"label_130")
2850
+ self.ips_control_Qlimits_checkBox = QCheckBox(self.groupBox_3)
2851
+ self.ips_control_Qlimits_checkBox.setObjectName(u"ips_control_Qlimits_checkBox")
2852
+ self.ips_control_Qlimits_checkBox.setFont(font7)
2836
2853
 
2837
- self.gridLayout_27.addWidget(self.label_130, 5, 0, 1, 1)
2854
+ self.gridLayout_27.addWidget(self.ips_control_Qlimits_checkBox, 7, 0, 1, 2)
2838
2855
 
2839
2856
 
2840
2857
  self.gridLayout_10.addWidget(self.groupBox_3, 3, 4, 1, 1)
@@ -4553,7 +4570,7 @@ class Ui_mainWindow(object):
4553
4570
 
4554
4571
  self.gridLayout_8.addWidget(self.settings_tabWidget, 0, 2, 1, 1)
4555
4572
 
4556
- self.tabWidget.addTab(self.SettingsTab, icon80, "")
4573
+ self.tabWidget.addTab(self.SettingsTab, icon79, "")
4557
4574
 
4558
4575
  self.gridLayout_3.addWidget(self.tabWidget, 0, 0, 1, 1)
4559
4576
 
@@ -5092,19 +5109,9 @@ class Ui_mainWindow(object):
5092
5109
  self.cancelButton.setText("")
5093
5110
  #if QT_CONFIG(tooltip)
5094
5111
  self.diagramsListView.setToolTip(QCoreApplication.translate("mainWindow", u"List of available diagrams", None))
5095
- #endif // QT_CONFIG(tooltip)
5096
- #if QT_CONFIG(tooltip)
5097
- self.available_results_to_color_comboBox.setToolTip(QCoreApplication.translate("mainWindow", u"Available results", None))
5098
- #endif // QT_CONFIG(tooltip)
5099
- #if QT_CONFIG(tooltip)
5100
- self.colour_results_pushButton.setToolTip(QCoreApplication.translate("mainWindow", u"Color the grid with the selected study", None))
5101
- #endif // QT_CONFIG(tooltip)
5102
- self.colour_results_pushButton.setText("")
5103
- self.schematic_step_label.setText(QCoreApplication.translate("mainWindow", u"Snapshot", None))
5104
- #if QT_CONFIG(tooltip)
5105
- self.diagram_step_slider.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Time slider</span></p><p>Move this time slider to select the appropriate time slot to view.</p><p>The first position sets the snapshot values, the rest attend to the time series values.</p></body></html>", None))
5106
5112
  #endif // QT_CONFIG(tooltip)
5107
5113
  self.tabWidget_6.setTabText(self.tabWidget_6.indexOf(self.tab_3), QCoreApplication.translate("mainWindow", u"Diagrams", None))
5114
+ self.tabWidget_6.setTabText(self.tabWidget_6.indexOf(self.tab), QCoreApplication.translate("mainWindow", u"Combinations", None))
5108
5115
  self.label_118.setText(QCoreApplication.translate("mainWindow", u"Map tile provider", None))
5109
5116
  #if QT_CONFIG(tooltip)
5110
5117
  self.defaultBusVoltageSpinBox.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Bus default voltage</span></p><p>This is the voltage that drag&amp;drop buses have when they are created from the schematic.</p></body></html>", None))
@@ -5152,6 +5159,17 @@ class Ui_mainWindow(object):
5152
5159
  self.redraw_pushButton.setText(QCoreApplication.translate("mainWindow", u"redraw", None))
5153
5160
  self.branch_width_based_on_flow_checkBox.setText(QCoreApplication.translate("mainWindow", u"Width based on flow", None))
5154
5161
  self.tabWidget_6.setTabText(self.tabWidget_6.indexOf(self.tab_4), QCoreApplication.translate("mainWindow", u"Settings", None))
5162
+ self.schematic_step_label.setText(QCoreApplication.translate("mainWindow", u"Snapshot", None))
5163
+ #if QT_CONFIG(tooltip)
5164
+ self.available_results_to_color_comboBox.setToolTip(QCoreApplication.translate("mainWindow", u"Available results", None))
5165
+ #endif // QT_CONFIG(tooltip)
5166
+ #if QT_CONFIG(tooltip)
5167
+ self.colour_results_pushButton.setToolTip(QCoreApplication.translate("mainWindow", u"Color the grid with the selected study", None))
5168
+ #endif // QT_CONFIG(tooltip)
5169
+ self.colour_results_pushButton.setText("")
5170
+ #if QT_CONFIG(tooltip)
5171
+ self.diagram_step_slider.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Time slider</span></p><p>Move this time slider to select the appropriate time slot to view.</p><p>The first position sets the snapshot values, the rest attend to the time series values.</p></body></html>", None))
5172
+ #endif // QT_CONFIG(tooltip)
5155
5173
  self.tabWidget_3.setTabText(self.tabWidget_3.indexOf(self.GridSectionTab), QCoreApplication.translate("mainWindow", u"Diagrams", None))
5156
5174
  #if QT_CONFIG(tooltip)
5157
5175
  self.smart_search_lineEdit.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Subjects:</span></p><p>col, idx, val, colobj, idxobj</p><p>colobj and idxobj allow accessing the objects that may be represented at the index or the columns. With these you can access their internal properties for filtering.</p><p><span style=\" font-weight:700;\">Operators:</span></p><p>&gt;, &lt;, &gt;=, &lt;=, !=, =, like, notlike, starts, ends</p><p><span style=\" font-weight:700;\">Examples:</span></p><p>Filter all object names that are similar to 'alba' and their Vnom property &gt; 200</p><p>-&gt; idx<span style=\" font-style:italic;\">obj.name like alba and idxobj.Vnom &gt; 200</span></p></body></html>", None))
@@ -5453,7 +5471,7 @@ class Ui_mainWindow(object):
5453
5471
  #if QT_CONFIG(tooltip)
5454
5472
  self.control_q_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"General switch for reactive power limits control", None))
5455
5473
  #endif // QT_CONFIG(tooltip)
5456
- self.control_q_checkBox.setText(QCoreApplication.translate("mainWindow", u"Control generators Q", None))
5474
+ self.control_q_checkBox.setText(QCoreApplication.translate("mainWindow", u"Control Q limits", None))
5457
5475
  #if QT_CONFIG(tooltip)
5458
5476
  self.control_tap_modules_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"General switch for branches tap module control", None))
5459
5477
  #endif // QT_CONFIG(tooltip)
@@ -5512,13 +5530,17 @@ class Ui_mainWindow(object):
5512
5530
  #endif // QT_CONFIG(tooltip)
5513
5531
  self.groupBox_3.setTitle(QCoreApplication.translate("mainWindow", u"Nonlinear settings", None))
5514
5532
  #if QT_CONFIG(tooltip)
5515
- self.label_127.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point trust radius", None))
5533
+ self.label_129.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point solver maximum number of iterations", None))
5516
5534
  #endif // QT_CONFIG(tooltip)
5517
- self.label_127.setText(QCoreApplication.translate("mainWindow", u"Trust radius", None))
5535
+ self.label_129.setText(QCoreApplication.translate("mainWindow", u"Iterations", None))
5518
5536
  #if QT_CONFIG(tooltip)
5519
- self.label_125.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point solver method", None))
5537
+ self.ips_initialize_with_pf_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"Initialize the interior point OPF with the power flow solution", None))
5520
5538
  #endif // QT_CONFIG(tooltip)
5521
- self.label_125.setText(QCoreApplication.translate("mainWindow", u"IPS method", None))
5539
+ self.ips_initialize_with_pf_checkBox.setText(QCoreApplication.translate("mainWindow", u"Initialize with power flow", None))
5540
+ #if QT_CONFIG(tooltip)
5541
+ self.ips_iterations_spinBox.setToolTip(QCoreApplication.translate("mainWindow", u"Number of iterations of the method", None))
5542
+ #endif // QT_CONFIG(tooltip)
5543
+ self.label_130.setText("")
5522
5544
  #if QT_CONFIG(tooltip)
5523
5545
  self.label_126.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point solver tolerance", None))
5524
5546
  #endif // QT_CONFIG(tooltip)
@@ -5528,20 +5550,20 @@ class Ui_mainWindow(object):
5528
5550
  #endif // QT_CONFIG(tooltip)
5529
5551
  self.ips_tolerance_spinBox.setPrefix(QCoreApplication.translate("mainWindow", u"1e-", None))
5530
5552
  #if QT_CONFIG(tooltip)
5531
- self.ips_initialize_with_pf_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"Initialize the interior point OPF with the power flow solution", None))
5553
+ self.label_125.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point solver method", None))
5532
5554
  #endif // QT_CONFIG(tooltip)
5533
- self.ips_initialize_with_pf_checkBox.setText(QCoreApplication.translate("mainWindow", u"Initialize with power flow", None))
5555
+ self.label_125.setText(QCoreApplication.translate("mainWindow", u"IPS method", None))
5534
5556
  #if QT_CONFIG(tooltip)
5535
5557
  self.ips_trust_radius_doubleSpinBox.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p>Factor that multiplies each increment solution. </p><p>In practice this is used to slow down troublesome solutions.</p></body></html>", None))
5536
5558
  #endif // QT_CONFIG(tooltip)
5537
5559
  #if QT_CONFIG(tooltip)
5538
- self.ips_iterations_spinBox.setToolTip(QCoreApplication.translate("mainWindow", u"Number of iterations of the method", None))
5560
+ self.label_127.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point trust radius", None))
5539
5561
  #endif // QT_CONFIG(tooltip)
5562
+ self.label_127.setText(QCoreApplication.translate("mainWindow", u"Trust radius", None))
5540
5563
  #if QT_CONFIG(tooltip)
5541
- self.label_129.setToolTip(QCoreApplication.translate("mainWindow", u"Interior point solver maximum number of iterations", None))
5564
+ self.ips_control_Qlimits_checkBox.setToolTip(QCoreApplication.translate("mainWindow", u"General switch for reactive power limits control in the nonlinear optimal power flow", None))
5542
5565
  #endif // QT_CONFIG(tooltip)
5543
- self.label_129.setText(QCoreApplication.translate("mainWindow", u"Iterations", None))
5544
- self.label_130.setText("")
5566
+ self.ips_control_Qlimits_checkBox.setText(QCoreApplication.translate("mainWindow", u"Control Q limits", None))
5545
5567
  self.groupBox.setTitle(QCoreApplication.translate("mainWindow", u"Linear settings", None))
5546
5568
  self.label_103.setText(QCoreApplication.translate("mainWindow", u"Zone grouping", None))
5547
5569
  self.label_132.setText("")
@@ -233,6 +233,7 @@ class ConfigurationMain(ResultsMain):
233
233
  "ips_iterations": self.ui.ips_iterations_spinBox,
234
234
  "ips_trust_radius": self.ui.ips_trust_radius_doubleSpinBox,
235
235
  "ips_init_with_pf": self.ui.ips_initialize_with_pf_checkBox,
236
+ "ips_control_Qlimits": self.ui.ips_control_Qlimits_checkBox,
236
237
  },
237
238
  "continuation_power_flow": {
238
239
  "max_iterations": self.ui.vs_max_iterations_spinBox,
@@ -346,7 +346,7 @@ class IoMain(ConfigurationMain):
346
346
  self.set_diagram_widget(diagram)
347
347
 
348
348
  else:
349
- if self.circuit.get_bus_number() > 1500:
349
+ if self.circuit.get_bus_number() > 300:
350
350
  quit_msg = ("The grid is quite large, hence the schematic might be slow.\n"
351
351
  "Do you want to enable the schematic?\n"
352
352
  "(you can always enable the drawing later)")
@@ -1065,3 +1065,26 @@ class IoMain(ConfigurationMain):
1065
1065
 
1066
1066
  if filename != "":
1067
1067
  save_catalogue(fname=filename, grid=self.circuit)
1068
+
1069
+ def set_circuit(self, grid: MultiCircuit, create_diagram: bool = True):
1070
+ """
1071
+
1072
+ :param grid:
1073
+ :param create_diagram:
1074
+ :return:
1075
+ """
1076
+ self.remove_all_diagrams()
1077
+
1078
+ self.circuit = grid
1079
+
1080
+ if create_diagram:
1081
+ self.add_complete_bus_branch_diagram()
1082
+
1083
+ self.update_date_dependent_combos()
1084
+ self.update_from_to_list_views()
1085
+ self.clear_results()
1086
+ self.collect_memory()
1087
+ self.setup_time_sliders()
1088
+ self.get_circuit_snapshot_datetime()
1089
+ self.change_theme_mode()
1090
+
@@ -517,6 +517,56 @@ class SimulationsMain(TimeEventsMain):
517
517
 
518
518
  self.ui.units_label.setText("")
519
519
 
520
+ @staticmethod
521
+ def get_investments_combination_tree_model(drv: sim.InvestmentsEvaluationDriver) -> QtGui.QStandardItemModel:
522
+ """
523
+ Get the investments combination tree model
524
+ :param drv:
525
+ :return:
526
+ """
527
+ model = QtGui.QStandardItemModel()
528
+ model.setHorizontalHeaderLabels([
529
+ "Combination", "capex", "opex", "losses", "overload_score", "voltage_score"
530
+ ])
531
+
532
+ results = drv.results
533
+ for i in range(results.max_eval):
534
+ idx = np.where(results._combinations[i, :] != 0)[0]
535
+ if len(idx):
536
+ row_items = [
537
+ QtGui.QStandardItem(f"Combination {i}"),
538
+ QtGui.QStandardItem(f"{results._capex[i]:.2f}"),
539
+ QtGui.QStandardItem(f"{results._opex[i]:.2f}"),
540
+ QtGui.QStandardItem(f"{results._losses[i]:.2f}"),
541
+ QtGui.QStandardItem(f"{results._overload_score[i]:.2f}"),
542
+ QtGui.QStandardItem(f"{results._voltage_score[i]:.2f}"),
543
+ ]
544
+ model.appendRow(row_items)
545
+
546
+ # Add names as child nodes under this combination
547
+ names_parent_item = row_items[0] # Use the first column (Combination) as parent
548
+ for k in idx:
549
+ name_item = QtGui.QStandardItem(results.investment_groups_names[k])
550
+ names_parent_item.appendRow([name_item] + [QtGui.QStandardItem("") for _ in range(5)])
551
+
552
+ return model
553
+
554
+ def fill_combinations_tree(self, drv: DRIVER_OBJECTS | None):
555
+ """
556
+ Fill the tree driver
557
+ :param drv: Any Driver object
558
+ """
559
+ if drv is None:
560
+ self.ui.combinationsTreeView.setModel(None)
561
+ else:
562
+ if drv.tpe == SimulationTypes.InvestmentsEvaluation_run:
563
+ model = self.get_investments_combination_tree_model(drv=drv)
564
+ self.ui.combinationsTreeView.setModel(model)
565
+ # self.ui.combinationsTreeView.expandAll()
566
+
567
+ else:
568
+ self.ui.combinationsTreeView.setModel(None)
569
+
520
570
  def changed_study(self):
521
571
  """
522
572
 
@@ -539,6 +589,8 @@ class SimulationsMain(TimeEventsMain):
539
589
  else:
540
590
  self.setup_time_sliders()
541
591
 
592
+ self.fill_combinations_tree(drv=drv)
593
+
542
594
  def update_available_results(self) -> None:
543
595
  """
544
596
  Update the results that are displayed in the results tab
@@ -1888,7 +1940,10 @@ class SimulationsMain(TimeEventsMain):
1888
1940
  ips_iterations = self.ui.ips_iterations_spinBox.value()
1889
1941
  ips_trust_radius = self.ui.ips_trust_radius_doubleSpinBox.value()
1890
1942
  ips_init_with_pf = self.ui.ips_initialize_with_pf_checkBox.isChecked()
1943
+ ips_control_q_limits = self.ui.ips_control_Qlimits_checkBox.isChecked()
1944
+
1891
1945
  verbose = self.ui.ips_verbose_spinBox.value()
1946
+
1892
1947
  options = sim.OptimalPowerFlowOptions(solver=solver,
1893
1948
  time_grouping=time_grouping,
1894
1949
  zonal_grouping=zonal_grouping,
@@ -1908,6 +1963,7 @@ class SimulationsMain(TimeEventsMain):
1908
1963
  ips_iterations=ips_iterations,
1909
1964
  ips_trust_radius=ips_trust_radius,
1910
1965
  ips_init_with_pf=ips_init_with_pf,
1966
+ ips_control_q_limits=ips_control_q_limits,
1911
1967
  robust=robust,
1912
1968
  verbose=verbose)
1913
1969
 
@@ -2454,7 +2510,8 @@ class SimulationsMain(TimeEventsMain):
2454
2510
  options = sim.InvestmentsEvaluationOptions(solver=method,
2455
2511
  max_eval=max_eval,
2456
2512
  pf_options=self.get_selected_power_flow_options(),
2457
- objf_tpe=obj_fn_tpe,
2513
+ opf_options=self.get_opf_options(),
2514
+ obj_tpe=obj_fn_tpe,
2458
2515
  plugin_fcn_ptr=fn_ptr
2459
2516
  )
2460
2517