GridCal 5.1.28__tar.gz → 5.1.30__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 (282) hide show
  1. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/MainWindow.py +26 -16
  2. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Model/objects.py +10 -10
  3. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Model/time_events.py +1 -1
  4. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/base_gui.py +32 -32
  5. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/io.py +2 -2
  6. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/simulations.py +57 -81
  7. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/__version__.py +1 -1
  8. {GridCal-5.1.28 → GridCal-5.1.30}/PKG-INFO +1 -1
  9. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ExecuteGridCal.py +0 -0
  10. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  11. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  12. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  13. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  14. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  15. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  16. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/__init__.py +0 -0
  17. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/gui.py +0 -0
  18. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  19. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  20. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  21. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  22. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  23. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  24. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  25. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ConsoleWidget.py +0 -0
  26. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  27. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  28. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  29. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  30. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  31. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  32. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  33. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  34. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  35. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  36. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  37. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  38. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  39. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  40. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  41. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  42. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  43. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  44. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  45. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  46. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  47. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  48. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  49. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
  50. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
  51. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  52. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  53. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  54. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
  55. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  56. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  57. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  58. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  59. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  60. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  61. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  62. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  63. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  64. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  65. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  66. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
  67. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  68. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  69. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +0 -0
  70. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  71. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  72. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  73. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  74. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  75. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  76. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  77. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  78. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  79. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  80. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  81. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  82. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  83. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  84. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  85. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  86. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  87. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  88. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  89. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  90. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  91. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  92. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  93. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  94. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  95. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  96. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  97. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  98. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  99. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  100. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  101. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  102. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  103. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  104. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  105. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  106. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  107. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  108. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  109. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  110. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  111. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  112. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/__init__.py +0 -0
  113. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  114. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  115. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  116. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  117. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GeneralDialogues.py +0 -0
  118. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  119. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  120. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GridGenerator/gui.py +0 -0
  121. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  122. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  123. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/GuiFunctions.py +0 -0
  124. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  125. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  126. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  127. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  128. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  129. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  130. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  131. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  132. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  133. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  134. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  135. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  136. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/GridCalMain.py +0 -0
  137. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  138. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  139. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  140. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  141. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  142. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  143. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  144. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  145. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  146. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  147. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  148. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  149. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  150. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  151. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/__init__.py +0 -0
  152. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/icons_rc.py +0 -0
  153. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/object_select_window.py +0 -0
  154. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Main/update_gui_file.py +0 -0
  155. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  156. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  157. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  158. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  159. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  160. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  161. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  162. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  163. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  164. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  165. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  166. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  167. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  168. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  169. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  170. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  171. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  172. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  173. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  174. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  175. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  176. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  177. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  178. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  179. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  180. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  181. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  182. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  183. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  184. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  185. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  186. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  187. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  188. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  189. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  190. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  191. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  192. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  193. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  194. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  195. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  196. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  197. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  198. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  199. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  200. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  201. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  202. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  203. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  204. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Visualization/__init__.py +0 -0
  205. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Visualization/visualization.py +0 -0
  206. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Widgets/__init__.py +0 -0
  207. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  208. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  209. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  210. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  211. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  212. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  213. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  214. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/__init__.py +0 -0
  215. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/associations_model.py +0 -0
  216. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/messages.py +0 -0
  217. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/object_model.py +0 -0
  218. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/pandas_model.py +0 -0
  219. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/plot_config.py +0 -0
  220. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/plugins.py +0 -0
  221. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/profiles_model.py +0 -0
  222. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/table_view_header_wrap.py +0 -0
  223. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/themes.py +0 -0
  224. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/update_gui_all.py +0 -0
  225. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Gui/update_gui_common.py +0 -0
  226. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/LICENSE.txt +0 -0
  227. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/__init__.py +0 -0
  228. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/export_results_driver.py +0 -0
  229. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/file_handler.py +0 -0
  230. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/results_model.py +0 -0
  231. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/server_driver.py +0 -0
  232. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/session.py +0 -0
  233. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/Session/synchronization_driver.py +0 -0
  234. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/__init__.py +0 -0
  235. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  236. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  237. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  238. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  239. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  240. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  241. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  242. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  243. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  244. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  245. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  246. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  247. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  248. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  249. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  250. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  251. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  252. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  253. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  254. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  255. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  256. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  257. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  258. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  259. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  260. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  261. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  262. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  263. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  264. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  265. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  266. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  267. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  268. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  269. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  270. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  271. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  272. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  273. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/__init__.py +0 -0
  274. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/data/__init__.py +0 -0
  275. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/data/cables.csv +0 -0
  276. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/data/sequence_lines.csv +0 -0
  277. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/data/transformers.csv +0 -0
  278. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/data/wires.csv +0 -0
  279. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/templates.py +0 -0
  280. {GridCal-5.1.28 → GridCal-5.1.30}/GridCal/update.py +0 -0
  281. {GridCal-5.1.28 → GridCal-5.1.30}/setup.cfg +0 -0
  282. {GridCal-5.1.28 → GridCal-5.1.30}/setup.py +0 -0
