GridCal 5.4.0b1__tar.gz → 5.4.0b2__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 (291) hide show
  1. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +60 -24
  2. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +422 -3
  3. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/base_diagram_widget.py +52 -0
  4. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/grid_reduce.py +5 -13
  5. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +86 -35
  6. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/simulations.py +11 -11
  7. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/icons_rc.py +3 -3
  8. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/__version__.py +1 -1
  9. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/PKG-INFO +1 -1
  10. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ExecuteGridCal.py +0 -0
  11. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  12. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  13. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  14. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  15. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  16. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  17. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/__init__.py +0 -0
  18. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/gui.py +0 -0
  19. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  20. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
  21. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  22. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  23. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  24. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  25. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  26. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  27. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  28. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  29. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  30. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  31. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  32. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
  33. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
  34. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
  35. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
  36. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
  37. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
  38. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
  39. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
  40. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  41. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
  42. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
  43. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
  44. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
  45. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
  46. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
  47. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
  48. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  49. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
  50. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
  51. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
  52. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
  53. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
  54. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
  55. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  56. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
  57. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  58. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  59. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  60. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  61. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  62. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  63. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
  64. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
  65. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
  66. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  67. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  68. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  69. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  70. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  71. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  72. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  73. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  74. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  75. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  76. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  77. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
  78. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  79. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  80. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  81. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  82. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  83. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
  84. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  85. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  86. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  87. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  88. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  89. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  90. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  91. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  92. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  93. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
  94. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  95. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
  96. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  97. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/__init__.py +0 -0
  98. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  99. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
  100. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  101. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  102. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  103. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/gui.py +0 -0
  104. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  105. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  106. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/__init__.py +0 -0
  107. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
  108. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
  109. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
  110. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
  111. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
  112. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
  113. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/__init__.py +0 -0
  114. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/grid_reduce_gui.py +0 -0
  115. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/update_gui_file.py +0 -0
  116. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
  117. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
  118. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
  119. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
  120. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
  121. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  122. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  123. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  124. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  125. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  126. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  127. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  128. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/GridCalMain.py +0 -0
  129. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/MainWindow.py +0 -0
  130. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  131. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  132. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/data_base.py +0 -0
  133. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  134. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  135. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  136. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  137. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  138. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  139. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
  140. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  141. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  142. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  143. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  144. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  145. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/io.py +0 -0
  146. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/__init__.py +0 -0
  147. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/object_select_window.py +0 -0
  148. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/update_gui_file.py +0 -0
  149. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  150. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  151. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  152. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  153. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  154. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  155. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  156. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  157. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  158. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  159. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  160. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  161. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  162. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
  163. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  164. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  165. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  166. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  167. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  168. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  169. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  170. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  171. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  172. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  173. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  174. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
  175. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
  176. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
  177. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
  178. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  179. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  180. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  181. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  182. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  183. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  184. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  185. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  186. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  187. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  188. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  189. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  190. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  191. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  192. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
  193. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  194. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  195. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  196. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  197. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  198. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  199. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Visualization/__init__.py +0 -0
  200. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Visualization/visualization.py +0 -0
  201. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/__init__.py +0 -0
  202. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  203. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  204. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  205. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  206. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  207. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  208. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  209. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/__init__.py +0 -0
  210. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/associations_model.py +0 -0
  211. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/general_dialogues.py +0 -0
  212. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/gui_functions.py +0 -0
  213. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/messages.py +0 -0
  214. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/object_model.py +0 -0
  215. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/object_proxy_model.py +0 -0
  216. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/pandas_model.py +0 -0
  217. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/plot_config.py +0 -0
  218. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/profiles_model.py +0 -0
  219. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/python_console.py +0 -0
  220. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/python_highlighter.py +0 -0
  221. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/results_model.py +0 -0
  222. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/table_view_header_wrap.py +0 -0
  223. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/themes.py +0 -0
  224. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/toast_widget.py +0 -0
  225. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/update_gui_all.py +0 -0
  226. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/update_gui_common.py +0 -0
  227. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/wrappable_table_model.py +0 -0
  228. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/LICENSE.txt +0 -0
  229. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/__init__.py +0 -0
  230. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/export_results_driver.py +0 -0
  231. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/file_handler.py +0 -0
  232. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/server_driver.py +0 -0
  233. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/session.py +0 -0
  234. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/synchronization_driver.py +0 -0
  235. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/__init__.py +0 -0
  236. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
  237. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
  238. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
  239. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
  240. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
  241. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  242. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  243. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
  244. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  245. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  246. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  247. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  248. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  249. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  250. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  251. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  252. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  253. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  254. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  255. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  256. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  257. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  258. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  259. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
  260. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  261. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  262. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  263. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  264. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  265. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  266. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  267. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  268. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  269. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  270. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  271. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  272. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  273. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  274. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  275. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  276. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  277. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  278. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  279. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/__init__.py +0 -0
  280. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/GridCal.ico +0 -0
  281. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/GridCal.svg +0 -0
  282. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/__init__.py +0 -0
  283. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/cables.csv +0 -0
  284. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/sequence_lines.csv +0 -0
  285. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/transformers.csv +0 -0
  286. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/wires.csv +0 -0
  287. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/plugins.py +0 -0
  288. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/templates.py +0 -0
  289. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/update.py +0 -0
  290. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/setup.cfg +0 -0
  291. {gridcal-5.4.0b1 → gridcal-5.4.0b2}/setup.py +0 -0
