GridCal 5.1.27__tar.gz → 5.1.29__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 (283) hide show
  1. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/MainWindow.py +26 -16
  2. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Model/objects.py +10 -10
  3. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Model/time_events.py +1 -1
  4. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/base_gui.py +32 -32
  5. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/io.py +4 -4
  6. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/simulations.py +45 -30
  7. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/plugins.py +1 -1
  8. GridCal-5.1.29/GridCal/Session/export_results_driver.py +80 -0
  9. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/__version__.py +1 -1
  10. {GridCal-5.1.27 → GridCal-5.1.29}/PKG-INFO +1 -1
  11. GridCal-5.1.27/GridCal/Session/export_results_driver.py +0 -117
  12. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ExecuteGridCal.py +0 -0
  13. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  14. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  15. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  16. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  17. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  18. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  19. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/__init__.py +0 -0
  20. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/gui.py +0 -0
  21. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  22. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  23. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  24. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  25. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  26. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  27. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  28. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ConsoleWidget.py +0 -0
  29. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  30. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  31. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  32. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  33. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  34. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  35. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  36. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  37. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  38. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  39. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  40. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  41. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  42. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  43. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  44. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  45. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  46. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  47. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  48. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  49. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  50. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  51. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  52. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
  53. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
  54. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  55. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  56. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  57. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +0 -0
  58. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  59. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  60. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  61. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  62. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  63. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  64. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  65. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  66. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  67. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  68. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  69. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
  70. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  71. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  72. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/new_line_dialogue.py +0 -0
  73. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  74. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  75. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  76. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  77. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  78. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  79. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  80. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  81. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  82. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  83. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  84. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  85. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  86. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  87. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  88. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  89. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  90. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  91. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  92. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  93. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  94. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  95. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  96. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  97. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  98. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  99. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  100. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  101. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  102. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  103. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  104. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  105. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  106. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  107. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  108. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  109. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  110. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  111. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  112. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  113. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
  114. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  115. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/__init__.py +0 -0
  116. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/base_diagram_widget.py +0 -0
  117. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  118. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  119. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  120. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GeneralDialogues.py +0 -0
  121. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  122. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  123. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GridGenerator/gui.py +0 -0
  124. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  125. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  126. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/GuiFunctions.py +0 -0
  127. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  128. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  129. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  130. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  131. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  132. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  133. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  134. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  135. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  136. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  137. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  138. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  139. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/GridCalMain.py +0 -0
  140. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  141. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  142. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  143. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  144. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  145. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  146. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  147. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  148. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  149. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  150. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  151. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  152. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  153. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  154. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/__init__.py +0 -0
  155. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/icons_rc.py +0 -0
  156. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/object_select_window.py +0 -0
  157. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Main/update_gui_file.py +0 -0
  158. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  159. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  160. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  161. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  162. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  163. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  164. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  165. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  166. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  167. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  168. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  169. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  170. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  171. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  172. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  173. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  174. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  175. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  176. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  177. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  178. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  179. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  180. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  181. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  182. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  183. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  184. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  185. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  186. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  187. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  188. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  189. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  190. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  191. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  192. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  193. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  194. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  195. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  196. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  197. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  198. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  199. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  200. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  201. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  202. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  203. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  204. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  205. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  206. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  207. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Visualization/__init__.py +0 -0
  208. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Visualization/visualization.py +0 -0
  209. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Widgets/__init__.py +0 -0
  210. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  211. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  212. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  213. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  214. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  215. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  216. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  217. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/__init__.py +0 -0
  218. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/associations_model.py +0 -0
  219. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/messages.py +0 -0
  220. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/object_model.py +0 -0
  221. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/pandas_model.py +0 -0
  222. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/plot_config.py +0 -0
  223. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/profiles_model.py +0 -0
  224. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/table_view_header_wrap.py +0 -0
  225. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/themes.py +0 -0
  226. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/update_gui_all.py +0 -0
  227. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Gui/update_gui_common.py +0 -0
  228. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/LICENSE.txt +0 -0
  229. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/__init__.py +0 -0
  230. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/file_handler.py +0 -0
  231. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/results_model.py +0 -0
  232. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/server_driver.py +0 -0
  233. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/session.py +0 -0
  234. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/Session/synchronization_driver.py +0 -0
  235. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/__init__.py +0 -0
  236. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  237. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  238. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  239. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  240. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  241. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  242. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  243. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  244. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  245. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  246. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  247. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  248. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  249. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  250. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  251. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  252. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  253. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  254. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  255. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  256. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  257. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  258. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  259. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  260. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  261. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  262. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  263. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  264. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  265. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  266. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  267. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  268. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  269. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  270. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  271. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  272. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  273. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  274. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/__init__.py +0 -0
  275. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/data/__init__.py +0 -0
  276. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/data/cables.csv +0 -0
  277. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/data/sequence_lines.csv +0 -0
  278. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/data/transformers.csv +0 -0
  279. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/data/wires.csv +0 -0
  280. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/templates.py +0 -0
  281. {GridCal-5.1.27 → GridCal-5.1.29}/GridCal/update.py +0 -0
  282. {GridCal-5.1.27 → GridCal-5.1.29}/setup.cfg +0 -0
  283. {GridCal-5.1.27 → GridCal-5.1.29}/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()