@@ -31,7 +31,7 @@ class Ui_mainWindow(object):
31
31
  def setupUi(self, mainWindow):
32
32
  if not mainWindow.objectName():
33
33
  mainWindow.setObjectName(u"mainWindow")
34
- mainWindow.resize(1346, 820)
34
+ mainWindow.resize(1249, 820)
35
35
  mainWindow.setBaseSize(QSize(0, 0))
36
36
  font = QFont()
37
37
  font.setPointSize(10)
@@ -3326,38 +3326,48 @@ class Ui_mainWindow(object):
3326
3326
  self.frame_34.setObjectName(u"frame_34")
3327
3327
  self.frame_34.setFrameShape(QFrame.NoFrame)
3328
3328
  self.frame_34.setFrameShadow(QFrame.Raised)
3329
- self.verticalLayout_29 = QVBoxLayout(self.frame_34)
3330
- self.verticalLayout_29.setObjectName(u"verticalLayout_29")
3329
+ self.gridLayout_9 = QGridLayout(self.frame_34)
3330
+ self.gridLayout_9.setObjectName(u"gridLayout_9")
3331
3331
  self.label_41 = QLabel(self.frame_34)
3332
3332
  self.label_41.setObjectName(u"label_41")
3333
3333
  self.label_41.setFont(font1)
3334
3334
 
3335
- self.verticalLayout_29.addWidget(self.label_41)
3335
+ self.gridLayout_9.addWidget(self.label_41, 0, 0, 1, 1)
3336
3336
 
3337
- self.areaFromListView = QListView(self.frame_34)
3338
- self.areaFromListView.setObjectName(u"areaFromListView")
3339
- self.areaFromListView.setFont(font1)
3337
+ self.fromComboBox = QComboBox(self.frame_34)
3338
+ self.fromComboBox.setObjectName(u"fromComboBox")
3340
3339
 
3341
- self.verticalLayout_29.addWidget(self.areaFromListView)
3340
+ self.gridLayout_9.addWidget(self.fromComboBox, 0, 1, 1, 1)
3341
+
3342
+ self.fromListView = QListView(self.frame_34)
3343
+ self.fromListView.setObjectName(u"fromListView")
3344
+ self.fromListView.setFont(font1)
3345
+
3346
+ self.gridLayout_9.addWidget(self.fromListView, 1, 0, 1, 2)
3342
3347
 
3343
3348
  self.splitter_2.addWidget(self.frame_34)
3344
3349
  self.frame_35 = QFrame(self.splitter_2)
3345
3350
  self.frame_35.setObjectName(u"frame_35")
3346
3351
  self.frame_35.setFrameShape(QFrame.NoFrame)
3347
3352
  self.frame_35.setFrameShadow(QFrame.Raised)
3348
- self.verticalLayout_19 = QVBoxLayout(self.frame_35)
3349
- self.verticalLayout_19.setObjectName(u"verticalLayout_19")
3353
+ self.gridLayout_30 = QGridLayout(self.frame_35)
3354
+ self.gridLayout_30.setObjectName(u"gridLayout_30")
3350
3355
  self.label_21 = QLabel(self.frame_35)
3351
3356
  self.label_21.setObjectName(u"label_21")
3352
3357
  self.label_21.setFont(font1)
3353
3358
 
3354
- self.verticalLayout_19.addWidget(self.label_21)
3359
+ self.gridLayout_30.addWidget(self.label_21, 0, 0, 1, 1)
3360
+
3361
+ self.toComboBox = QComboBox(self.frame_35)
3362
+ self.toComboBox.setObjectName(u"toComboBox")
3363
+
3364
+ self.gridLayout_30.addWidget(self.toComboBox, 0, 1, 1, 1)
3355
3365
 
3356
- self.areaToListView = QListView(self.frame_35)
3357
- self.areaToListView.setObjectName(u"areaToListView")
3358
- self.areaToListView.setFont(font1)
3366
+ self.toListView = QListView(self.frame_35)
3367
+ self.toListView.setObjectName(u"toListView")
3368
+ self.toListView.setFont(font1)
3359
3369
 