@@ -963,32 +963,68 @@ class BusGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
963
963
  msg += f" [{tpe}]"
964
964
  msg += "<br>"
965
965
 
966
- if isinstance(Vm, float) and isinstance(Va, float):
967
- vm = format_str.format(Vm)
968
- vm_kv = format_str.format(Vm * self._api_object.Vnom)
969
- va = format_str.format(Va)
970
- msg += f"V={vm_kv} KV<br> {vm}&lt;{va}º p.u.<br>"
971
- # msg += f"V={vm_kv} KV<br>"
972
-
973
- elif isinstance(Vm, np.ndarray) and isinstance(Va, np.ndarray):
974
- for Vm_i, Va_i, ph in zip(Vm, Va, ["a", "b", "c"]):
975
- if not (Vm_i == 0.0 and Va_i == 0.0):
976
- vm = format_str.format(Vm_i)
977
- vm_kv = format_str.format(Vm_i * self._api_object.Vnom)
978
- va = format_str.format(Va_i)
979
- msg += f"V{ph}={vm_kv} KV / {vm}&lt;{va}º p.u.<br>"
966
+ vm = format_str.format(Vm)
967
+ vm_kv = format_str.format(Vm * self._api_object.Vnom)
968
+ va = format_str.format(Va)
969
+ msg += f"V={vm_kv} KV<br> {vm}&lt;{va}º p.u.<br>"
980
970
 
981
971
  if P is not None:
982
- if isinstance(P, float) and isinstance(Q, float):
983
- p = format_str.format(P)
984
- q = format_str.format(Q)
985
- msg += f"P={p} MW<br>Q={q} MVAr"
986
- elif isinstance(P, np.ndarray) and isinstance(Q, np.ndarray):
987
- for P_i, Q_i, ph in zip(P, Q, ["a", "b", "c"]):
988
- if not (P_i == 0.0 and Q_i == 0.0):
989
- p = format_str.format(P_i)
990
- q = format_str.format(Q_i)
991
- msg += f"P{ph}={p} MW<br>Q{ph}={q} MVAr<br>"
972
+ p = format_str.format(P)
973
+ q = format_str.format(Q)
974
+ msg += f"P={p} MW<br>Q={q} MVAr"
975
+
976
+ else:
977
+ msg = ""
978
+
979
+ title = self._api_object.name if self._api_object is not None else ""
980
+ self.label.setHtml(f'<html><head/><body><p><span style=" font-size:10pt;">{title}<br/></span>'
981
+ f'<span style=" font-size:6pt;">{msg}</span></p></body></html>')
982
+
983
+ self.setToolTip(msg)
984
+
985
+ def set_values_3ph(self, i: int,
986
+ VmA: float, VmB: float, VmC: float,
987
+ VaA: float, VaB: float, VaC: float,
988
+ PA: float, PB: float, PC: float,
989
+ QA: float, QB: float, QC: float,
990
+ tpe: str, format_str="{:10.2f}"):
991
+ """
992
+ Set three phase tags
993
+ :param i: Bus index
994
+ :param VmA:
995
+ :param VmB:
996
+ :param VmC:
997
+ :param VaA:
998
+ :param VaB:
999
+ :param VaC:
1000
+ :param PA:
1001
+ :param PB:
1002
+ :param PC:
1003
+ :param QA:
1004
+ :param QB:
1005
+ :param QC:
1006
+ :param tpe: Bus type
1007
+ :param format_str: number formatting string
1008
+ """
1009
+ if self.draw_labels:
1010
+
1011
+ msg = f"Bus {i}"
1012
+ if tpe is not None:
1013
+ msg += f" [{tpe}]"
1014
+ msg += "<br>"
1015
+
1016
+ for Vm_i, Va_i, ph in zip([VmA, VmB, VmC], [VaA, VaB, VaC], ["a", "b", "c"]):
1017
+ if not (Vm_i == 0.0 and Va_i == 0.0):
1018
+ vm = format_str.format(Vm_i)
1019
+ vm_kv = format_str.format(Vm_i * self._api_object.Vnom)
1020
+ va = format_str.format(Va_i)
1021
+ msg += f"V{ph}={vm_kv} KV / {vm}&lt;{va}º p.u.<br>"
1022
+
1023
+ for P_i, Q_i, ph in zip([PA, PB, PC], [QA, QB, QC], ["a", "b", "c"]):
1024
+ if not (P_i == 0.0 and Q_i == 0.0):
1025
+ p = format_str.format(P_i)
1026
+ q = format_str.format(Q_i)
1027
+ msg += f"P{ph}={p} MW<br>Q{ph}={q} MVAr<br>"
992
1028
 
