GridCal 5.1.43__tar.gz → 5.1.45__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 (281) hide show
  1. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +2 -2
  2. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +8 -9
  3. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +57 -31
  4. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +30 -9
  5. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +101 -13
  6. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +3 -1
  7. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -81
  8. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +6 -2
  9. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/base_diagram_widget.py +9 -9
  10. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/MainWindow.py +13 -7
  11. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Model/time_events.py +13 -7
  12. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/__version__.py +1 -1
  13. {GridCal-5.1.43 → GridCal-5.1.45}/PKG-INFO +1 -1
  14. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ExecuteGridCal.py +0 -0
  15. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  16. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  17. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  18. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  19. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  20. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  21. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/__init__.py +0 -0
  22. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/gui.py +0 -0
  23. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  24. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  25. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  26. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  27. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  28. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  29. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  30. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  31. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  32. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  33. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  34. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  35. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  36. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  37. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  38. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  39. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  40. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  41. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  42. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  43. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  44. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  45. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Branches/new_line_dialogue.py +0 -0
  46. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  47. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +0 -0
  48. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  49. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  50. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  51. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  52. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/gmt_local.py +0 -0
  53. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapbox.py +0 -0
  54. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/mapquest.py +0 -0
  55. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/open_street_map.py +0 -0
  56. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_toner.py +0 -0
  57. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_transport.py +0 -0
  58. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/stamen_watercolor.py +0 -0
  59. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  60. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  61. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  62. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  63. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  64. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  65. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  66. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  67. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  68. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  69. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  70. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  71. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  72. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  73. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  74. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  75. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  76. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  77. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  78. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  79. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  80. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  81. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  82. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  83. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  84. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  85. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  86. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  87. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  88. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  89. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  90. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  91. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  92. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  93. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  94. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  95. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  96. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  97. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  98. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  99. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  100. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  101. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  102. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  103. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  104. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  105. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  106. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/__init__.py +0 -0
  107. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  108. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  109. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  110. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  111. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  112. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/GridGenerator/gui.py +0 -0
  113. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  114. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  115. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  116. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  117. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  118. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  119. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  120. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  121. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  122. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  123. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  124. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  125. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  126. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  127. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/GridCalMain.py +0 -0
  128. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  129. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  130. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  131. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  132. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  133. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  134. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  135. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  136. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  137. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  138. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  139. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  140. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  141. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  142. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  143. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  144. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  145. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  146. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/__init__.py +0 -0
  147. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/icons_rc.py +0 -0
  148. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/object_select_window.py +0 -0
  149. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Main/update_gui_file.py +0 -0
  150. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  151. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  152. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  153. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  154. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  155. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  156. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  157. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  158. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  159. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  160. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  161. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  162. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  163. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  164. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  165. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  166. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  167. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  168. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  169. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  170. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  171. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  172. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  173. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  174. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  175. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  176. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  177. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  178. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  179. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  180. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  181. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  182. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  183. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  184. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  185. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  186. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  187. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  188. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  189. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  190. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  191. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  192. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  193. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  194. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  195. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  196. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  197. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  198. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  199. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Visualization/__init__.py +0 -0
  200. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Visualization/visualization.py +0 -0
  201. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Widgets/__init__.py +0 -0
  202. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  203. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  204. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  205. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  206. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  207. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  208. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  209. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/__init__.py +0 -0
  210. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/associations_model.py +0 -0
  211. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/console_widget.py +0 -0
  212. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/general_dialogues.py +0 -0
  213. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/gui_functions.py +0 -0
  214. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/messages.py +0 -0
  215. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/object_model.py +0 -0
  216. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/pandas_model.py +0 -0
  217. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/plot_config.py +0 -0
  218. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/profiles_model.py +0 -0
  219. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/results_model.py +0 -0
  220. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/table_view_header_wrap.py +0 -0
  221. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/themes.py +0 -0
  222. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/update_gui_all.py +0 -0
  223. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/update_gui_common.py +0 -0
  224. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Gui/wrappable_table_model.py +0 -0
  225. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/LICENSE.txt +0 -0
  226. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/__init__.py +0 -0
  227. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/export_results_driver.py +0 -0
  228. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/file_handler.py +0 -0
  229. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/server_driver.py +0 -0
  230. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/session.py +0 -0
  231. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/Session/synchronization_driver.py +0 -0
  232. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/__init__.py +0 -0
  233. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  234. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  235. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  236. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  237. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  238. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  239. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  240. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  241. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  242. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  243. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  244. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  245. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  246. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  247. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  248. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  249. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  250. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  251. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  252. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  253. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  254. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  255. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  256. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  257. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  258. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  259. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  260. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  261. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  262. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  263. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  264. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  265. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  266. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  267. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  268. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  269. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  270. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  271. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/__init__.py +0 -0
  272. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/data/__init__.py +0 -0
  273. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/data/cables.csv +0 -0
  274. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/data/sequence_lines.csv +0 -0
  275. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/data/transformers.csv +0 -0
  276. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/data/wires.csv +0 -0
  277. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/plugins.py +0 -0
  278. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/templates.py +0 -0
  279. {GridCal-5.1.43 → GridCal-5.1.45}/GridCal/update.py +0 -0
  280. {GridCal-5.1.43 → GridCal-5.1.45}/setup.cfg +0 -0
  281. {GridCal-5.1.43 → GridCal-5.1.45}/setup.py +0 -0
