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.
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +60 -24
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +422 -3
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/base_diagram_widget.py +52 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/grid_reduce.py +5 -13
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +86 -35
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/simulations.py +11 -11
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/icons_rc.py +3 -3
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/__version__.py +1 -1
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/PKG-INFO +1 -1
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/generic_graphics.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/grid_reduce_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/GridReduce/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/MainWindow.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/data_base.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/SubClasses/io.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/object_proxy_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/toast_widget.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/server_driver.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/session.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/__init__.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/cables.csv +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/data/wires.csv +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/plugins.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/templates.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/update.py +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/setup.cfg +0 -0
- {gridcal-5.4.0b1 → gridcal-5.4.0b2}/setup.py +0 -0
{gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py
RENAMED
@@ -963,32 +963,68 @@ class BusGraphicItem(GenericDiagramWidget, QtWidgets.QGraphicsRectItem):
|
|
963
963
|
msg += f" [{tpe}]"
|
964
964
|
msg += "<br>"
|
965
965
|
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
msg += f"V={vm_kv} KV<br> {vm}<{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}<{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}<{va}º p.u.<br>"
|
980
970
|
|
981
971
|
if P is not None:
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
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}<{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 = ""
|
{gridcal-5.4.0b1 → gridcal-5.4.0b2}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py
RENAMED
@@ -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
|
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
|
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.
|
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.
|
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.
|
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 =
|
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
|