993
1029
  else:
994
1030
  msg = ""
@@ -1676,7 +1676,7 @@ class SchematicWidget(BaseDiagramWidget):
1676
1676
  image.fill(QColor(0, 0, 0, 0)) # transparent
1677
1677
  else:
1678
1678
  image = QImage(w, h, QImage.Format.Format_RGB32)
1679
- image.fill(ACTIVE['backgound'])
1679
+ image.fill(ACTIVE.get('background', QColor(0, 0, 0, 0)))
1680
1680
 
1681
1681
  painter = QPainter(image)
1682
1682
  painter.setRenderHint(QPainter.RenderHint.Antialiasing)
@@ -2918,7 +2918,7 @@ class SchematicWidget(BaseDiagramWidget):
2918
2918
  max_flow = 1
2919
2919
  ph = np.array([0, 1, 2])
2920
2920
 
2921
- if (nbus == len(vnorm) and not is_three_phase) or (3 * nbus == len(vnorm) and is_three_phase):
2921
+ if nbus == len(vnorm):
2922
2922
  for i, bus in enumerate(self.circuit.buses):
2923
2923
 
2924
2924
  # try to find the diagram object of the DB object
@@ -2978,7 +2978,6 @@ class SchematicWidget(BaseDiagramWidget):
2978
2978
  else:
2979
2979
  error_msg("Bus results length differs from the number of Bus results. \n"
2980
2980
  "Did you change the number of devices? If so, re-run the simulation.")
2981
- return
2982
2981
 
2983
2982
  # color Branches
2984
2983
  if Sf is not None:
@@ -3317,6 +3316,426 @@ class SchematicWidget(BaseDiagramWidget):
3317
3316
  fluid_node_flow_out=fluid_node_flow_out[i] if fluid_node_flow_out is not None else None,
3318
3317
  )
3319
3318
 