@@ -122,7 +122,7 @@ class MapLineContainer(GenericDiagramWidget):
122
122
  """
123
123
  self.segments_list.append(segment)
124
124
 
125
- def set_colour(self, color: QColor, w, style: Qt.PenStyle, tool_tip: str = '') -> None:
125
+ def set_colour(self, color: QColor, style: Qt.PenStyle, tool_tip: str = '') -> None:
126
126
  """
127
127
  Set color and style
128
128
  :param color: QColor instance
@@ -133,7 +133,7 @@ class MapLineContainer(GenericDiagramWidget):
133
133
  """
134
134
  for segment in self.segments_list:
135
135
  segment.setToolTip(tool_tip)
136
- segment.set_colour(color=color, w=w, style=style)
136
+ segment.set_colour(color=color, style=style)
137
137
 
138
138
  def update_connectors(self) -> None:
139
139
  """
@@ -76,7 +76,7 @@ class MapLineSegment(QGraphicsLineItem):
76
76
  self.first.add_position_change_callback(self.set_from_side_coordinates)
77
77
  self.second.add_position_change_callback(self.set_to_side_coordinates)
78
78
 
79
- self.set_colour(self.color, self.width, self.style)
79
+ self.set_colour(self.color, self.style)
80
80
  self.update_endings()
81
81
  self.needsUpdate = True
82
82
  self.setZValue(0)
@@ -115,7 +115,7 @@ class MapLineSegment(QGraphicsLineItem):
115
115
  self.arrow_p_to.label.setScale(width)
116
116
  self.arrow_q_to.label.setScale(width)
117
117
 
118
- def set_colour(self, color: QColor, w: float, style: Qt.PenStyle):
118
+ def set_colour(self, color: QColor, style: Qt.PenStyle):
119
119
  """
120
120
  Set color and style
121
121
  :param color: QColor instance
@@ -124,14 +124,13 @@ class MapLineSegment(QGraphicsLineItem):
124
124
  :return:
125
125
  """
126
126
 
127
- pen = QPen(color, w, style, Qt.PenCapStyle.RoundCap, Qt.PenJoinStyle.RoundJoin)
128
- pen.setWidthF(w)
127
+ pen = QPen(color, self.width, style, Qt.PenCapStyle.RoundCap, Qt.PenJoinStyle.RoundJoin)
129
128
 
130
129
  self.setPen(pen)
131
- self.arrow_p_from.set_colour(color, w, style)
132
- self.arrow_q_from.set_colour(color, w, style)
133
- self.arrow_p_to.set_colour(color, w, style)
134
- self.arrow_q_to.set_colour(color, w, style)
130
+ self.arrow_p_from.set_colour(color, self.arrow_p_from.w, style)
131
+ self.arrow_q_from.set_colour(color, self.arrow_q_from.w, style)
132
+ self.arrow_p_to.set_colour(color, self.arrow_p_to.w, style)
133
+ self.arrow_q_to.set_colour(color, self.arrow_q_to.w, style)
135
134
 
136
135
  def set_from_side_coordinates(self, x: float, y: float):
137
136
  """
@@ -286,7 +285,7 @@ class MapLineSegment(QGraphicsLineItem):
286
285
  self.color = OTHER['color']
287
286
 
288
287
  # Set pen for everyone
289
- self.set_colour(self.color, self.width, self.style)
288
+ self.set_colour(self.color, self.style)
290
289
 
291
290
  def enable_disable_label_drawing(self):
292
291
  """
@@ -84,9 +84,9 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
84
84
  self.setAcceptHoverEvents(True)
85
85
 
86
86
  # Allow selecting the node
87
- self.setFlag(self.GraphicsItemFlag.ItemIsSelectable | QGraphicsRectItem.ItemIsMovable)
87
+ self.setFlag(self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable)
88
88
 
89
- self.setCursor(QCursor(Qt.PointingHandCursor))
89
+ self.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
90
90
 