3360
- self.verticalLayout_19.addWidget(self.areaToListView)
3370
+ self.gridLayout_30.addWidget(self.toListView, 1, 0, 1, 2)
3361
3371
 
3362
3372
  self.splitter_2.addWidget(self.frame_35)
3363
3373
 
@@ -4427,7 +4437,7 @@ class Ui_mainWindow(object):
4427
4437
  mainWindow.setCentralWidget(self.centralwidget)
4428
4438
  self.menuBar = QMenuBar(mainWindow)
4429
4439
  self.menuBar.setObjectName(u"menuBar")
4430
- self.menuBar.setGeometry(QRect(0, 0, 1346, 21))
4440
+ self.menuBar.setGeometry(QRect(0, 0, 1249, 21))
4431
4441
  self.menuBar.setFont(font)
4432
4442
  self.menuProject = QMenu(self.menuBar)
4433
4443
  self.menuProject.setObjectName(u"menuProject")
@@ -527,7 +527,7 @@ class ObjectsTableMain(DiagramsMain):
527
527
 
528
528
  # update the view
529
529
  self.view_objects_data()
530
- self.update_area_combos()
530
+ self.update_from_to_list_views()
531
531
  self.update_date_dependent_combos()
532
532
 
533
533
  def add_objects_to_current_diagram(self):
@@ -573,45 +573,45 @@ class ObjectsTableMain(DiagramsMain):
573
573
 
574
574
  if elm_type == DeviceType.SubstationDevice.value:
575
575
  self.circuit.add_substation(dev.Substation(name=f'SE {self.circuit.get_substation_number() + 1}'))
576
- self.update_area_combos()
576
+ self.update_from_to_list_views()
577
577
 
578
578
  elif elm_type == DeviceType.VoltageLevelDevice.value:
579
579
  self.circuit.add_voltage_level(dev.VoltageLevel(
580
580
  name=f'VL {self.circuit.get_voltage_levels_number() + 1}')
581
581
  )
582
- self.update_area_combos()
582
+ self.update_from_to_list_views()
583
583
 
584
584
  elif elm_type == DeviceType.BusBarDevice.value:
585
585
  self.circuit.add_bus_bar(dev.BusBar(name=f'BB {self.circuit.get_bus_bars_number() + 1}'))
586
- self.update_area_combos()
586
+ self.update_from_to_list_views()
587
587
 
588
588
  elif elm_type == DeviceType.ZoneDevice.value:
589
589
  self.circuit.add_zone(dev.Zone(name=f'Zone {self.circuit.get_zone_number() + 1}'))
590
- self.update_area_combos()
590
+ self.update_from_to_list_views()
591
591
 
592
592
  elif elm_type == DeviceType.AreaDevice.value:
593
593
  self.circuit.add_area(dev.Area(name=f'Area {self.circuit.get_area_number() + 1}'))
594
- self.update_area_combos()
594
+ self.update_from_to_list_views()
595
595
 
596
596
  elif elm_type == DeviceType.CountryDevice.value:
597
597
  self.circuit.add_country(dev.Country(name=f'Country {self.circuit.get_country_number() + 1}'))
598
- self.update_area_combos()
598
+ self.update_from_to_list_views()
599
599
 
600
600
  elif elm_type == DeviceType.CommunityDevice.value:
601
601
  self.circuit.add_community(dev.Community(
602
602
  name=f'Community {self.circuit.get_communities_number() + 1}')
603
603
  )
604
- self.update_area_combos()
604
+ self.update_from_to_list_views()
605
605
 
606
606
  elif elm_type == DeviceType.RegionDevice.value:
607
607
  self.circuit.add_region(dev.Region(name=f'Region {self.circuit.get_regions_number() + 1}'))
608
- self.update_area_combos()
608
+ self.update_from_to_list_views()
609
609
 
610
610
  elif elm_type == DeviceType.MunicipalityDevice.value:
611
611
  self.circuit.add_municipality(dev.Municipality(
612
612
  name=f'Municipalities {self.circuit.get_municipalities_number() + 1}')
613
613
  )
614
- self.update_area_combos()
614
+ self.update_from_to_list_views()
615
615
 
616
616
  elif elm_type == DeviceType.BusDevice.value:
617
617
  self.circuit.add_bus(dev.Bus(name=f'Bus {self.circuit.get_bus_number() + 1}'))