3319
+ def colour_results_3ph(self,
3320
+ SbusA: CxVec,
3321
+ SbusB: CxVec,
3322
+ SbusC: CxVec,
3323
+ voltagesA: CxVec,
3324
+ voltagesB: CxVec,
3325
+ voltagesC: CxVec,
3326
+ bus_active: IntVec,
3327
+ types: IntVec,
3328
+ SfA: CxVec,
3329
+ SfB: CxVec,
3330
+ SfC: CxVec,
3331
+ StA: CxVec,
3332
+ StB: CxVec,
3333
+ StC: CxVec,
3334
+ loadingsA: CxVec,
3335
+ loadingsB: CxVec,
3336
+ loadingsC: CxVec,
3337
+ lossesA: CxVec,
3338
+ lossesB: CxVec,
3339
+ lossesC: CxVec,
3340
+ br_active: IntVec,
3341
+ ma: Vec,
3342
+ tau: Vec,
3343
+ hvdc_PfA: Vec,
3344
+ hvdc_PfB: Vec,
3345
+ hvdc_PfC: Vec,
3346
+ hvdc_PtA: Vec,
3347
+ hvdc_PtB: Vec,
3348
+ hvdc_PtC: Vec,
3349
+ hvdc_losses: Vec,
3350
+ hvdc_loading: Vec,
3351
+ hvdc_active: IntVec,
3352
+ vsc_Pf: Vec,
3353
+ vsc_PtA: Vec,
3354
+ vsc_PtB: Vec,
3355
+ vsc_PtC: Vec,
3356
+ vsc_QtA: Vec,
3357
+ vsc_QtB: Vec,
3358
+ vsc_QtC: Vec,
3359
+ vsc_losses: Vec,
3360
+ vsc_loading: Vec,
3361
+ vsc_active: IntVec,
3362
+ loading_label: str = 'loading',
3363
+ use_flow_based_width: bool = False,
3364
+ min_branch_width: int = 5,
3365
+ max_branch_width=5,
3366
+ min_bus_width=20,
3367
+ max_bus_width=20,
3368
+ cmap: palettes.Colormaps = None):
3369
+ """
3370
+ Color objects based on the results passed
3371
+ :param Sbus: Buses power (MVA)
3372
+ :param bus_active: Bus active status
3373
+ :param Sf: Branches power from the "from" bus (MVA)
3374
+ :param St: Branches power from the "to" bus (MVA)
3375
+ :param voltages: Buses voltage
3376
+ :param loadings: Branches load (%)
3377
+ :param types: Buses type [PQ: 1, PV: 2, REF: 3, NONE: 4, STO_DISPATCH: 5, PVB: 6]
3378
+ :param losses: Branches losses [%]
3379
+ :param br_active: Branches active status
3380
+ :param hvdc_Pf: HVDC branch flows "from" [MW]
3381
+ :param hvdc_Pt: HVDC branch flows "to" [MW]
3382
+ :param hvdc_losses: HVDC branch losses [MW]
3383
+ :param hvdc_loading: HVDC Branch loading [%]
3384
+ :param hvdc_active: HVDC Branch status
3385
+ :param vsc_Pf: VSC branch flows "from" [MW]
3386
+ :param vsc_Pt: VSC branch flows "to" [MW]
3387
+ :param vsc_Qt: VSC branch flows "to" [Mvar]
3388
+ :param vsc_losses: VSC branch losses [MW]
3389
+ :param vsc_loading: VSC Branch loading [%]
3390
+ :param vsc_active: VSC Branch status
3391
+ :param loading_label: String saying whatever the loading label means
3392
+ :param ma: branch phase shift angle (rad)
3393
+ :param tau: branch tap module (p.u.)
3394
+ :param use_flow_based_width: use branch width based on the actual flow?
3395
+ :param min_branch_width: Minimum branch width [px]
3396
+ :param max_branch_width: Maximum branch width [px]
3397
+ :param min_bus_width: Minimum bus width [px]
3398
+ :param max_bus_width: Maximum bus width [px]
3399
+ :param cmap: Color map [palettes.Colormaps]
3400
+ """
3401
+
3402
+ # color nodes
3403
+ vmin = 0
3404
+ vmax = 1.2
3405
+ vrng = vmax - vmin
3406
+ VmA = np.abs(voltagesA)
3407
+ VmB = np.abs(voltagesB)
3408
+ VmC = np.abs(voltagesC)
3409
+ VaA = np.angle(voltagesA, deg=True)
3410
+ VaB = np.angle(voltagesB, deg=True)
3411
+ VaC = np.angle(voltagesC, deg=True)
3412
+ vnorm = (VmA - vmin) / vrng
3413
+ nbus = self.circuit.get_bus_number()
3414
+ nbr = self.circuit.get_branch_number(add_vsc=False, add_hvdc=False, add_switch=True)
3415
+
3416
+ voltage_cmap = viz.get_voltage_color_map()
3417
+ loading_cmap = viz.get_loading_color_map()
3418
+
3419
+ """
3420
+ class BusMode(Enum):
3421
+ PQ = 1,
3422
+ PV = 2,
3423
+ REF = 3,
3424
+ NONE = 4,
3425
+ STO_DISPATCH = 5
3426
+ PVB = 6
3427
+ """
3428
+
3429
+ bus_types = ['', 'PQ', 'PV', 'Slack', 'PQV', 'P']
3430
+ max_flow = 1
3431
+ ph = np.array([0, 1, 2])
3432
+
3433
+ if nbus == len(vnorm):
3434
+ for i, bus in enumerate(self.circuit.buses):
3435
+
3436
+ # try to find the diagram object of the DB object
3437
+ graphic_object: BusGraphicItem = self.graphics_manager.query(bus)
3438
+
3439
+ if graphic_object is not None:
3440
+ if bus_active[i]:
3441
+
3442
+ graphic_object.set_values_3ph(i=i,
3443
+ VmA=VmA[i], VmB=VmB[i], VmC=VmC[i],
3444
+ VaA=VaA[i], VaB=VaB[i], VaC=VaC[i],
3445
+ PA=SbusA[i].real, PB=SbusB[i].real, PC=SbusC[i].real,
3446
+ QA=SbusA[i].imag, QB=SbusB[i].imag, QC=SbusC[i].imag,
3447
+ tpe=bus_types[int(types[i])])
3448
+
3449
+ v_to_colour = vnorm[i]
3450
+
3451
+ a = 255
3452
+ if cmap == palettes.Colormaps.Green2Red:
3453
+ b, g, r = palettes.green_to_red_bgr(v_to_colour)
3454
+
3455
+ elif cmap == palettes.Colormaps.Heatmap:
3456
+ b, g, r = palettes.heatmap_palette_bgr(v_to_colour)
3457
+
3458
+ elif cmap == palettes.Colormaps.TSO:
3459
+ b, g, r = palettes.tso_substation_palette_bgr(v_to_colour)
3460
+
3461
+ else:
3462
+ r, g, b, a = voltage_cmap(v_to_colour)
3463
+ r *= 255
3464
+ g *= 255
3465
+ b *= 255
3466
+ a *= 255
3467
+
3468
+ graphic_object.set_tile_color(QColor(r, g, b, a))
3469
+
3470
+ if use_flow_based_width:
3471
+ graphic_object.change_size(w=graphic_object.w)
3472
+
3473
+ else:
3474
+ graphic_object.set_tile_color(QColor(115, 115, 115, 255)) # gray
3475
+ graphic_object.clear_label()
3476
+ else:
3477
+ pass # the graphic is None
3478
+
3479
+ else:
3480
+ error_msg("Bus results length differs from the number of Bus results. \n"
3481
+ "Did you change the number of devices? If so, re-run the simulation.")
3482
+
3483
+ # color Branches
3484
+ if len(SfA) > 0:
3485
+ lnormA = np.abs(loadingsA)
3486
+ lnormA[lnormA == np.inf] = 0
3487
+ SfA_abs = np.abs(SfA)
3488
+
3489
+ lnormB = np.abs(loadingsB)
3490
+ lnormB[lnormB == np.inf] = 0
3491
+ SfB_abs = np.abs(SfB)
3492
+
3493
+ lnormC = np.abs(loadingsC)
3494
+ lnormC[lnormC == np.inf] = 0
3495
+ SfC_abs = np.abs(SfC)
3496
+
3497
+ max_flow = np.max([SfA_abs.max(), SfB_abs.max(), SfC_abs.max(),
3498
+ np.abs(hvdc_PfA).max(), np.abs(hvdc_PfB).max(), np.abs(hvdc_PfC).max()])
3499
+
3500
+ if max_flow != 0:
3501
+ Sfnorm = np.maximum(np.maximum(SfA_abs, SfB_abs), SfC_abs) / max_flow
3502
+ else:
3503
+ Sfnorm = np.maximum(np.maximum(SfA_abs, SfB_abs), SfC_abs)
3504
+
3505
+ for i, branch in enumerate(self.circuit.get_branches_iter(add_vsc=False,
3506
+ add_hvdc=False,
3507
+ add_switch=True)):
3508
+
3509
+ # try to find the diagram object of the DB object
3510
+ graphic_object: BRANCH_GRAPHICS = self.graphics_manager.query(branch)
3511
+
3512
+ if graphic_object is not None:
3513
+
3514
+ if br_active[i]:
3515
+
3516
+ l_color_val = lnormA[i]
3517
+ tooltip = str(i) + ': ' + branch.name
3518
+ tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(lnormA[i] * 100) + ' [%]'
3519
+
3520
+ tooltip += '\nPower A (from):\t' + "{:10.4f}".format(SfA[i]) + ' [MVA]'
3521
+ tooltip += '\nPower B (from):\t' + "{:10.4f}".format(SfB[i]) + ' [MVA]'
3522
+ tooltip += '\nPower C (from):\t' + "{:10.4f}".format(SfC[i]) + ' [MVA]'
3523
+
3524
+ tooltip += '\nPower A (to):\t' + "{:10.4f}".format(StA[i]) + ' [MVA]'
3525
+ tooltip += '\nPower B (to):\t' + "{:10.4f}".format(StB[i]) + ' [MVA]'
3526
+ tooltip += '\nPower C (to):\t' + "{:10.4f}".format(StC[i]) + ' [MVA]'
3527
+
3528
+ tooltip += '\nLoss A:\t\t' + "{:10.4f}".format(lossesA[i]) + ' [MVA]'
3529
+ tooltip += '\nLoss B:\t\t' + "{:10.4f}".format(lossesB[i]) + ' [MVA]'
3530
+ tooltip += '\nLoss C:\t\t' + "{:10.4f}".format(lossesC[i]) + ' [MVA]'
3531
+
3532
+ if branch.device_type == DeviceType.Transformer2WDevice:
3533
+ tooltip += '\ntap module:\t' + "{:10.4f}".format(ma[i])
3534
+ tooltip += '\ntap angle:\t' + "{:10.4f}".format(tau[i]) + ' rad'
3535
+
3536
+ if use_flow_based_width:
3537
+ w = int((np.floor(min_branch_width + Sfnorm[i] * (max_branch_width - min_branch_width))))
3538
+ else:
3539
+ w = graphic_object.pen_width
3540
+
3541
+ style = Qt.PenStyle.SolidLine
3542
+
3543
+ a = 255
3544
+ if cmap == palettes.Colormaps.Green2Red:
3545
+ b, g, r = palettes.green_to_red_bgr(l_color_val)
3546
+
3547
+ elif cmap == palettes.Colormaps.Heatmap:
3548
+ b, g, r = palettes.heatmap_palette_bgr(l_color_val)
3549
+
3550
+ elif cmap == palettes.Colormaps.TSO:
3551
+ b, g, r = palettes.tso_line_palette_bgr(branch.get_max_bus_nominal_voltage(),
3552
+ l_color_val)
3553
+
3554
+ else:
3555
+ r, g, b, a = loading_cmap(l_color_val)
3556
+ r *= 255
3557
+ g *= 255
3558
+ b *= 255
3559
+ a *= 255
3560
+
3561
+ color = QColor(r, g, b, a)
3562
+
3563
+ graphic_object.setToolTipText(tooltip)
3564
+ graphic_object.set_colour(color, w, style)
3565
+
3566
+ if hasattr(graphic_object, 'set_arrows_with_power'):
3567
+ graphic_object.set_arrows_with_power(
3568
+ Sf=np.max([SfA[i], SfB[i], SfC[i]]),
3569
+ St=np.max([StA[i], StB[i], StC[i]])
3570
+ )
3571
+ else:
3572
+ w = graphic_object.pen_width
3573
+ style = Qt.PenStyle.DashLine
3574
+ color = QColor(115, 115, 115, 255) # gray
3575
+ graphic_object.set_pen(QPen(color, w, style))
3576
+ graphic_object.setToolTipText("")
3577
+ if hasattr(graphic_object, 'set_arrows_with_power'):
3578
+ graphic_object.set_arrows_with_power(Sf=None, St=None)
3579
+
3580
+ else:
3581
+ # No diagram object
3582
+ pass
3583
+
3584
+ # VSC lines
3585
+ if vsc_Pf is not None:
3586
+
3587
+ vsc_sending_power_norm = np.abs(vsc_PtA + 1j * vsc_QtA) / (max_flow + 1e-20)
3588
+
3589
+ if self.circuit.get_vsc_number() == len(vsc_Pf):
3590
+ for i, elm in enumerate(self.circuit.vsc_devices):
3591
+
3592
+ # try to find the diagram object of the DB object
3593
+ graphic_object: VscGraphicItem = self.graphics_manager.query(elm)
3594
+
3595
+ if graphic_object is not None:
3596
+
3597
+ if vsc_active[i]:
3598
+
3599
+ if use_flow_based_width:
3600
+ w = int(np.floor(
3601
+ min_branch_width + vsc_sending_power_norm[i] * (
3602
+ max_branch_width - min_branch_width)))
3603
+ else:
3604
+ w = graphic_object.pen_width
3605
+
3606
+ if elm.active:
3607
+ style = Qt.PenStyle.SolidLine
3608
+
3609
+ a = 1
3610
+ if cmap == palettes.Colormaps.Green2Red:
3611
+ b, g, r = palettes.green_to_red_bgr(abs(vsc_loading[i]))
3612
+
3613
+ elif cmap == palettes.Colormaps.Heatmap:
3614
+ b, g, r = palettes.heatmap_palette_bgr(abs(vsc_loading[i]))
3615
+
3616
+ elif cmap == palettes.Colormaps.TSO:
3617
+ b, g, r = palettes.tso_line_palette_bgr(elm.get_max_bus_nominal_voltage(),
3618
+ abs(vsc_loading[i]))
3619
+
3620
+ else:
3621
+ r, g, b, a = loading_cmap(abs(vsc_loading[i]))
3622
+ r *= 255
3623
+ g *= 255
3624
+ b *= 255
3625
+ a *= 255
3626
+
3627
+ color = QColor(r, g, b, a)
3628
+ else:
3629
+ style = Qt.PenStyle.DashLine
3630
+ color = QColor(115, 115, 115, 255) # gray
3631
+
3632
+ tooltip = str(i) + ': ' + elm.name
3633
+ tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
3634
+ abs(vsc_loading[i]) * 100) + ' [%]'
3635
+
3636
+ tooltip += '\nPower DC (from):\t' + "{:10.4f}".format(vsc_Pf[i]) + ' [MW]'
3637
+
3638
+ tooltip += '\nPower A (to):\t' + "{:10.4f}".format(vsc_PtA[i]) + ' [MW]'
3639
+ tooltip += '\nPower B (to):\t' + "{:10.4f}".format(vsc_PtB[i]) + ' [MW]'
3640
+ tooltip += '\nPower C (to):\t' + "{:10.4f}".format(vsc_PtC[i]) + ' [MW]'
3641
+
3642
+ tooltip += '\nPower A (to):\t' + "{:10.4f}".format(vsc_QtA[i]) + ' [Mvar]'
3643
+ tooltip += '\nPower B (to):\t' + "{:10.4f}".format(vsc_QtB[i]) + ' [Mvar]'
3644
+ tooltip += '\nPower C (to):\t' + "{:10.4f}".format(vsc_QtC[i]) + ' [Mvar]'
3645
+
3646
+ tooltip += '\nLosses: \t\t' + "{:10.4f}".format(vsc_losses[i]) + ' [MW]'
3647
+ graphic_object.set_arrows_with_power(Sf=vsc_Pf[i] + 1j * 0.0,
3648
+ St=vsc_PtA[i] + 1j * vsc_QtA[i])
3649
+
3650
+ graphic_object.setToolTipText(tooltip)
3651
+ graphic_object.set_colour(color, w, style)
3652
+ else:
3653
+ w = graphic_object.pen_width
3654
+ style = Qt.PenStyle.DashLine
3655
+ color = QColor(115, 115, 115, 255) # gray
3656
+ graphic_object.set_pen(QPen(color, w, style))
3657
+ else:
3658
+ # No diagram object
3659
+ pass
3660
+ else:
3661
+ error_msg("VSC results length differs from the number of VSC results. \n"
3662
+ "Did you change the number of devices? If so, re-run the simulation.")
3663
+
3664
+ # HVDC lines
3665
+ if len(hvdc_PfA) > 0:
3666
+
3667
+ hvdc_sending_power_norm = np.abs(hvdc_PfA) / (max_flow + 1e-20)
3668
+
3669
+ if self.circuit.get_hvdc_number() == len(hvdc_PfA):
3670
+ for i, elm in enumerate(self.circuit.hvdc_lines):
3671
+
3672
+ # try to find the diagram object of the DB object
3673
+ graphic_object: HvdcGraphicItem = self.graphics_manager.query(elm)
3674
+
3675
+ if graphic_object is not None:
3676
+
3677
+ if hvdc_active[i]:
3678
+
3679
+ if use_flow_based_width:
3680
+ w = int(np.floor(
3681
+ min_branch_width + hvdc_sending_power_norm[i] * (
3682
+ max_branch_width - min_branch_width)))
3683
+ else:
3684
+ w = graphic_object.pen_width
3685
+
3686
+ if elm.active:
3687
+ style = Qt.PenStyle.SolidLine
3688
+
3689
+ a = 1
3690
+ if cmap == palettes.Colormaps.Green2Red:
3691
+ b, g, r = palettes.green_to_red_bgr(abs(hvdc_loading[i]))
3692
+
3693
+ elif cmap == palettes.Colormaps.Heatmap:
3694
+ b, g, r = palettes.heatmap_palette_bgr(abs(hvdc_loading[i]))
3695
+
3696
+ elif cmap == palettes.Colormaps.TSO:
3697
+ b, g, r = palettes.tso_line_palette_bgr(elm.get_max_bus_nominal_voltage(),
3698
+ abs(hvdc_loading[i]))
3699
+
3700
+ else:
3701
+ r, g, b, a = loading_cmap(abs(hvdc_loading[i]))
3702
+ r *= 255
3703
+ g *= 255
3704
+ b *= 255
3705
+ a *= 255
3706
+
3707
+ color = QColor(r, g, b, a)
3708
+ else:
3709
+ style = Qt.PenStyle.DashLine
3710
+ color = QColor(115, 115, 115, 255) # gray
3711
+
3712
+ tooltip = str(i) + ': ' + elm.name
3713
+ tooltip += '\n' + loading_label + ': ' + "{:10.4f}".format(
3714
+ abs(hvdc_loading[i]) * 100) + ' [%]'
3715
+
3716
+ tooltip += '\nPower (from):\t' + "{:10.4f}".format(hvdc_PfA[i]) + ' [MW]'
3717
+
3718
+ if hvdc_losses is not None:
3719
+ tooltip += '\nPower (to):\t' + "{:10.4f}".format(hvdc_PtA[i]) + ' [MW]'
3720
+ tooltip += '\nLosses: \t\t' + "{:10.4f}".format(hvdc_losses[i]) + ' [MW]'
3721
+ graphic_object.set_arrows_with_hvdc_power(Pf=hvdc_PfA[i], Pt=hvdc_PtA[i])
3722
+ else:
3723
+ graphic_object.set_arrows_with_hvdc_power(Pf=hvdc_PfA[i], Pt=-hvdc_PfA[i])
3724
+
3725
+ graphic_object.setToolTipText(tooltip)
3726
+ graphic_object.set_colour(color, w, style)
3727
+ else:
3728
+ w = graphic_object.pen_width
3729
+ style = Qt.PenStyle.DashLine
3730
+ color = QColor(115, 115, 115, 255) # gray
3731
+ graphic_object.set_pen(QPen(color, w, style))
3732
+ else:
3733
+ # No diagram object
3734
+ pass
3735
+ else:
3736
+ error_msg("HVDC results length differs from the number of HVDC results. \n"
3737
+ "Did you change the number of devices? If so, re-run the simulation.")
3738
+
3320
3739
  def recolour(self, use_api_color: bool):