91
91
  # Create a pen with reduced line width
92
92
  self.change_pen_width(0.5)
@@ -113,6 +113,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
113
113
  rect = self.rect()
114
114
  rect.setWidth(r)
115
115
  rect.setHeight(r)
116
+ self.radius = r
116
117
 
117
118
  # change the width and height while keeping the same center
118
119
  r2 = r / 2
@@ -121,8 +122,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
121
122
 
122
123
  # Set the new rectangle with the updated dimensions
123
124
  self.setRect(new_x, new_y, r, r)
124
- self.radius = r
125
125
 
126
+ # update the callbacks position for the lines to move accordingly
126
127
  self.set_callabacks(new_x + r2, new_y + r2)
127
128
 
128
129
  for vl_graphics in self.voltage_level_graphics:
@@ -130,7 +131,21 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
130
131
 
131
132
  self.update_diagram()
132
133
 
133
- def set_api_object_color(self):
134
+ def resize_voltage_levels(self):
135
+ """
136
+
137
+ :return:
138
+ """
139
+ max_vl = 1.0 # 1 KV
140
+ for vl_graphics in self.voltage_level_graphics:
141
+ max_vl = max(max_vl, vl_graphics.api_object.Vnom)
142
+
143
+ for vl_graphics in self.voltage_level_graphics:
144
+ # radius here is the width, therefore we need to send W/2
145
+ scale = vl_graphics.api_object.Vnom / max_vl * 0.5
146
+ vl_graphics.set_size(r=self.radius * scale)
147
+
148
+ def set_api_object_color(self) -> None:
134
149
  """
135
150
  Gather the API object color and update this objects
136
151
  """
@@ -169,12 +184,20 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
169
184
  """
170
185
  Set the Zorder based on the voltage level voltage
171
186
  """
172
- # TODO: Check this
173
- sorted_objects = sorted(self.voltage_level_graphics, key=lambda x: x.api_object.Vnom)
187
+ max_vl = 1.0 # 1 KV
188
+ for vl_graphics in self.voltage_level_graphics:
189
+ max_vl = max(max_vl, vl_graphics.api_object.Vnom)
190
+
191
+ for vl_graphics in self.voltage_level_graphics:
192
+ scale = vl_graphics.api_object.Vnom / max_vl * 0.8
193
+ vl_graphics.set_size(r=self.radius * scale)
194
+ vl_graphics.center_on_substation()
195
+
196
+ sorted_objects = sorted(self.voltage_level_graphics, key=lambda x: -x.api_object.Vnom)
174
197
  for i, vl_graphics in enumerate(sorted_objects):
175
198
  vl_graphics.setZValue(i)
176
199
 
177
- def update_diagram(self):
200
+ def update_diagram(self) -> None:
178
201
  """
179
202
  Updates the element position in the diagram (to save)
180
203
  :return:
@@ -246,7 +269,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
246
269
  # self.editor.map.view.in_item = True
247
270
  self.set_color(self.hoover_color, self.color)
248
271
  self.hovered = True
249
- QApplication.instance().setOverrideCursor(Qt.PointingHandCursor)
272
+ QApplication.instance().setOverrideCursor(Qt.CursorShape.PointingHandCursor)
250
273
 
251
274
  def hoverLeaveEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
252
275
  """
@@ -266,34 +289,39 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
266
289
 
267
290
  add_menu_entry(menu=menu,
268
291
  text="Add voltage level",
269
- icon_path="",
292
+ icon_path=":/Icons/icons/plus.svg",
270
293
  function_ptr=self.add_voltage_level)
271
294
 
272
295
  add_menu_entry(menu=menu,
273
296
  text="Create line from here",
274
- icon_path="",
297
+ icon_path=":/Icons/icons/plus.svg",
275
298
  function_ptr=self.create_new_line)
276
299
 
277
300
  add_menu_entry(menu=menu,
278
- text="Move to API coordinates",
279
- icon_path="",
301
+ text="Set coordinates to DB",
302
+ icon_path=":/Icons/icons/down.svg",
280
303
  function_ptr=self.move_to_api_coordinates)
281
304
 
282
305
  add_menu_entry(menu=menu,
283
- text="Remove",
284
- icon_path="",
306
+ text="Remove from schematic",
307
+ icon_path=":/Icons/icons/delete_schematic.svg",
285
308
  function_ptr=self.remove_function)
286
309
 
287
- add_menu_entry(menu=menu,
288
- text="ADD node",
289
- icon_path=":/Icons/icons/divide.svg",
290
- function_ptr=self.add_function)
310
+ # add_menu_entry(menu=menu,
311
+ # text="ADD node",
312
+ # icon_path=":/Icons/icons/plus.svg",
313
+ # function_ptr=self.add_function)
291
314
 