@@ -115,7 +115,7 @@ class TimeEventsMain(ObjectsTableMain):
115
115
  self.circuit.delete_profiles()
116
116
  self.ui.profiles_tableView.setModel(None)
117
117
  self.update_date_dependent_combos()
118
- self.update_area_combos()
118
+ self.update_from_to_list_views()
119
119
  else:
120
120
  pass
121
121
  else:
@@ -34,7 +34,7 @@ from PySide6 import QtGui, QtWidgets, QtCore
34
34
  # Engine imports
35
35
  from GridCalEngine.Devices.multi_circuit import MultiCircuit
36
36
  import GridCalEngine.Simulations as sim
37
- from GridCalEngine.enumerations import EngineType
37
+ from GridCalEngine.enumerations import EngineType, DeviceType
38
38
  from GridCalEngine.DataStructures.numerical_circuit import NumericalCircuit, compile_numerical_circuit_at
39
39
 
40
40
  from GridCalEngine.Compilers.circuit_to_bentayga import BENTAYGA_AVAILABLE
@@ -149,7 +149,7 @@ class BaseMainGui(QMainWindow):
149
149
 
150
150
  self.current_boundary_set: str = ""
151
151
 
152
- # threads --------------------------------------------------------------------------------------------------
152
+ # threads ------------------------------------------------------------------------------------------------------
153
153
  self.painter = None
154
154
  self.open_file_thread_object = None
155
155
  self.save_file_thread_object = None
@@ -164,7 +164,7 @@ class BaseMainGui(QMainWindow):
164
164
  self.simulation_start_index: int = -1
165
165
  self.simulation_end_index: int = -1
166
166
 
167
- # window pointers ------------------------------------------------------------------------------------------
167
+ # window pointers ----------------------------------------------------------------------------------------------
168
168
  self.file_sync_window: Union[SyncDialogueWindow, None] = None
169
169
  self.sigma_dialogue: Union[SigmaAnalysisGUI, None] = None
170
170
  self.grid_generator_dialogue: Union[GridGeneratorGUI, None] = None
@@ -181,7 +181,7 @@ class BaseMainGui(QMainWindow):
181
181
  self.contingency_checks_diag: Union[CheckListDialogue, None] = None
182
182
  self.start_end_dialogue_window: Union[StartEndSelectionDialogue, None] = None
183
183
 
184
- # available engines
184
+ # available engines --------------------------------------------------------------------------------------------
185
185
  engine_lst = [EngineType.GridCal]
186
186
  if NEWTON_PA_AVAILABLE:
187
187
  engine_lst.append(EngineType.NewtonPA)
@@ -194,10 +194,19 @@ class BaseMainGui(QMainWindow):
194
194
  self.ui.engineComboBox.setCurrentIndex(0)
195
195
  self.engine_dict = {x.value: x for x in engine_lst}
196
196
 
197
- # dark mode detection
197
+ # available engines --------------------------------------------------------------------------------------------
198
+ exchange_places = [DeviceType.AreaDevice, DeviceType.CountryDevice]
199
+ exchange_places_mdl = gf.get_list_model([x.value for x in exchange_places])
200
+ self.ui.fromComboBox.setModel(exchange_places_mdl)
201
+ self.ui.fromComboBox.setCurrentIndex(0)
202
+ self.ui.toComboBox.setModel(exchange_places_mdl)
203
+ self.ui.toComboBox.setCurrentIndex(0)
204
+ self.exchange_places_dict = {x.value: x for x in exchange_places}
205
+
206
+ # dark mode detection ------------------------------------------------------------------------------------------
198
207
  self.ui.dark_mode_checkBox.setChecked(IS_DARK)
199
208
 
200
- # Console
209
+ # Console ------------------------------------------------------------------------------------------------------
201
210
  self.console: Union[ConsoleWidget, None] = None
202
211
  try:
203
212
  self.create_console()
@@ -206,7 +215,7 @@ class BaseMainGui(QMainWindow):
206
215
 
207
216
  self.calculation_inputs_to_display = None
208
217
 
209
- # ----------------------------------------------------------------------------------------------------------
218
+ # --------------------------------------------------------------------------------------------------------------
210
219
  self.ui.actionClear_stuff_running_right_now.triggered.connect(self.clear_stuff_running)
211
220
  self.ui.actionAbout.triggered.connect(self.about_box)
212
221
  self.ui.actionAuto_rate_branches.triggered.connect(self.auto_rate_branches)
