GridCal 5.3.43__tar.gz → 5.3.44__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.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/line_location_graphic_item.py +1 -1
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +8 -1
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +38 -6
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +15 -44
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/base_diagram_widget.py +27 -13
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/generic_graphics.py +14 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/MainWindow.py +1 -1
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +9 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Results/results.py +20 -3
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/base_gui.py +2 -2
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/simulations.py +57 -28
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/icons_rc.py +1 -1
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/__version__.py +1 -1
- gridcal-5.3.44/GridCal/adequacy_output.csv +955 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/PKG-INFO +1 -1
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ExecuteGridCal.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/object_plot_analysis.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/controllable_shunt_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/generator_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/line_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/new_line_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer3w_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/Editors/transformer_taps_editor.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/blue_marble.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/TileProviders/cartodb.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/build_diff_tree.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code2.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code3.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/demo_code4.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_diff.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_diff_gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_merge.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/grid_merge_gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/GridMerge/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/SelectComponents.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/catalogue_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadCatalogue/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/ConsoleLog.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/GridCalMain.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Server/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/SubClasses/io.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/object_select_window.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Main/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/roseta_objects_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/substation_designer.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/substation_designer_gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SubstationDesigner/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/tower_builder.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Visualization/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Visualization/visualization.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/associations_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/general_dialogues.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/gui_functions.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/messages.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/object_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/pandas_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/plot_config.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/profiles_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/python_console.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/python_highlighter.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/results_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/table_view_header_wrap.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/themes.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/toast_widget.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/update_gui_all.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/update_gui_common.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/wrappable_table_model.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/LICENSE.txt +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/export_results_driver.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/file_handler.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/server_driver.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/session.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Session/synchronization_driver.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_dummy.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_linux_detect.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_mac_detect.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/darkdetect/_windows_detect.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/GridCal.ico +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/GridCal.svg +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/__init__.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/cables.csv +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/sequence_lines.csv +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/transformers.csv +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/data/wires.csv +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/plugins.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/templates.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/GridCal/update.py +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/setup.cfg +0 -0
- {gridcal-5.3.43 → gridcal-5.3.44}/setup.py +0 -0
@@ -69,7 +69,7 @@ class LineLocationGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
|
|
69
69
|
|
70
70
|
self.index = index
|
71
71
|
|
72
|
-
self.resize(r
|
72
|
+
self.resize(r)
|
73
73
|
self.setAcceptHoverEvents(True) # Enable hover events for the item
|
74
74
|
self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable) # Allow moving the node
|
75
75
|
self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable) # Allow selecting the node
|
{gridcal-5.3.43 → gridcal-5.3.44}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py
RENAMED
@@ -17,7 +17,7 @@ from GridCal.Gui.messages import yes_no_question
|
|
17
17
|
from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER
|
18
18
|
from GridCal.Gui.Diagrams.Editors.line_editor import LineEditor
|
19
19
|
|
20
|
-
from GridCalEngine.Devices.types import BRANCH_TYPES
|
20
|
+
from GridCalEngine.Devices.types import BRANCH_TYPES, ALL_DEV_TYPES
|
21
21
|
from GridCalEngine.enumerations import DeviceType
|
22
22
|
|
23
23
|
if TYPE_CHECKING:
|
@@ -132,6 +132,13 @@ class MapLineSegment(QGraphicsLineItem):
|
|
132
132
|
"""
|
133
133
|
return [self.container]
|
134
134
|
|
135
|
+
def get_associated_devices(self) -> List[ALL_DEV_TYPES]:
|
136
|
+
"""
|
137
|
+
This forwards to the map line container for the appropriate deletion of everything
|
138
|
+
:return:
|
139
|
+
"""
|
140
|
+
return [self.container.api_object]
|
141
|
+
|
135
142
|
def set_width(self, width: float):
|
136
143
|
"""
|
137
144
|
|
@@ -20,7 +20,7 @@ from GridCal.Gui.object_model import ObjectsModel
|
|
20
20
|
from GridCal.Gui.Diagrams.MapWidget.Substation.voltage_level_graphic_item import VoltageLevelGraphicItem
|
21
21
|
from GridCal.Gui.Diagrams.SchematicWidget import schematic_widget
|
22
22
|
|
23
|
-
from GridCalEngine.Devices.types import ALL_DEV_TYPES
|
23
|
+
from GridCalEngine.Devices.types import ALL_DEV_TYPES, INJECTION_DEVICE_TYPES, BRANCH_TYPES
|
24
24
|
from GridCalEngine.Devices.Substation.bus import Bus
|
25
25
|
from GridCalEngine.Devices import VoltageLevel
|
26
26
|
from GridCalEngine.Devices.Substation.substation import Substation
|
@@ -795,22 +795,54 @@ class SubstationGraphicItem(NodeTemplate, QGraphicsRectItem):
|
|
795
795
|
:return:
|
796
796
|
"""
|
797
797
|
associated_buses = self.editor.circuit.get_substation_buses(substation=self.api_object)
|
798
|
-
associated_buses_graphics = list()
|
799
798
|
associated_lines_graphics: List[MapLineContainer] = list()
|
799
|
+
for line in self.editor.circuit.lines:
|
800
|
+
if line.bus_to in associated_buses or line.bus_from in associated_buses:
|
801
|
+
associated_lines_graphics.append(self.editor.graphics_manager.query(elm=line))
|
800
802
|
|
801
803
|
# TODO: Connectivity nodes / busbars? Probably this is only when dealing with the schematic
|
802
804
|
|
803
|
-
for bus in associated_buses:
|
804
|
-
|
805
|
+
# for bus in associated_buses:
|
806
|
+
# associated_buses_graphics.append(self.editor.graphics_manager.query(elm=bus))
|
805
807
|
|
806
|
-
for segment in self.get_hosting_line_segments():
|
807
|
-
|
808
|
+
# for segment in self.get_hosting_line_segments():
|
809
|
+
# associated_lines_graphics.append(segment.container)
|
808
810
|
|
809
811
|
return self.voltage_level_graphics + associated_lines_graphics
|
810
812
|
|
813
|
+
|
814
|
+
def get_associated_devices(self) -> List[ALL_DEV_TYPES]:
|
815
|
+
"""
|
816
|
+
This function returns all the api_object devices associated with the selected graphic object.
|
817
|
+
:return: List of the associated devices.
|
818
|
+
"""
|
819
|
+
associated_vl = [vl.api_object for vl in self.voltage_level_graphics]
|
820
|
+
associated_buses = self.editor.circuit.get_substation_buses(substation=self.api_object)
|
821
|
+
associated_branches: List[BRANCH_TYPES] = list()
|
822
|
+
associated_shunts: List[INJECTION_DEVICE_TYPES] = list()
|
823
|
+
|
824
|
+
for branch in self.editor.circuit.get_branches():
|
825
|
+
if branch.bus_to in associated_buses or branch.bus_from in associated_buses:
|
826
|
+
associated_branches.append(branch)
|
827
|
+
|
828
|
+
for inj in self.editor.circuit.get_injection_devices_iter():
|
829
|
+
if inj.bus in associated_buses:
|
830
|
+
associated_shunts.append(inj)
|
831
|
+
|
832
|
+
# TODO: Connectivity nodes / busbars? Probably this is only when dealing with the schematic
|
833
|
+
|
834
|
+
# for bus in associated_buses:
|
835
|
+
# associated_buses_graphics.append(self.editor.graphics_manager.query(elm=bus))
|
836
|
+
|
837
|
+
# for segment in self.get_hosting_line_segments():
|
838
|
+
# associated_lines_graphics.append(segment.container)
|
839
|
+
|
840
|
+
return associated_vl + associated_branches + associated_shunts + associated_buses
|
841
|
+
|
811
842
|
def delete(self):
|
812
843
|
"""
|
813
844
|
|
814
845
|
:return:
|
815
846
|
"""
|
847
|
+
|
816
848
|
self.editor.delete_with_dialogue(selected=[self], delete_from_db=False)
|
@@ -506,7 +506,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
506
506
|
lat=lat,
|
507
507
|
lon=lon,
|
508
508
|
index=index,
|
509
|
-
r=
|
509
|
+
r=self.diagram.min_branch_width)
|
510
510
|
|
511
511
|
self.graphics_manager.add_device(elm=api_object, graphic=graphic_object)
|
512
512
|
|
@@ -1180,7 +1180,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1180
1180
|
arrow_size = self.diagram.arrow_size # self.get_arrow_scale()
|
1181
1181
|
|
1182
1182
|
# Try colouring the branches
|
1183
|
-
if self.circuit.
|
1183
|
+
if self.circuit.get_branch_number(add_hvdc=False, add_vsc=False, add_switch=True):
|
1184
1184
|
|
1185
1185
|
lnorm = np.abs(loadings)
|
1186
1186
|
lnorm[lnorm == np.inf] = 0
|
@@ -1705,8 +1705,8 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1705
1705
|
|
1706
1706
|
line1 = selected_lines[0][0]
|
1707
1707
|
line2 = selected_lines[1][0]
|
1708
|
-
line1_graphic = selected_lines[0][1]
|
1709
|
-
line2_graphic = selected_lines[1][1]
|
1708
|
+
line1_graphic: MapAcLine = selected_lines[0][1]
|
1709
|
+
line2_graphic: MapAcLine = selected_lines[1][1]
|
1710
1710
|
|
1711
1711
|
if line1.template != line2.template:
|
1712
1712
|
self.gui.show_error_toast('Line merging could not be done, lines have different templates. Check if that '
|
@@ -1823,11 +1823,10 @@ class GridMapWidget(BaseDiagramWidget):
|
|
1823
1823
|
pass
|
1824
1824
|
|
1825
1825
|
self.circuit.add_line(new_line)
|
1826
|
-
self.circuit.delete_line(line1)
|
1827
|
-
self.circuit.delete_line(line2)
|
1828
1826
|
|
1829
|
-
self.
|
1830
|
-
self.
|
1827
|
+
self.remove_element(device=line1, graphic_object=line1_graphic, delete_from_db=True)
|
1828
|
+
self.remove_element(device=line2, graphic_object=line2_graphic, delete_from_db=True)
|
1829
|
+
|
1831
1830
|
self.add_api_line(api_object=new_line)
|
1832
1831
|
|
1833
1832
|
self.gui.show_info_toast(message='Line merging successful!')
|
@@ -2586,11 +2585,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2586
2585
|
selected_substations = self.get_selected_substations_tup()
|
2587
2586
|
|
2588
2587
|
if len(selected_lines) != 1 or len(selected_substations) != 2:
|
2589
|
-
|
2590
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2591
|
-
msg.setText("Please select exactly one line and two substations.")
|
2592
|
-
msg.setWindowTitle("Selection Error")
|
2593
|
-
msg.exec()
|
2588
|
+
self.gui.show_error_toast(message="Please select exactly one line and two substations.")
|
2594
2589
|
return
|
2595
2590
|
|
2596
2591
|
# Get the API objects
|
@@ -2615,11 +2610,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2615
2610
|
line_api.bus_from = bus
|
2616
2611
|
break
|
2617
2612
|
if bus_from_idtag_0 == line_api.bus_from.idtag:
|
2618
|
-
|
2619
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2620
|
-
msg.setText("The new substation did not have any valid bus to connect the line.")
|
2621
|
-
msg.setWindowTitle("No valid bus")
|
2622
|
-
msg.exec()
|
2613
|
+
self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
|
2623
2614
|
return
|
2624
2615
|
|
2625
2616
|
elif substation_api_1.idtag == bus_to.substation.idtag:
|
@@ -2630,11 +2621,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2630
2621
|
line_api.bus_to = bus
|
2631
2622
|
break
|
2632
2623
|
if bus_to_idtag_0 == line_api.bus_to.idtag:
|
2633
|
-
|
2634
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2635
|
-
msg.setText("The new substation did not have any valid bus to connect the line.")
|
2636
|
-
msg.setWindowTitle("No valid bus")
|
2637
|
-
msg.exec()
|
2624
|
+
self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
|
2638
2625
|
return
|
2639
2626
|
|
2640
2627
|
|
@@ -2646,11 +2633,7 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2646
2633
|
line_api.bus_from = bus
|
2647
2634
|
break
|
2648
2635
|
if bus_from_idtag_0 == line_api.bus_from.idtag:
|
2649
|
-
|
2650
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2651
|
-
msg.setText("The new substation did not have any valid bus to connect the line.")
|
2652
|
-
msg.setWindowTitle("No valid bus")
|
2653
|
-
msg.exec()
|
2636
|
+
self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
|
2654
2637
|
return
|
2655
2638
|
|
2656
2639
|
elif substation_api_2.idtag == bus_to.substation.idtag:
|
@@ -2661,33 +2644,21 @@ class GridMapWidget(BaseDiagramWidget):
|
|
2661
2644
|
line_api.bus_to = bus
|
2662
2645
|
break
|
2663
2646
|
if bus_to_idtag_0 == line_api.bus_to.idtag:
|
2664
|
-
|
2665
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2666
|
-
msg.setText("The new substation did not have any valid bus to connect the line.")
|
2667
|
-
msg.setWindowTitle("No valid bus")
|
2668
|
-
msg.exec()
|
2647
|
+
self.gui.show_error_toast(message="The new substation did not have any valid bus to connect the line.")
|
2669
2648
|
return
|
2670
2649
|
|
2671
2650
|
else:
|
2672
|
-
|
2673
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2674
|
-
msg.setText("None of the selected substations are related to the line.")
|
2675
|
-
msg.setWindowTitle("No Action")
|
2676
|
-
msg.exec()
|
2651
|
+
self.gui.show_error_toast(message="None of the selected substations are related to the line.")
|
2677
2652
|
return
|
2678
2653
|
|
2679
2654
|
# Remove past graphic item and add the new one
|
2680
2655
|
|
2681
|
-
self.
|
2656
|
+
self.remove_element(device=line_api, graphic_object=line_graphic, delete_from_db=False)
|
2682
2657
|
line = self.add_api_line(api_object=line_api)
|
2683
2658
|
line.calculate_total_length()
|
2684
2659
|
|
2685
|
-
|
2686
|
-
msg.setIcon(QMessageBox.Icon.Information)
|
2687
|
-
msg.setText(f"Line {line_api.name} had its connection to substation {removed_substation} changed to substation "
|
2660
|
+
self.gui.show_info_toast(f"Line {line_api.name} had its connection to substation {removed_substation} changed to substation "
|
2688
2661
|
f"{added_substation}.")
|
2689
|
-
msg.setWindowTitle("Operation Successful")
|
2690
|
-
msg.exec()
|
2691
2662
|
|
2692
2663
|
|
2693
2664
|
def generate_map_diagram(
|
@@ -291,7 +291,7 @@ class BaseDiagramWidget(QSplitter):
|
|
291
291
|
graphic_object.delete_from_associations()
|
292
292
|
|
293
293
|
if delete_from_db:
|
294
|
-
self.circuit.delete_element(obj=
|
294
|
+
self.circuit.delete_element(obj=device)
|
295
295
|
|
296
296
|
# # For any other associated, graphic, delete too
|
297
297
|
# for child_graphic in graphic_object.get_associated_widgets():
|
@@ -315,6 +315,19 @@ class BaseDiagramWidget(QSplitter):
|
|
315
315
|
self.object_editor_table.setModel(None)
|
316
316
|
|
317
317
|
return True
|
318
|
+
|
319
|
+
if graphic_object is None and device is not None:
|
320
|
+
|
321
|
+
if delete_from_db:
|
322
|
+
self.circuit.delete_element(obj=device)
|
323
|
+
self.delete_element_utility_function(device=device, propagate=delete_from_db)
|
324
|
+
self.object_editor_table.setModel(None)
|
325
|
+
|
326
|
+
else:
|
327
|
+
pass
|
328
|
+
|
329
|
+
return True
|
330
|
+
|
318
331
|
else:
|
319
332
|
self.gui.show_warning_toast(f"Graphic object {graphic_object} and device {device} are none")
|
320
333
|
self.object_editor_table.setModel(None)
|
@@ -346,24 +359,24 @@ class BaseDiagramWidget(QSplitter):
|
|
346
359
|
if len(selected) > 0:
|
347
360
|
|
348
361
|
# get the set of all affected GenericDiagramWidget instances
|
349
|
-
extended: Set[
|
362
|
+
extended: Set[ALL_DEV_TYPES] = set()
|
350
363
|
|
351
364
|
for graphic_obj in selected:
|
352
365
|
|
353
366
|
if graphic_obj is not None:
|
354
367
|
if isinstance(graphic_obj, GenericDiagramWidget):
|
355
|
-
extended.add(graphic_obj)
|
368
|
+
extended.add(graphic_obj.api_object)
|
356
369
|
|
357
|
-
for
|
358
|
-
if
|
359
|
-
extended.add(
|
370
|
+
for child_item in graphic_obj.get_associated_devices():
|
371
|
+
if child_item is not None:
|
372
|
+
extended.add(child_item)
|
360
373
|
|
361
|
-
extended_lst: List[
|
374
|
+
extended_lst: List[ALL_DEV_TYPES] = list(extended)
|
362
375
|
|
363
376
|
dlg = DeleteDialogue(
|
364
|
-
names_list=[f"{
|
365
|
-
f"{
|
366
|
-
for
|
377
|
+
names_list=[f"{device.device_type.value}: "
|
378
|
+
f"{device.name}"
|
379
|
+
for device in extended_lst],
|
367
380
|
delete_from_db=delete_from_db,
|
368
381
|
title="Delete Selected",
|
369
382
|
checks=False,
|
@@ -373,9 +386,10 @@ class BaseDiagramWidget(QSplitter):
|
|
373
386
|
dlg.exec()
|
374
387
|
|
375
388
|
if dlg.is_accepted:
|
376
|
-
for
|
377
|
-
|
378
|
-
|
389
|
+
for device in extended_lst:
|
390
|
+
|
391
|
+
self.remove_element(device=device,
|
392
|
+
graphic_object=self.graphics_manager.query(elm=device),
|
379
393
|
delete_from_db=dlg.delete_from_db)
|
380
394
|
|
381
395
|
return True, dlg.delete_from_db
|
@@ -189,6 +189,20 @@ class GenericDiagramWidget:
|
|
189
189
|
return list()
|
190
190
|
|
191
191
|
|
192
|
+
def get_associated_devices(self):
|
193
|
+
|
194
|
+
"""
|
195
|
+
Get a list of all graphical elements associated with this widget.
|
196
|
+
In the case of a BusGraphicsItem, it will be all the shunt connections
|
197
|
+
plus the LineGraphicItems connecting to it, etc.
|
198
|
+
This function is meant to be overloaded.
|
199
|
+
:return:
|
200
|
+
|
201
|
+
"""
|
202
|
+
|
203
|
+
return list()
|
204
|
+
|
205
|
+
|
192
206
|
class Polygon(QGraphicsPolygonItem):
|
193
207
|
"""
|
194
208
|
PolygonItem
|
@@ -5074,7 +5074,7 @@ class Ui_mainWindow(object):
|
|
5074
5074
|
#if QT_CONFIG(tooltip)
|
5075
5075
|
self.actionTry_to_fix_buses_location.setToolTip(QCoreApplication.translate("mainWindow", u"Set selected buses location closer to their neighbours", None))
|
5076
5076
|
#endif // QT_CONFIG(tooltip)
|
5077
|
-
self.actionSet_OPF_generation_to_profiles.setText(QCoreApplication.translate("mainWindow", u"Copy OPF generation to
|
5077
|
+
self.actionSet_OPF_generation_to_profiles.setText(QCoreApplication.translate("mainWindow", u"Copy OPF generation to database (destructive)", None))
|
5078
5078
|
#if QT_CONFIG(tooltip)
|
5079
5079
|
self.actionSet_OPF_generation_to_profiles.setToolTip(QCoreApplication.translate("mainWindow", u"<html><head/><body><p><span style=\" font-weight:700;\">Copy OPF data</span></p><p>Destructive copy of the OPF generation results to the input profiles</p></body></html>", None))
|
5080
5080
|
#endif // QT_CONFIG(tooltip)
|
@@ -715,13 +715,22 @@ class DiagramsMain(CompiledArraysMain):
|
|
715
715
|
bus_active=bus_active,
|
716
716
|
loadings=results.loading,
|
717
717
|
types=results.bus_types,
|
718
|
+
|
718
719
|
Sf=results.Sf,
|
719
720
|
St=results.St,
|
720
721
|
br_active=br_active,
|
722
|
+
|
721
723
|
hvdc_Pf=results.hvdc_Pf,
|
722
724
|
hvdc_Pt=-results.hvdc_Pf,
|
723
725
|
hvdc_loading=results.hvdc_loading,
|
724
726
|
hvdc_active=hvdc_active,
|
727
|
+
|
728
|
+
vsc_Pf=results.vsc_Pf,
|
729
|
+
vsc_Pt=-results.vsc_Pf,
|
730
|
+
vsc_Qt=np.zeros_like(results.vsc_Pf),
|
731
|
+
vsc_loading=results.vsc_loading,
|
732
|
+
vsc_active=vsc_active,
|
733
|
+
|
725
734
|
fluid_node_p2x_flow=results.fluid_node_p2x_flow,
|
726
735
|
fluid_node_current_level=results.fluid_node_current_level,
|
727
736
|
fluid_node_spillage=results.fluid_node_spillage,
|
@@ -301,17 +301,34 @@ class ResultsMain(SimulationsMain):
|
|
301
301
|
|
302
302
|
def copy_opf_to_profiles(self):
|
303
303
|
"""
|
304
|
-
Copy the results from the OPF time series to the
|
304
|
+
Copy the results from the OPF snapshot and time series to the database
|
305
305
|
"""
|
306
|
-
_, results = self.session.optimal_power_flow_ts
|
307
306
|
|
307
|
+
# copy the snapshot if that exits
|
308
|
+
_, results = self.session.optimal_power_flow
|
308
309
|
if results is not None:
|
309
310
|
|
310
311
|
ok = yes_no_question('Are you sure that you want to overwrite '
|
311
|
-
'the generation, batteries and load
|
312
|
+
'the generation, batteries and load snapshot values '
|
312
313
|
'with the OPF results?',
|
313
314
|
title="Overwrite profiles with OPF results")
|
314
315
|
|
316
|
+
if ok:
|
317
|
+
self.circuit.set_opf_snapshot_results(results)
|
318
|
+
self.show_info_toast("P snapshot set from the OPF results")
|
319
|
+
|
320
|
+
else:
|
321
|
+
self.show_warning_toast('The OPF time series has no results :(')
|
322
|
+
|
323
|
+
# copy the time series if that exists --------------------------------------------------------------------------
|
324
|
+
_, results = self.session.optimal_power_flow_ts
|
325
|
+
if results is not None:
|
326
|
+
|
327
|
+
ok = yes_no_question('Are you sure that you want to overwrite '
|
328
|
+
'the generation, batteries and load profiles '
|
329
|
+
'with the OPF time series results?',
|
330
|
+
title="Overwrite profiles with OPF results")
|
331
|
+
|
315
332
|
if ok:
|
316
333
|
self.circuit.set_opf_ts_results(results)
|
317
334
|
self.show_info_toast("P profiles set from the OPF results")
|
@@ -23,7 +23,7 @@ from PySide6 import QtGui, QtWidgets, QtCore
|
|
23
23
|
# Engine imports
|
24
24
|
from GridCalEngine.Devices.multi_circuit import MultiCircuit
|
25
25
|
import GridCalEngine.Simulations as sim
|
26
|
-
from GridCalEngine.enumerations import EngineType, DeviceType
|
26
|
+
from GridCalEngine.enumerations import EngineType, DeviceType, SimulationTypes
|
27
27
|
from GridCalEngine.Compilers.circuit_to_data import compile_numerical_circuit_at
|
28
28
|
from GridCalEngine.DataStructures.numerical_circuit import NumericalCircuit
|
29
29
|
|
@@ -129,7 +129,7 @@ class BaseMainGui(QMainWindow):
|
|
129
129
|
self.lock_ui = False
|
130
130
|
self.ui.progress_frame.setVisible(self.lock_ui)
|
131
131
|
|
132
|
-
self.stuff_running_now: List[
|
132
|
+
self.stuff_running_now: List[SimulationTypes] = list()
|
133
133
|
|
134
134
|
self.session: SimulationSession = SimulationSession(name='GUI session')
|
135
135
|
|
@@ -190,7 +190,9 @@ class SimulationsMain(TimeEventsMain):
|
|
190
190
|
self.investment_evaluation_objfunc_dict = OrderedDict()
|
191
191
|
lst = list()
|
192
192
|
for method in [InvestmentsEvaluationObjectives.PowerFlow,
|
193
|
-
InvestmentsEvaluationObjectives.TimeSeriesPowerFlow
|
193
|
+
InvestmentsEvaluationObjectives.TimeSeriesPowerFlow,
|
194
|
+
InvestmentsEvaluationObjectives.GenerationAdequacy,
|
195
|
+
InvestmentsEvaluationObjectives.SimpleDispatch]:
|
194
196
|
self.investment_evaluation_objfunc_dict[method.value] = method
|
195
197
|
lst.append(method.value)
|
196
198
|
self.ui.investment_evaluation_objfunc_ComboBox.setModel(gf.get_list_model(lst))
|
@@ -562,29 +564,22 @@ class SimulationsMain(TimeEventsMain):
|
|
562
564
|
:return:
|
563
565
|
"""
|
564
566
|
model = QtGui.QStandardItemModel()
|
565
|
-
model.setHorizontalHeaderLabels([
|
566
|
-
"Combination", "capex", "opex", "losses", "overload_score", "voltage_score"
|
567
|
-
])
|
567
|
+
model.setHorizontalHeaderLabels(["Combination"] + list(drv.problem.get_objectives_names()))
|
568
568
|
|
569
569
|
results = drv.results
|
570
570
|
for i in range(results.max_eval):
|
571
|
-
idx = np.where(results.
|
571
|
+
idx = np.where(results.x[i, :] != 0)[0]
|
572
572
|
if len(idx):
|
573
|
-
row_items = [
|
574
|
-
QtGui.QStandardItem(f"
|
575
|
-
QtGui.QStandardItem(f"{results._capex[i]:.2f}"),
|
576
|
-
QtGui.QStandardItem(f"{results._opex[i]:.2f}"),
|
577
|
-
QtGui.QStandardItem(f"{results._losses[i]:.2f}"),
|
578
|
-
QtGui.QStandardItem(f"{results._overload_score[i]:.2f}"),
|
579
|
-
QtGui.QStandardItem(f"{results._voltage_score[i]:.2f}"),
|
573
|
+
row_items = [QtGui.QStandardItem(f"Combination {i}")] + [
|
574
|
+
QtGui.QStandardItem(f"{fi:.2f}") for fi in drv.results.f[i, :]
|
580
575
|
]
|
581
576
|
model.appendRow(row_items)
|
582
577
|
|
583
578
|
# Add names as child nodes under this combination
|
584
579
|
names_parent_item = row_items[0] # Use the first column (Combination) as parent
|
585
580
|
for k in idx:
|
586
|
-
name_item = QtGui.QStandardItem(results.
|
587
|
-
names_parent_item.appendRow([name_item]
|
581
|
+
name_item = QtGui.QStandardItem(results.x_names[k])
|
582
|
+
names_parent_item.appendRow([name_item])
|
588
583
|
|
589
584
|
return model
|
590
585
|
|
@@ -2586,22 +2581,56 @@ class SimulationsMain(TimeEventsMain):
|
|
2586
2581
|
plugin_fcn_ptr=fn_ptr
|
2587
2582
|
)
|
2588
2583
|
|
2589
|
-
|
2590
|
-
|
2591
|
-
|
2584
|
+
if obj_fn_tpe == InvestmentsEvaluationObjectives.PowerFlow:
|
2585
|
+
problem = sim.PowerFlowInvestmentProblem(
|
2586
|
+
grid=self.circuit,
|
2587
|
+
pf_options=self.get_selected_power_flow_options()
|
2588
|
+
)
|
2589
|
+
|
2590
|
+
elif obj_fn_tpe == InvestmentsEvaluationObjectives.TimeSeriesPowerFlow:
|
2591
|
+
problem = sim.TimeSeriesPowerFlowInvestmentProblem(
|
2592
|
+
grid=self.circuit,
|
2593
|
+
pf_options=self.get_selected_power_flow_options(),
|
2594
|
+
time_indices=self.get_time_indices(),
|
2595
|
+
clustering_results=self.get_clustering_results(),
|
2596
|
+
opf_time_series_results=self.get_opf_ts_results(
|
2597
|
+
use_opf=self.ui.actionOpf_to_Power_flow.isChecked()
|
2598
|
+
),
|
2599
|
+
engine=self.get_preferred_engine()
|
2600
|
+
)
|
2601
|
+
|
2602
|
+
elif obj_fn_tpe == InvestmentsEvaluationObjectives.GenerationAdequacy:
|
2603
|
+
problem = sim.AdequacyInvestmentProblem(
|
2604
|
+
grid=self.circuit,
|
2605
|
+
n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
|
2606
|
+
use_monte_carlo=True,
|
2607
|
+
save_file=False
|
2608
|
+
)
|
2609
|
+
|
2610
|
+
elif obj_fn_tpe == InvestmentsEvaluationObjectives.SimpleDispatch:
|
2611
|
+
problem = sim.AdequacyInvestmentProblem(
|
2612
|
+
grid=self.circuit,
|
2613
|
+
n_monte_carlo_sim=self.ui.max_iterations_reliability_spinBox.value(),
|
2614
|
+
use_monte_carlo=False,
|
2615
|
+
save_file=False
|
2616
|
+
)
|
2592
2617
|
|
2593
|
-
|
2594
|
-
|
2595
|
-
|
2596
|
-
opf_time_series_results=opf_time_series_results,
|
2597
|
-
clustering_results=self.get_clustering_results(),
|
2598
|
-
engine=self.get_preferred_engine()
|
2599
|
-
)
|
2618
|
+
else:
|
2619
|
+
self.show_error_toast("Objective not supported yet :/")
|
2620
|
+
return
|
2600
2621
|
|
2601
|
-
|
2602
|
-
|
2603
|
-
|
2604
|
-
|
2622
|
+
drv = sim.InvestmentsEvaluationDriver(
|
2623
|
+
grid=self.circuit,
|
2624
|
+
options=options,
|
2625
|
+
problem=problem
|
2626
|
+
)
|
2627
|
+
|
2628
|
+
self.session.run(
|
2629
|
+
drv,
|
2630
|
+
post_func=self.post_run_investments_evaluation,
|
2631
|
+
prog_func=self.ui.progressBar.setValue,
|
2632
|
+
text_func=self.ui.progress_label.setText
|
2633
|
+
)
|
2605
2634
|
self.add_simulation(SimulationTypes.InvestmentsEvaluation_run)
|
2606
2635
|
self.LOCK()
|
2607
2636
|
|
@@ -38475,7 +38475,7 @@ qt_resource_struct = b"\
|
|
38475
38475
|
\x00\x00\x06b\x00\x01\x00\x00\x00\x01\x00\x02X+\
|
38476
38476
|
\x00\x00\x01\x8b\xd7}+~\
|
38477
38477
|
\x00\x00\x00\x9c\x00\x01\x00\x00\x00\x01\x00\x00&x\
|
38478
|
-
\x00\x00\x01\
|
38478
|
+
\x00\x00\x01\x97\x08\x82\x1d\x17\
|
38479
38479
|
\x00\x00\x0d\x90\x00\x00\x00\x00\x00\x01\x00\x04\xc7%\
|
38480
38480
|
\x00\x00\x01\x88\xae\xf9[-\
|
38481
38481
|
\x00\x00\x0c&\x00\x00\x00\x00\x00\x01\x00\x04Cm\
|