292
315
  add_menu_entry(menu=menu,
293
316
  text="Show diagram",
294
- icon_path="",
317
+ icon_path=":/Icons/icons/grid_icon.svg",
295
318
  function_ptr=self.new_substation_diagram)
296
319
 
320
+ add_menu_entry(menu=menu,
321
+ text="Plot",
322
+ icon_path=":/Icons/icons/plot.svg",
323
+ function_ptr=self.plot)
324
+
297
325
  menu.exec_(event.screenPos())
298
326
 
299
327
  def create_new_line(self):
@@ -343,7 +371,7 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
343
371
  "Remove substation graphics")
344
372
 
345
373
  if ok:
346
- self.editor.removeSubstation(self)
374
+ self.editor.removeSubstation(substation=self)
347
375
 
348
376
  def move_to_api_coordinates(self):
349
377
  """
@@ -364,6 +392,13 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
364
392
  """
365
393
  self.editor.new_substation_diagram(substation=self.api_object)
366
394
 
395
+ def plot(self):
396
+ """
397
+ Plot the substations data
398
+ """
399
+ i = self.editor.circuit.get_substations().index(self.api_object)
400
+ self.editor.plot_substation(i, self.api_object)
401
+
367
402
  def add_voltage_level(self) -> None:
368
403
  """
369
404
  Add Voltage Level
@@ -392,9 +427,8 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
392
427
 
393
428
  self.editor.circuit.add_voltage_level(vl)
394
429
  self.editor.circuit.add_bus(obj=bus)
395
-
396
- self.editor.add_api_voltage_level(substation_graphics=self,
397
- api_object=vl)
430
+ self.editor.add_api_voltage_level(substation_graphics=self, api_object=vl)
431
+ self.sort_voltage_levels()
398
432
 
399
433
  def set_color(self, inner_color: QColor = None, border_color: QColor = None) -> None:
400
434
  """
@@ -433,14 +467,6 @@ class SubstationGraphicItem(QGraphicsRectItem, NodeTemplate):
433
467
 
434
468
  return center_point
435
469
 
436
- # def resize(self, new_radius: float) -> None:
437
- # """
438
- # Resize the node.
439
- # :param new_radius: New radius for the node.
440
- # """
441
- # self.radius = new_radius
442
- # self.setRect(self.x - new_radius, self.y - new_radius, new_radius * 2, new_radius * 2)
443
-
444
470
  def change_pen_width(self, width: float) -> None:
445
471
  """
446
472
  Change the pen width for the node.
@@ -26,7 +26,6 @@ from GridCal.Gui.gui_functions import add_menu_entry
26
26
 
27
27
  from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
28
28
  from GridCalEngine.Devices.Substation.bus import Bus
29
- from GridCalEngine.enumerations import DeviceType
30
29
 
31
30
  if TYPE_CHECKING: # Only imports the below statements during type checking
32
31
  from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
@@ -64,21 +63,25 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
64
63
  api_object=api_object,
65
64
  editor=editor,
66
65
  draw_labels=draw_labels)
67
- QGraphicsEllipseItem.__init__(self, parent_center.x(), parent_center.y(), r * api_object.Vnom * 0.01,
68
- r * api_object.Vnom * 0.01, parent)
66
+ QGraphicsEllipseItem.__init__(self,
67
+ parent_center.x(),
68
+ parent_center.y(),
69
+ r * api_object.Vnom * 0.01,
70
+ r * api_object.Vnom * 0.01,
71
+ parent)
69
72
 
70
73
  parent.register_voltage_level(vl=self)
71
74
 
72
75
  self.editor: GridMapWidget = editor # to reinforce the type
76
+
73
77
  self.api_object: VoltageLevel = api_object # to reinforce the type
74
78
 
75
79
  self.radius = r * api_object.Vnom * 0.01
76
- # print(f"VL created at x:{parent_center.x()}, y:{parent_center.y()}")
77
80
 
78
81
  self.setAcceptHoverEvents(True) # Enable hover events for the item
79
- # self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
80
- self.setFlag(
81
- self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable) # Allow selecting the node
82
+
83
+ # Allow moving the node
84
+ self.setFlag(self.GraphicsItemFlag.ItemIsSelectable | self.GraphicsItemFlag.ItemIsMovable)
82
85
 
83
86
  # Create a pen with reduced line width
84
87
  self.change_pen_width(0.5)
@@ -114,6 +117,26 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
114
117
  self.setRect(x, y, self.rect().width(), self.rect().height())
115
118
  return x, y
116
119
 
120
+ def set_size(self, r: float):
121
+ """
122
+
123
+ :param r: radius in pixels
124
+ :return:
125
+ """
126
+ # if r != self.radius:
127
+ rect = self.rect()
128
+ rect.setWidth(r)
129
+ rect.setHeight(r)
130
+ self.radius = r
131
+
132
+ # change the width and height while keeping the same center
133
+ r2 = r / 2
134
+ new_x = rect.x() - r2
135
+ new_y = rect.y() - r2
136
+
137
+ # Set the new rectangle with the updated dimensions
138
+ self.setRect(new_x, new_y, r, r)
139
+
117
140
  def updateDiagram(self) -> None:
118
141
  """