@@ -230,21 +239,9 @@ class BaseMainGui(QMainWindow):
230
239
 
231
240
  self.ui.grid_name_line_edit.textChanged.connect(self.change_circuit_name)
232
241
 
233
- def add_data_to_circuit(self, filename):
234
- df = self.catalogue_dialogue.read_csv_file(filename)
235
- print(df.head())
236
-
237
- if self.catalogue_dialogue.ui.checkBox.isChecked():
238
- # or self.catalogue_dialogue.ui.checkBox_5.isChecked()
239
- transformers = self.catalogue_dialogue.get_transformer_catalogue(df)
240
- self.circuit.transformer_types += transformers
241
-
242
- elif self.catalogue_dialogue.ui.checkBox_2.isChecked():
243
- self.circuit.underground_cable_types += self.catalogue_dialogue.get_cables_catalogue(df)
244
-
245
- elif self.catalogue_dialogue.ui.checkBox_3.isChecked():
246
- # or self.catalogue_dialogue.ui.checkBox_6.isChecked()
247
- self.circuit.sequence_line_types += self.catalogue_dialogue.get_sequence_lines_catalogue(df)
242
+ # comboboxes
243
+ self.ui.fromComboBox.currentTextChanged.connect(self.update_from_to_list_views)
244
+ self.ui.toComboBox.currentTextChanged.connect(self.update_from_to_list_views)
248
245
 
249
246
  def LOCK(self, val: bool = True) -> None:
250
247
  """
@@ -591,20 +588,23 @@ class BaseMainGui(QMainWindow):
591
588
  self.ui.vs_target_comboBox.setModel(mdl)
592
589
  self.setup_time_sliders()
593
590
 
594
- def update_area_combos(self):
591
+ def update_from_to_list_views(self):
595
592
  """
596
- Update the area dependent combos
593
+ Update the exchange area, countries, etc... dependent combos
597
594
  """
598
- n = len(self.circuit.areas)
599
- mdl1 = gf.get_list_model([str(elm) for elm in self.circuit.areas], checks=True)
600
- mdl2 = gf.get_list_model([str(elm) for elm in self.circuit.areas], checks=True)
595
+ same_type = self.ui.fromComboBox.currentText() == self.ui.toComboBox.currentText()
596
+
597
+ devs_from = self.circuit.get_elements_by_type(self.exchange_places_dict[self.ui.fromComboBox.currentText()])
598
+ mdl1 = gf.get_list_model([str(elm) for elm in devs_from], checks=True)
599
+ self.ui.fromListView.setModel(mdl1)
601
600
 
602
- self.ui.areaFromListView.setModel(mdl1)
603
- self.ui.areaToListView.setModel(mdl2)
601
+ devs_to = self.circuit.get_elements_by_type(self.exchange_places_dict[self.ui.toComboBox.currentText()])
602
+ mdl2 = gf.get_list_model([str(elm) for elm in devs_to], checks=True)
603
+ self.ui.toListView.setModel(mdl2)
604
604
 
605
- if n > 1:
606
- self.ui.areaFromListView.model().item(0).setCheckState(QtCore.Qt.CheckState.Checked)
607
- self.ui.areaToListView.model().item(1).setCheckState(QtCore.Qt.CheckState.Checked)
605
+ if len(devs_from) > 1 and same_type:
606
+ self.ui.fromListView.model().item(0).setCheckState(QtCore.Qt.CheckState.Checked)
607
+ self.ui.toListView.model().item(1).setCheckState(QtCore.Qt.CheckState.Checked)
608
608
 
609
609
  def fix_generators_active_based_on_the_power(self, ask_before=True):
610
610
  """
@@ -376,7 +376,7 @@ class IoMain(ConfigurationMain):
376
376
 
377
377
  # update the drop-down menus that display dates
378
378
  self.update_date_dependent_combos()
379
- self.update_area_combos()
379
+ self.update_from_to_list_views()
380
380
 
381
381
  # get the session tree structure
382
382
  session_data_dict = self.open_file_thread_object.get_session_tree()
@@ -793,7 +793,7 @@ class IoMain(ConfigurationMain):
793
793
 
794
794
  # update the drop down menus that display dates
795
795
  self.update_date_dependent_combos()
796
- self.update_area_combos()
796
+ self.update_from_to_list_views()
797
797
 
798
798
  # clear the results
799
799
  self.clear_results()
@@ -27,6 +27,7 @@ from PySide6 import QtGui, QtWidgets
27
27
  from matplotlib.colors import LinearSegmentedColormap