3321
3740
  """
3322
3741
 
@@ -734,6 +734,58 @@ class BaseDiagramWidget(QSplitter):
734
734
  """
735
735
  pass
736
736
 
737
+ def colour_results_3ph(self,
738
+ SbusA: CxVec,
739
+ SbusB: CxVec,
740
+ SbusC: CxVec,
741
+ voltagesA: CxVec,
742
+ voltagesB: CxVec,
743
+ voltagesC: CxVec,
744
+ bus_active: IntVec,
745
+ types: IntVec,
746
+ SfA: CxVec,
747
+ SfB: CxVec,
748
+ SfC: CxVec,
749
+ StA: CxVec,
750
+ StB: CxVec,
751
+ StC: CxVec,
752
+ loadingsA: CxVec,
753
+ loadingsB: CxVec,
754
+ loadingsC: CxVec,
755
+ lossesA: CxVec,
756
+ lossesB: CxVec,
757
+ lossesC: CxVec,
758
+ br_active: IntVec,
759
+ ma: Vec,
760
+ tau: Vec,
761
+ hvdc_PfA: Vec,
762
+ hvdc_PfB: Vec,
763
+ hvdc_PfC: Vec,
764
+ hvdc_PtA: Vec,
765
+ hvdc_PtB: Vec,
766
+ hvdc_PtC: Vec,
767
+ hvdc_losses: Vec,
768
+ hvdc_loading: Vec,
769
+ hvdc_active: IntVec,
770
+ vsc_Pf: Vec,
771
+ vsc_PtA: Vec,
772
+ vsc_PtB: Vec,
773
+ vsc_PtC: Vec,
774
+ vsc_QtA: Vec,
775
+ vsc_QtB: Vec,
776
+ vsc_QtC: Vec,
777
+ vsc_losses: Vec,
778
+ vsc_loading: Vec,
779
+ vsc_active: IntVec,
780
+ loading_label: str = 'loading',
781
+ use_flow_based_width: bool = False,
782
+ min_branch_width: int = 5,
783
+ max_branch_width=5,
784
+ min_bus_width=20,
785
+ max_bus_width=20,
786
+ cmap: palettes.Colormaps = None):
787
+ pass
788
+
737
789
  def disable_all_results_tags(self):