119
142
 
@@ -124,8 +147,6 @@ class VoltageLevelGraphicItem(GenericDiagramWidget, QGraphicsEllipseItem):
124
147
  lat, long = self.editor.to_lat_lon(x=center_point.x() + real_position.x(),
125
148
  y=center_point.y() + real_position.y())
126
149
 
127
- print(f'Updating VL position id:{self.api_object.idtag}, lat:{lat}, lon:{long}')
128
-
129
150
  self.editor.update_diagram_element(device=self.api_object,
130
151
  latitude=lat,
131
152
  longitude=long,
@@ -20,6 +20,9 @@ from typing import Union, List, Tuple, Dict, TYPE_CHECKING
20
20
  import json
21
21
  import numpy as np
22
22
  import math
23
+ import pandas as pd
24
+ from matplotlib import pyplot as plt
25
+
23
26
  from PySide6.QtWidgets import QGraphicsItem
24
27
  from collections.abc import Callable
25
28
  from PySide6.QtSvg import QSvgGenerator
@@ -40,9 +43,11 @@ from GridCalEngine.Devices.Substation.substation import Substation
40
43
  from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
41
44
  from GridCalEngine.Devices.Branches.line_locations import LineLocation
42
45
  from GridCalEngine.Devices.multi_circuit import MultiCircuit
43
- from GridCalEngine.enumerations import DeviceType
46
+ from GridCalEngine.enumerations import DeviceType, ResultTypes
44
47
  from GridCalEngine.Devices.types import ALL_DEV_TYPES
45
48
  from GridCalEngine.basic_structures import Logger
49
+ from GridCalEngine.Simulations.OPF.opf_ts_results import OptimalPowerFlowTimeSeriesResults
50
+ from GridCalEngine.Simulations.PowerFlow.power_flow_ts_results import PowerFlowTimeSeriesResults
46
51
 
47
52
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_ac_line import MapAcLine
48
53
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_dc_line import MapDcLine
@@ -57,7 +62,7 @@ import GridCal.Gui.Visualization.visualization as viz
57
62
  import GridCalEngine.Devices.Diagrams.palettes as palettes
58
63
  from GridCal.Gui.Diagrams.graphics_manager import ALL_MAP_GRAPHICS
59
64
  from GridCal.Gui.Diagrams.MapWidget.Tiles.tiles import Tiles
60
- from GridCal.Gui.Diagrams.base_diagram_widget import BaseDiagramWidget, qimage_to_cv
65
+ from GridCal.Gui.Diagrams.base_diagram_widget import BaseDiagramWidget
61
66
  from GridCal.Gui.messages import error_msg
62
67
 
63
68
  if TYPE_CHECKING:
@@ -870,10 +875,9 @@ class GridMapWidget(BaseDiagramWidget):
870
875
  """
871
876
 
872
877
  # SANTIAGO: NO TOCAR ESTO ES EL COMPORTAMIENTO DESEADO
873
-
874
878
  self.update_device_sizes()
875
879
 
876
- def update_device_sizes(self):
880
+ def get_branch_width(self):
877
881
  """
878
882
 
879
883
  :return:
@@ -882,6 +886,13 @@ class GridMapWidget(BaseDiagramWidget):
882
886
  min_zoom = self.map.min_level
883
887
  zoom = self.map.zoom_factor
884
888
  scale = self.diagram.min_branch_width + (zoom - min_zoom) / (max_zoom - min_zoom)
889
+ return scale
890
+
891
+ def update_device_sizes(self):
892
+ """
893
+
894
+ :return:
895
+ """
885
896
 
886
897
  # rescale lines
887
898
  for dev_tpe in [DeviceType.LineDevice,
@@ -889,14 +900,14 @@ class GridMapWidget(BaseDiagramWidget):
889
900
  DeviceType.HVDCLineDevice,
890
901
  DeviceType.FluidPathDevice]:
891
902
  graphics_dict = self.graphics_manager.get_device_type_dict(device_type=dev_tpe)
892
- for key, lne in graphics_dict.items():
893
- lne.set_width_scale(scale)
903
+ for key, elm_graphics in graphics_dict.items():
904
+ elm_graphics.set_width_scale(self.get_branch_width())
894
905
 
895
906
  # rescale substations
896
907
  data: Dict[str, SubstationGraphicItem] = self.graphics_manager.get_device_type_dict(DeviceType.SubstationDevice)
897
- for se_key, se in data.items():
898
- se.set_api_object_color()
899
- se.set_size(r=self.diagram.min_bus_width)
908
+ for se_key, elm_graphics in data.items():
909
+ elm_graphics.set_api_object_color()
910
+ elm_graphics.set_size(r=self.diagram.min_bus_width)
900
911
 
901
912
  def change_size_and_pen_width_all(self, new_radius, pen_width):
902
913
  """
@@ -1070,9 +1081,10 @@ class GridMapWidget(BaseDiagramWidget):
1070
1081
  weight = int(
1071
1082
  np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
1072
1083
  else:
1073
- weight = 0.5
1084
+ weight = self.get_branch_width()
1074
1085
 
1075
- graphic_object.set_colour(color=color, w=weight, style=style, tool_tip=tooltip)
1086
+ graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
1087
+ graphic_object.set_width_scale(weight)
1076
1088
 
1077
1089
  if hasattr(graphic_object, 'set_arrows_with_power'):
1078
1090
  graphic_object.set_arrows_with_power(
@@ -1130,7 +1142,7 @@ class GridMapWidget(BaseDiagramWidget):
1130
1142
  weight = int(
1131
1143
  np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width) * 0.1))
1132
1144
  else:
1133
- weight = 0.5
1145
+ weight = self.get_branch_width()
1134
1146
 
1135
1147
  tooltip = str(i) + ': ' + graphic_object.api_object.name
1136
1148
  tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
@@ -1145,7 +1157,8 @@ class GridMapWidget(BaseDiagramWidget):
1145
1157
  else:
1146
1158
  graphic_object.set_arrows_with_hvdc_power(Pf=hvdc_Pf[i], Pt=-hvdc_Pf[i])
1147
1159
 
1148
- graphic_object.set_colour(color=color, w=weight, style=style, tool_tip=tooltip)
1160
+ graphic_object.set_colour(color=color, style=style, tool_tip=tooltip)
1161
+ graphic_object.set_width_scale(weight)
1149
1162
 
1150
1163
  def get_image(self, transparent: bool = False) -> QImage:
1151
1164
  """
@@ -1213,6 +1226,7 @@ class GridMapWidget(BaseDiagramWidget):
1213
1226
  logger=self.logger)