28
28
  import GridCal.Gui.GuiFunctions as gf
29
29
  import GridCal.Gui.Visualization.visualization as viz
30
+ from GridCal.Gui.GeneralDialogues import LogsDialogue
30
31
  from GridCal.Gui.Diagrams.SchematicWidget.schematic_widget import SchematicWidget
31
32
  from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import MapWidget
32
33
  from GridCal.Gui.messages import yes_no_question, error_msg, warning_msg, info_msg
@@ -43,6 +44,7 @@ from GridCalEngine.IO.file_system import get_create_gridcal_folder
43
44
  from GridCalEngine.IO.gridcal.remote import RemoteInstruction
44
45
  from GridCalEngine.DataStructures.numerical_circuit import compile_numerical_circuit_at
45
46
  from GridCalEngine.Simulations.types import DRIVER_OBJECTS
47
+ from GridCalEngine.basic_structures import Logger
46
48
  from GridCalEngine.enumerations import (DeviceType, AvailableTransferMode, SolverType, MIPSolvers, TimeGrouping,
47
49
  ZonalGrouping, ContingencyMethod, InvestmentEvaluationMethod, EngineType,
48
50
  BranchImpedanceMode, ResultTypes, SimulationTypes, NodalCapacityMethod,
@@ -583,44 +585,31 @@ class SimulationsMain(TimeEventsMain):
583
585
  self.ui.resultsTableView.setModel(None)
584
586
  self.ui.resultsLogsTreeView.setModel(None)
585
587
 
586
- def get_compatible_areas_from_to(self) -> Tuple[
587
- bool,
588
- List[Tuple[int, dev.Bus]],
589
- List[Tuple[int, dev.Bus]],
590
- List[Tuple[int, object, float]],
591
- List[Tuple[int, object, float]],
592
- List[dev.Area], List[dev.Area]]:
588
+ def get_compatible_from_to_buses_and_inter_branches(self) -> dev.InterAggregationInfo:
593
589
  """
594
590
  Get the lists that help defining the inter area objects
595
- :return: success?,
596
- list of tuples bus idx, Bus in the areas from,
597
- list of tuples bus idx, Bus in the areas to,
598
- List of inter area Branches (branch index, branch object, flow sense w.r.t the area exchange),
599
- List of inter area HVDC (branch index, branch object, flow sense w.r.t the area exchange),
600
- List of areas from,
601
- List of areas to
602
- """
603
- areas_from_idx = gf.get_checked_indices(self.ui.areaFromListView.model())
604
- areas_to_idx = gf.get_checked_indices(self.ui.areaToListView.model())
605
- areas_from = [self.circuit.areas[i] for i in areas_from_idx]
606
- areas_to = [self.circuit.areas[i] for i in areas_to_idx]
607
-
608
- for a1 in areas_from:
609
- if a1 in areas_to:
610
- error_msg("The area from '{0}' is in the list of areas to. This cannot be.".format(a1.name),
611
- 'Incompatible areas')
612
- return False, [], [], [], [], [], []
613
- for a2 in areas_to:
614
- if a2 in areas_from:
615
- error_msg("The area to '{0}' is in the list of areas from. This cannot be.".format(a2.name),
616
- 'Incompatible areas')
617
- return False, [], [], [], [], [], []
618
-
619
- lst_from = self.circuit.get_areas_buses(areas_from)
620
- lst_to = self.circuit.get_areas_buses(areas_to)
621
- lst_br = self.circuit.get_inter_areas_branches(areas_from, areas_to)
622
- lst_br_hvdc = self.circuit.get_inter_areas_hvdc_branches(areas_from, areas_to)
623
- return True, lst_from, lst_to, lst_br, lst_br_hvdc, areas_from, areas_to
591
+ :return: InterAggregationInfo
592
+ """
593
+ dev_tpe_from = self.exchange_places_dict[self.ui.fromComboBox.currentText()]
594
+ devs_from = self.circuit.get_elements_by_type(dev_tpe_from)
595
+ from_idx = gf.get_checked_indices(self.ui.fromListView.model())
596
+ objects_from = [devs_from[i] for i in from_idx]
597
+
598
+ dev_tpe_to = self.exchange_places_dict[self.ui.toComboBox.currentText()]
599
+ devs_to = self.circuit.get_elements_by_type(dev_tpe_to)
600
+ to_idx = gf.get_checked_indices(self.ui.toListView.model())
601
+ objects_to = [devs_to[i] for i in to_idx]
602
+
603
+ info: dev.InterAggregationInfo = self.circuit.get_inter_aggregation_info(objects_from=objects_from,
604
+ objects_to=objects_to)
605
+
606
+ if info.logger.has_logs():
607
+ # Show dialogue
608
+ dlg = LogsDialogue(name="Add selected DB objects to current diagram", logger=info.logger)
609
+ dlg.setModal(True)
610
+ dlg.exec()
611
+
612
+ return info
624
613
 
625
614
  def get_selected_power_flow_options(self) -> sim.PowerFlowOptions:
626
615
  """
@@ -1271,20 +1260,19 @@ class SimulationsMain(TimeEventsMain):
1271
1260
  threshold = self.ui.atcThresholdSpinBox.value()
1272
1261
  max_report_elements = 5 # TODO: self.ui.ntcReportLimitingElementsSpinBox.value()
1273
1262
  # available transfer capacity inter areas
1274
- (compatible_areas, lst_from, lst_to, lst_br,
1275
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1263
+ info: dev.InterAggregationInfo = self.get_compatible_from_to_buses_and_inter_branches()
1276
1264
 
1277
- if not compatible_areas:
1265
+ if not info.valid:
1278
1266
  return
1279
1267
 
1280
- idx_from = np.array([i for i, bus in lst_from])
1281
- idx_to = np.array([i for i, bus in lst_to])
1282
- idx_br = np.array([i for i, bus, sense in lst_br])
1283
- sense_br = np.array([sense for i, bus, sense in lst_br])
1268
+ idx_from = info.idx_bus_from
1269
+ idx_to = info.idx_bus_to
1270
+ idx_br = info.idx_branches
1271
+ sense_br = info.sense_branches
1284
1272
 
1285
1273
  # HVDC
1286
- idx_hvdc_br = np.array([i for i, bus, sense in lst_hvdc_br])
1287
- sense_hvdc_br = np.array([sense for i, bus, sense in lst_hvdc_br])
1274
+ idx_hvdc_br = info.idx_hvdc
1275
+ sense_hvdc_br = info.sense_hvdc
1288
1276
 
1289
1277
  if self.ui.usePfValuesForAtcCheckBox.isChecked():
1290
1278
  pf_results = self.session.power_flow
@@ -1386,21 +1374,19 @@ class SimulationsMain(TimeEventsMain):
1386
1374
  max_report_elements = 5 # TODO: self.ui.ntcReportLimitingElementsSpinBox.value()
1387
1375
 
1388
1376
  # available transfer capacity inter areas
1389
- (compatible_areas,
1390
- lst_from, lst_to, lst_br,
1391
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1377
+ info: dev.InterAggregationInfo = self.get_compatible_from_to_buses_and_inter_branches()
1392
1378
 
1393
- if not compatible_areas:
1379
+ if not info.valid:
1394
1380
  return
1395
1381
 
1396
- idx_from = np.array([i for i, bus in lst_from])
1397
- idx_to = np.array([i for i, bus in lst_to])
1398
- idx_br = np.array([i for i, bus, sense in lst_br])
1399
- sense_br = np.array([sense for i, bus, sense in lst_br])
1382
+ idx_from = info.idx_bus_from
1383
+ idx_to = info.idx_bus_to
1384
+ idx_br = info.idx_branches
1385
+ sense_br = info.sense_branches
1400
1386
 
1401
1387
  # HVDC
1402
- idx_hvdc_br = np.array([i for i, bus, sense in lst_hvdc_br])
1403
- sense_hvdc_br = np.array([sense for i, bus, sense in lst_hvdc_br])
1388
+ idx_hvdc_br = info.idx_hvdc
1389
+ sense_hvdc_br = info.sense_hvdc
1404
1390
 
1405
1391
  if self.ui.usePfValuesForAtcCheckBox.isChecked():
1406
1392
  pf_results = self.session.power_flow_ts
@@ -1520,19 +1506,19 @@ class SimulationsMain(TimeEventsMain):
1520
1506
 
1521
1507
  if self.ui.atcRadioButton.isChecked():
1522
1508
  use_alpha = True
1523
- compatible_areas, lst_from, lst_to, lst_br, lst_hvdc_br, areas_from, areas_to = self.get_compatible_areas_from_to()
1509
+ info: dev.InterAggregationInfo = self.get_compatible_from_to_buses_and_inter_branches()
1524
1510
 
1525
- if compatible_areas:
1526
- idx_from = [i for i, bus in lst_from]
1527
- idx_to = [i for i, bus in lst_to]
1511
+ if info.valid:
1512
+ idx_from = info.idx_bus_from
1513
+ idx_to = info.idx_bus_to
1528
1514
 
1529
1515
  alpha_vec[idx_from] *= 2
1530
1516
  alpha_vec[idx_to] *= -2
1531
1517
  sel_bus_idx = np.zeros(0, dtype=int) # for completeness
1532
1518
 
1533
1519
  # HVDC
1534
- idx_hvdc_br = np.array([i for i, bus, sense in lst_hvdc_br])
1535
- sense_hvdc_br = np.array([sense for i, bus, sense in lst_hvdc_br])
1520
+ idx_hvdc_br = info.idx_hvdc
1521
+ sense_hvdc_br = info.sense_hvdc
1536
1522
  else:
1537
1523
  sel_bus_idx = np.zeros(0, dtype=int) # for completeness
1538
1524
  # incompatible areas...exit
@@ -1882,23 +1868,17 @@ class SimulationsMain(TimeEventsMain):
1882
1868
 
1883
1869
  # available transfer capacity inter areas
1884
1870
  if maximize_flows:
1885
- (compatible_areas, lst_from, lst_to,
1886
- lst_br, lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1887
- idx_from = np.array([i for i, bus in lst_from])
1888
- idx_to = np.array([i for i, bus in lst_to])
1871
+ inter_aggregation_info: dev.InterAggregationInfo = self.get_compatible_from_to_buses_and_inter_branches()
1889
1872
 
1890
- if len(idx_from) == 0:
1873
+ if len(inter_aggregation_info.lst_from) == 0:
1891
1874
  error_msg('The area "from" has no buses!')
1892
1875
  return None
1893
1876
 
1894
- if len(idx_to) == 0:
1877
+ if len(inter_aggregation_info.lst_to) == 0:
1895
1878
  error_msg('The area "to" has no buses!')
1896
1879
  return None
1897
1880
  else:
1898
- idx_from = None
1899
- idx_to = None
1900
- areas_from = None
1901
- areas_to = None
1881
+ inter_aggregation_info = None
1902
1882
 
1903
1883
  ips_method = self.ips_solvers_dict[self.ui.ips_method_comboBox.currentText()]
1904
1884
  ips_tolerance = 1.0 / (10.0 ** self.ui.ips_tolerance_spinBox.value())
@@ -1917,10 +1897,7 @@ class SimulationsMain(TimeEventsMain):
1917
1897
  skip_generation_limits=skip_generation_limits,
1918
1898
  lodf_tolerance=lodf_tolerance,
1919
1899
  maximize_flows=maximize_flows,
1920
- area_from_bus_idx=idx_from,
1921
- area_to_bus_idx=idx_to,
1922
- areas_from=areas_from,
1923
- areas_to=areas_to,
1900
+ inter_aggregation_info=inter_aggregation_info,
1924
1901
  unit_commitment=unit_commitment,
1925
1902
  export_model_fname=export_model_fname,
1926
1903
  generate_report=generate_report,
@@ -2097,16 +2074,15 @@ class SimulationsMain(TimeEventsMain):
2097
2074
  """
2098
2075
 
2099
2076
  # available transfer capacity inter areas
2100
- (compatible_areas, lst_from, lst_to, lst_br,
2101
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
2077
+ info: dev.InterAggregationInfo = self.get_compatible_from_to_buses_and_inter_branches()
2102
2078
 
2103
- if not compatible_areas:
2079
+ if not info.valid:
2104
2080
  error_msg('There are no compatible areas')
2105
2081
  return None
2106
2082
 
2107
- idx_from = np.array([i for i, bus in lst_from])
2108
- idx_to = np.array([i for i, bus in lst_to])
2109
- idx_br = np.array([i for i, bus, sense in lst_br])
2083
+ idx_from = info.idx_bus_from
2084
+ idx_to = info.idx_bus_to
2085
+ idx_br = info.idx_branches
2110
2086
 
2111
2087
  if len(idx_from) == 0:
2112
2088
  error_msg('The area "from" has no buses!')
@@ -16,7 +16,7 @@ import datetime
16
16
  _current_year_ = datetime.datetime.now().year
17
17
 
18
18
  # do not forget to keep a three-number version!!!
19
- __GridCal_VERSION__ = "5.1.28"
19
+ __GridCal_VERSION__ = "5.1.30"
20
20
 
21
21
  url = 'https://github.com/SanPen/GridCal'
22
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: GridCal
3
- Version: 5.1.28
3
+ Version: 5.1.30
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.