@@ -837,7 +837,7 @@ class IoMain(ConfigurationMain):
837
837
  :return:
838
838
  """
839
839
 
840
- available_results = self.get_available_results()
840
+ available_results = self.get_available_drivers()
841
841
 
842
842
  if len(available_results) > 0:
843
843
 
@@ -851,7 +851,7 @@ class IoMain(ConfigurationMain):
851
851
 
852
852
  self.stuff_running_now.append('export_all')
853
853
  self.export_all_thread_object = exprtdrv.ExportAllThread(circuit=self.circuit,
854
- simulations_list=available_results,
854
+ drivers_list=available_results,
855
855
  file_name=filename)
856
856
 
857
857
  self.export_all_thread_object.progress_signal.connect(self.ui.progressBar.setValue)
@@ -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,
@@ -256,7 +258,7 @@ class SimulationsMain(TimeEventsMain):
256
258
 
257
259
  return all_threads
258
260
 
259
- def get_available_results(self):
261
+ def get_available_drivers(self) -> List[DRIVER_OBJECTS]:
260
262
  """
261
263
  Get a list of all the available results' objects
262
264
  :return: list[object]
@@ -539,7 +541,7 @@ class SimulationsMain(TimeEventsMain):
539
541
  # clear results lists
540
542
  self.ui.results_treeView.setModel(None)
541
543
 
542
- available_results = self.get_available_results()
544
+ available_results = self.get_available_drivers()
543
545
  max_steps = 0
544
546
  d = dict()
545
547
  lst = list()
@@ -583,13 +585,13 @@ 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[
588
+ def get_compatible_from_to_buses_and_inter_branches(self) -> Tuple[
587
589
  bool,
588
590
  List[Tuple[int, dev.Bus]],
589
591
  List[Tuple[int, dev.Bus]],
590
592
  List[Tuple[int, object, float]],
591
593
  List[Tuple[int, object, float]],
592
- List[dev.Area], List[dev.Area]]:
594
+ List[dev.Area | dev.Zone | dev.Country], List[dev.Area | dev.Zone | dev.Country]]:
593
595
  """
594
596
  Get the lists that help defining the inter area objects
595
597
  :return: success?,
@@ -600,27 +602,40 @@ class SimulationsMain(TimeEventsMain):
600
602
  List of areas from,
601
603
  List of areas to
602
604
  """
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
605
+ dev_tpe_from = self.exchange_places_dict[self.ui.fromComboBox.currentText()]
606
+ devs_from = self.circuit.get_elements_by_type(dev_tpe_from)
607
+ from_idx = gf.get_checked_indices(self.ui.fromListView.model())
608
+ objects_from = [devs_from[i] for i in from_idx]
609
+ lst_from = self.circuit.get_aggregation_buses(objects_from)
610
+ buses_from_set = {x[1] for x in lst_from}
611
+
612
+ dev_tpe_to = self.exchange_places_dict[self.ui.toComboBox.currentText()]
613
+ devs_to = self.circuit.get_elements_by_type(dev_tpe_to)
614
+ to_idx = gf.get_checked_indices(self.ui.toListView.model())
615
+ objects_to = [devs_to[i] for i in to_idx]
616
+ lst_to = self.circuit.get_aggregation_buses(objects_to)
617
+ buses_to_set = {x[1] for x in lst_to}
618
+
619
+ buses_intersection = buses_from_set & buses_to_set
620
+
621
+ if len(buses_intersection) > 0:
622
+ logger = Logger()
623
+ for bus in buses_intersection:
624
+ logger.add_error(msg=f'Bus in both selected {dev_tpe_from.value} to {dev_tpe_to.value}',
625
+ device_class=bus.device_type.value,
626
+ device=bus.name)
627
+
628
+ # Show dialogue
629
+ dlg = LogsDialogue(name="Add selected DB objects to current diagram", logger=logger)
630
+ dlg.setModal(True)
631
+ dlg.exec()
632
+
633
+ return False, [], [], [], [], [], []
634
+
635
+ lst_br = self.circuit.get_inter_buses_branches(buses_from_set, buses_to_set)
636
+ lst_br_hvdc = self.circuit.get_inter_buses_hvdc_branches(buses_from_set, buses_to_set)
637
+
638
+ return True, lst_from, lst_to, lst_br, lst_br_hvdc, objects_from, objects_to
624
639
 
625
640
  def get_selected_power_flow_options(self) -> sim.PowerFlowOptions:
626
641
  """
@@ -1272,7 +1287,7 @@ class SimulationsMain(TimeEventsMain):
1272
1287
  max_report_elements = 5 # TODO: self.ui.ntcReportLimitingElementsSpinBox.value()
1273
1288
  # available transfer capacity inter areas
1274
1289
  (compatible_areas, lst_from, lst_to, lst_br,
1275
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1290
+ lst_hvdc_br, areas_from, areas_to) = self.get_compatible_from_to_buses_and_inter_branches()
1276
1291
 
1277
1292
  if not compatible_areas:
1278
1293
  return
@@ -1388,7 +1403,7 @@ class SimulationsMain(TimeEventsMain):
1388
1403
  # available transfer capacity inter areas
1389
1404
  (compatible_areas,
1390
1405
  lst_from, lst_to, lst_br,
1391
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1406
+ lst_hvdc_br, areas_from, areas_to) = self.get_compatible_from_to_buses_and_inter_branches()
1392
1407
 
1393
1408
  if not compatible_areas:
1394
1409
  return
@@ -1520,7 +1535,7 @@ class SimulationsMain(TimeEventsMain):
1520
1535
 
1521
1536
  if self.ui.atcRadioButton.isChecked():
1522
1537
  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()
1538
+ compatible_areas, lst_from, lst_to, lst_br, lst_hvdc_br, areas_from, areas_to = self.get_compatible_from_to_buses_and_inter_branches()
1524
1539
 
1525
1540
  if compatible_areas:
1526
1541
  idx_from = [i for i, bus in lst_from]
@@ -1883,7 +1898,7 @@ class SimulationsMain(TimeEventsMain):
1883
1898
  # available transfer capacity inter areas
1884
1899
  if maximize_flows:
1885
1900
  (compatible_areas, lst_from, lst_to,
1886
- lst_br, lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
1901
+ lst_br, lst_hvdc_br, areas_from, areas_to) = self.get_compatible_from_to_buses_and_inter_branches()
1887
1902
  idx_from = np.array([i for i, bus in lst_from])
1888
1903
  idx_to = np.array([i for i, bus in lst_to])
1889
1904
 
@@ -2098,7 +2113,7 @@ class SimulationsMain(TimeEventsMain):
2098
2113
 
2099
2114
  # available transfer capacity inter areas
2100
2115
  (compatible_areas, lst_from, lst_to, lst_br,
2101
- lst_hvdc_br, areas_from, areas_to) = self.get_compatible_areas_from_to()
2116
+ lst_hvdc_br, areas_from, areas_to) = self.get_compatible_from_to_buses_and_inter_branches()
2102
2117
 
2103
2118
  if not compatible_areas:
2104
2119
  error_msg('There are no compatible areas')
@@ -64,7 +64,7 @@ class PluginFunction:
64
64
  - func(self) is then what I wanted to lambda in the first place
65
65
  """
66
66
  func = self.function_ptr
67
- return lambda e, func=func: func(gui_instance) # This is not an error, it is correct
67
+ return lambda e=True, func=func: func(gui_instance) # This is not an error, it is correct
68
68
 
69
69
  def to_dict(self) -> Dict[str, str]:
70
70
  """
@@ -0,0 +1,80 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+
18
+ from typing import List
19
+ from PySide6.QtCore import QThread, Signal
20
+ from GridCalEngine.IO.gridcal.results_export import export_drivers
21
+ from GridCalEngine.Devices.multi_circuit import MultiCircuit
22
+ from GridCalEngine.Simulations.types import DRIVER_OBJECTS
23
+ from GridCalEngine.basic_structures import Logger
24
+
25
+
26
+ class ExportAllThread(QThread):
27
+ """
28
+ ExportAllThread
29
+ """
30
+ progress_signal = Signal(float)
31
+ progress_text = Signal(str)
32
+ done_signal = Signal()
33
+
34
+ def __init__(self, circuit: MultiCircuit, drivers_list: List[DRIVER_OBJECTS], file_name: str):
35
+ """
36
+ Constructor
37
+ :param circuit: Grid circuit
38
+ :param drivers_list: list of GridCal simulation drivers
39
+ :param file_name: name of the file where to save (.zip)
40
+ """
41
+ QThread.__init__(self)
42
+
43
+ self.circuit: MultiCircuit = circuit
44
+
45
+ self.drivers_list: List[DRIVER_OBJECTS] = drivers_list
46
+
47
+ self.file_name: str = file_name
48
+
49
+ self.valid: bool = False
50
+
51
+ self.logger = Logger()
52
+
53
+ self.error_msg: str = ""
54
+
55
+ self.__cancel__ = False
56
+
57
+ def run(self) -> None:
58
+ """
59
+ run the file save procedure
60
+ """
61
+
62
+ # try:
63
+ export_drivers(drivers_list=self.drivers_list,
64
+ file_name=self.file_name,
65
+ text_func=self.progress_text.emit,
66
+ progress_func=self.progress_signal.emit,
67
+ logger=self.logger)
68
+
69
+ self.valid = True
70
+
71
+ # post events
72
+ self.progress_text.emit('Done!')
73
+
74
+ self.done_signal.emit()
75
+
76
+ def cancel(self):
77
+ """
78
+ Cancel progress
79
+ """
80
+ self.__cancel__ = True
@@ -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.27"
19
+ __GridCal_VERSION__ = "5.1.29"
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.27
3
+ Version: 5.1.29
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.