1214
1227
 
1215
1228
  return GridMapWidget(
1229
+ gui=self.gui,
1216
1230
  tile_src=self.map.tile_src,
1217
1231
  start_level=self.diagram.start_level,
1218
1232
  longitude=self.diagram.longitude,
@@ -1233,6 +1247,80 @@ class GridMapWidget(BaseDiagramWidget):
1233
1247
  gelm.api_object.latitude = gelm.lat
1234
1248
  gelm.api_object.longitude = gelm.lon
1235
1249
 
1250
+ def plot_substation(self, i: int, api_object: Substation):
1251
+ """
1252
+ Plot branch results
1253
+ :param i: bus index
1254
+ :param api_object: Substation API object
1255
+ :return:
1256
+ """
1257
+
1258
+ fig = plt.figure(figsize=(12, 8))
1259
+ ax_1 = fig.add_subplot(211)
1260
+ ax_1.set_title('Power', fontsize=14)
1261
+ ax_1.set_ylabel('Injections [MW]', fontsize=11)
1262
+
1263
+ ax_2 = fig.add_subplot(212, sharex=ax_1)
1264
+ ax_2.set_title('Time', fontsize=14)
1265
+ ax_2.set_ylabel('Voltage [p.u]', fontsize=11)
1266
+
1267
+ # set time
1268
+ x = self.circuit.get_time_array()
1269
+
1270
+ if x is not None:
1271
+ if len(x) > 0:
1272
+
1273
+ # Get all devices grouped by bus
1274
+ all_data = self.circuit.get_injection_devices_grouped_by_substation()
1275
+
1276
+ # search drivers for voltage data
1277
+ for driver, results in self.gui.session.drivers_results_iter():
1278
+ if results is not None:
1279
+ if isinstance(results, PowerFlowTimeSeriesResults):
1280
+ table = results.mdl(result_type=ResultTypes.BusVoltageModule)
1281
+ table.plot_device(ax=ax_2, device_idx=i)
1282
+ elif isinstance(results, OptimalPowerFlowTimeSeriesResults):
1283
+ table = results.mdl(result_type=ResultTypes.BusVoltageModule)
1284
+ table.plot_device(ax=ax_2, device_idx=i)
1285
+
1286
+ # Injections
1287
+ # filter injections by bus
1288
+ bus_devices = all_data.get(api_object, None)
1289
+ if bus_devices:
1290
+
1291
+ power_data = dict()
1292
+ for tpe_name, devices in bus_devices.items():
1293
+ for device in devices:
1294
+ if device.device_type == DeviceType.LoadDevice:
1295
+ power_data[device.name] = -device.P_prof.toarray()
1296
+ elif device.device_type == DeviceType.GeneratorDevice:
1297
+ power_data[device.name] = device.P_prof.toarray()
1298
+ elif device.device_type == DeviceType.ShuntDevice:
1299
+ power_data[device.name] = -device.G_prof.toarray()
1300
+ elif device.device_type == DeviceType.StaticGeneratorDevice:
1301
+ power_data[device.name] = device.P_prof.toarray()
1302
+ elif device.device_type == DeviceType.ExternalGridDevice:
1303
+ power_data[device.name] = device.P_prof.toarray()
1304
+ elif device.device_type == DeviceType.BatteryDevice:
1305
+ power_data[device.name] = device.P_prof.toarray()
1306
+ else:
1307
+ raise Exception("Missing shunt device for plotting")
1308
+
1309
+ df = pd.DataFrame(data=power_data, index=x)
1310
+
1311
+ try:
1312
+ # yt area plots
1313
+ df.plot.area(ax=ax_1)
1314
+ except ValueError:
1315
+ # use regular plots
1316
+ df.plot(ax=ax_1)
1317
+
1318
+ plt.legend()
1319
+ fig.suptitle(api_object.name, fontsize=20)
1320
+
1321
+ # plot the profiles
1322
+ plt.show()
1323
+
1236
1324
 
1237
1325
  def generate_map_diagram(substations: List[Substation],
1238
1326
  voltage_levels: List[VoltageLevel],
@@ -124,7 +124,7 @@ class MapView(QGraphicsView):
124
124
  # Create a QGraphicsProxyWidget for the QLabel
125
125
  self.label_proxy_widget = QGraphicsProxyWidget()
126
126
  self.label_proxy_widget.setWidget(self.attribution_label)
127
- self.label_proxy_widget.setFlag(QGraphicsItem.ItemIgnoresTransformations)
127
+ self.label_proxy_widget.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIgnoresTransformations)
128
128
  self.update_label_position()
129
129
 
130
130
  # Add the proxy widget to the scene
@@ -150,6 +150,8 @@ class MapView(QGraphicsView):
150
150
 
151
151
  self.scale(initial_zoom_factor, initial_zoom_factor)
152
152
 
153
+ self.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform)
154
+
153
155
  def set_notice(self, val: str):