738
790
  """
739
791
  Disable all results' tags in this diagram
@@ -14,7 +14,8 @@ from GridCal.Gui.gui_functions import get_list_model
14
14
  from GridCal.Session.session import SimulationSession
15
15
  from GridCalEngine.Devices.Substation.bus import Bus
16
16
  from GridCalEngine.Devices.multi_circuit import MultiCircuit
17
- from GridCalEngine.Topology.grid_reduction import ward_reduction, ptdf_reduction
17
+ from GridCalEngine.Topology.GridReduction.di_shi_grid_reduction import di_shi_reduction
18
+ from GridCalEngine.Topology.GridReduction.ptdf_grid_reduction import ptdf_reduction
18
19
  from GridCalEngine.basic_structures import Logger
19
20
  from GridCalEngine.enumerations import GridReductionMethod
20
21
 
@@ -41,7 +42,7 @@ class GridReduceDialogue(QtWidgets.QDialog):
41
42
  lmdl = get_list_model(list(selected_buses_set))
42
43
  self.ui.listView.setModel(lmdl)
43
44
 
44
- methods = [GridReductionMethod.Ward, GridReductionMethod.WardLinear, GridReductionMethod.PTDF]
45
+ methods = [GridReductionMethod.DiShi, GridReductionMethod.PTDF]
45
46
  self.methods_dict = {m.value: m for m in methods}
46
47
  cmdl = get_list_model([m.value for m in methods])
47
48
  self.ui.methodComboBox.setModel(cmdl)
@@ -72,7 +73,7 @@ class GridReduceDialogue(QtWidgets.QDialog):
72
73
  reduction_bus_indices = np.array([self._grid.buses.index(b) for b in self._selected_buses_set],
73
74
  dtype=int)
74
75
 
75
- if method == GridReductionMethod.Ward:
76
+ if method == GridReductionMethod.DiShi:
76
77
 
77
78
  # get the previous power flow
78
79
  _, pf_res = self._session.power_flow
@@ -81,7 +82,7 @@ class GridReduceDialogue(QtWidgets.QDialog):
81
82
  warning_msg("Run a power flow first! or select another method", "Grid reduction")
82
83
  return
83
84
 
84
- logger = ward_reduction(
85
+ grid_reduced, logger = di_shi_reduction(
85
86
  grid=self._grid,
86
87
  reduction_bus_indices=reduction_bus_indices,
87
88
  pf_res=pf_res,
@@ -89,15 +90,6 @@ class GridReduceDialogue(QtWidgets.QDialog):
89
90
  use_linear=False
90
91
  )
91
92
 
92
- elif method == GridReductionMethod.Ward:
93
- logger = ward_reduction(
94
- grid=self._grid,
95
- reduction_bus_indices=reduction_bus_indices,
96
- pf_res=None,
97
- add_power_loads=True,
98
- use_linear=True
99
- )
100
-
101
93
  elif method == GridReductionMethod.PTDF:
102
94
  # get the previous power flow
103
95
  _, lin_res = self._session.linear_power_flow