154
156
  """
155
157
 
@@ -452,87 +452,6 @@ class BusGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
452
452
  icon_path=":/Icons/icons/plot.svg",
453
453
  function_ptr=self.plot_profiles)
454
454
 
455
-
456
- # arr = menu.addAction('Arrange')
457
- # arr_icon = QIcon()
458
- # arr_icon.addPixmap(QPixmap(":/Icons/icons/automatic_layout.svg"))
459
- # arr.setIcon(arr_icon)
460
- # arr.triggered.connect(self.arrange_children)
461
- #
462
- # ra5 = menu.addAction('Assign active state to profile')
463
- # ra5_icon = QIcon()
464
- # ra5_icon.addPixmap(QPixmap(":/Icons/icons/assign_to_profile.svg"))
465
- # ra5.setIcon(ra5_icon)
466
- # ra5.triggered.connect(self.assign_status_to_profile)
467
- #
468
- # ra3 = menu.addAction('Delete all the connections')
469
- # del2_icon = QIcon()
470
- # del2_icon.addPixmap(QPixmap(":/Icons/icons/delete_conn.svg"))
471
- # ra3.setIcon(del2_icon)
472
- # ra3.triggered.connect(self.delete_all_connections)
473
- #
474
- # da = menu.addAction('Delete')
475
- # del_icon = QIcon()
476
- # del_icon.addPixmap(QPixmap(":/Icons/icons/delete_db.svg"))
477
- # da.setIcon(del_icon)
478
- # da.triggered.connect(self.remove)
479
- #
480
- # re = menu.addAction('Expand schematic')
481
- # re_icon = QIcon()
482
- # re_icon.addPixmap(QPixmap(":/Icons/icons/grid_icon.svg"))
483
- # re.setIcon(re_icon)
484
- # re.triggered.connect(self.expand_diagram_from_bus)
485
- #
486
- # menu.addSection("Add")
487
- #
488
- # al = menu.addAction('Load')
489
- # al_icon = QIcon()
490
- # al_icon.addPixmap(QPixmap(":/Icons/icons/add_load.svg"))
491
- # al.setIcon(al_icon)
492
- # al.triggered.connect(self.add_load)
493
- #
494
- # ac_i = menu.addAction('Current injection')
495
- # ac_i_icon = QIcon()
496
- # ac_i_icon.addPixmap(QPixmap(":/Icons/icons/add_load.svg"))
497
- # ac_i.setIcon(ac_i_icon)
498
- # ac_i.triggered.connect(self.add_current_injection)
499
- #
500
- # ash = menu.addAction('Shunt')
501
- # ash_icon = QIcon()
502
- # ash_icon.addPixmap(QPixmap(":/Icons/icons/add_shunt.svg"))
503
- # ash.setIcon(ash_icon)
504
- # ash.triggered.connect(self.add_shunt)
505
- #
506
- # acsh = menu.addAction('Controllable shunt')
507
- # acsh_icon = QIcon()
508
- # acsh_icon.addPixmap(QPixmap(":/Icons/icons/add_shunt.svg"))
509
- # acsh.setIcon(acsh_icon)
510
- # acsh.triggered.connect(self.add_controllable_shunt)
511
- #
512
- # acg = menu.addAction('Generator')
513
- # acg_icon = QIcon()
514
- # acg_icon.addPixmap(QPixmap(":/Icons/icons/add_gen.svg"))
515
- # acg.setIcon(acg_icon)
516
- # acg.triggered.connect(self.add_generator)
517
- #
518
- # asg = menu.addAction('Static generator')
519
- # asg_icon = QIcon()
520
- # asg_icon.addPixmap(QPixmap(":/Icons/icons/add_stagen.svg"))
521
- # asg.setIcon(asg_icon)
522
- # asg.triggered.connect(self.add_static_generator)
523
- #
524
- # ab = menu.addAction('Battery')
525
- # ab_icon = QIcon()
526
- # ab_icon.addPixmap(QPixmap(":/Icons/icons/add_batt.svg"))
527
- # ab.setIcon(ab_icon)
528
- # ab.triggered.connect(self.add_battery)
529
- #
530
- # aeg = menu.addAction('External grid')
531
- # aeg_icon = QIcon()
532
- # aeg_icon.addPixmap(QPixmap(":/Icons/icons/add_external_grid.svg"))
533
- # aeg.setIcon(aeg_icon)
534
- # aeg.triggered.connect(self.add_external_grid)
535
-
536
455
  add_menu_entry(menu,
537
456
  text='Arrange',
538
457
  icon_path=":/Icons/icons/automatic_layout.svg",
@@ -53,7 +53,8 @@ from GridCalEngine.Devices.Injections.generator import Generator
53
53
  from GridCalEngine.Devices.Fluid import FluidNode, FluidPath
54
54
  from GridCalEngine.Devices.Diagrams.schematic_diagram import SchematicDiagram
55
55
  from GridCalEngine.Devices.Diagrams.graphic_location import GraphicLocation
56
- from GridCalEngine.Simulations import PowerFlowTimeSeriesResults
56
+ from GridCalEngine.Simulations.OPF.opf_ts_results import OptimalPowerFlowTimeSeriesResults
57
+ from GridCalEngine.Simulations.PowerFlow.power_flow_ts_results import PowerFlowTimeSeriesResults
57
58
  from GridCalEngine.enumerations import DeviceType, ResultTypes
58
59
  from GridCalEngine.basic_structures import Vec, CxVec, IntVec, Logger
59
60
 
@@ -3736,7 +3737,10 @@ class SchematicWidget(BaseDiagramWidget):
3736
3737
  if results is not None:
3737
3738
  if isinstance(results, PowerFlowTimeSeriesResults):
3738
3739
  table = results.mdl(result_type=ResultTypes.BusVoltageModule)
3739
- table.plot(ax=ax_2, selected_col_idx=[i])
3740
+ table.plot_device(ax=ax_2, device_idx=i)
3741
+ elif isinstance(results, OptimalPowerFlowTimeSeriesResults):
3742
+ table = results.mdl(result_type=ResultTypes.BusVoltageModule)
3743
+ table.plot_device(ax=ax_2, device_idx=i)
3740
3744
 
3741
3745
  # Injections
3742
3746
  # filter injections by bus