GridCal 5.1.12__tar.gz → 5.1.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/object_plot_analysis.py +73 -5
  2. GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_ac_line.py +38 -0
  3. GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_dc_line.py +38 -0
  4. GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_fluid_path.py +39 -0
  5. GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget/Branches/map_hvdc_line.py +38 -0
  6. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_container.py +17 -6
  7. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/map_line_segment.py +22 -4
  8. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_graphic_item.py +3 -3
  9. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/node_template.py +5 -4
  10. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/substation_graphic_item.py +26 -8
  11. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/voltage_level_graphic_item.py +12 -2
  12. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/open_street_map.py +3 -3
  13. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/base_tiles.py +82 -5
  14. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/grid_map_widget.py +376 -155
  15. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/map_widget.py +105 -20
  16. GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget2/map_widget.py +1871 -0
  17. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/matplotlibwidget.py +14 -9
  18. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/schematic_widget.py +19 -104
  19. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/base_diagram_widget.py +82 -14
  20. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/generic_graphics.py +3 -3
  21. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/io.py +9 -7
  22. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +4 -4
  23. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/__version__.py +1 -1
  24. GridCal-5.1.13/GridCal/data/__init__.py +0 -0
  25. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/sequence_lines.csv +1 -4
  26. {GridCal-5.1.12 → GridCal-5.1.13}/PKG-INFO +1 -1
  27. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ExecuteGridCal.py +0 -0
  28. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  29. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  30. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  31. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  32. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  33. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  34. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/__init__.py +0 -0
  35. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/gui.py +0 -0
  36. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  37. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  38. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  39. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  40. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  41. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  42. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ConsoleWidget.py +0 -0
  43. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  44. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  45. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  46. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  47. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  48. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  49. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  50. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  51. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  52. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  53. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Branches/__init__.py +0 -0
  54. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/__init__.py +0 -0
  55. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/image_layer.py +0 -0
  56. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/layer_types.py +0 -0
  57. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/place.py +0 -0
  58. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/point_layer.py +0 -0
  59. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/polygon_layer.py +0 -0
  60. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/polyline_layer.py +0 -0
  61. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Layers/text_layer.py +0 -0
  62. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Substation/__init__.py +0 -0
  63. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/__init__.py +0 -0
  64. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/blue_marble.py +0 -0
  65. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/cartodb.py +0 -0
  66. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/gmt_local.py +0 -0
  67. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapbox.py +0 -0
  68. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/mapquest.py +0 -0
  69. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_toner.py +0 -0
  70. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_transport.py +0 -0
  71. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  72. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/__init__.py +0 -0
  73. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/default_tile_data.py +0 -0
  74. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/pycacheback.py +0 -0
  75. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tile_worker.py +0 -0
  76. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles.py +0 -0
  77. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/Tiles/tiles_cache.py +0 -0
  78. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/__init__.py +0 -0
  79. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/logger.py +0 -0
  80. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/map_events.py +0 -0
  81. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/MapWidget/node_widget.py +0 -0
  82. {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Branches → GridCal-5.1.13/GridCal/Gui/Diagrams/MapWidget2}/__init__.py +0 -0
  83. {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Fluid → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Branches}/__init__.py +0 -0
  84. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/dc_line_graphics.py +0 -0
  85. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/hvdc_graphics.py +0 -0
  86. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_editor.py +0 -0
  87. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics.py +0 -0
  88. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/line_graphics_template.py +0 -0
  89. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/series_reactance_graphics.py +0 -0
  90. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/switch_graphics.py +0 -0
  91. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer2w_graphics.py +0 -0
  92. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer3w_graphics.py +0 -0
  93. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_editor.py +0 -0
  94. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/transformer_taps_editor.py +0 -0
  95. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/upfc_graphics.py +0 -0
  96. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/vsc_graphics.py +0 -0
  97. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Branches/winding_graphics.py +0 -0
  98. {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Injections → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Fluid}/__init__.py +0 -0
  99. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_node_graphics.py +0 -0
  100. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_p2x_graphics.py +0 -0
  101. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_path_graphics.py +0 -0
  102. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_pump_graphics.py +0 -0
  103. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Fluid/fluid_turbine_graphics.py +0 -0
  104. {GridCal-5.1.12/GridCal/Gui/Diagrams/SchematicWidget/Substation → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Injections}/__init__.py +0 -0
  105. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/battery_graphics.py +0 -0
  106. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_editor.py +0 -0
  107. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/controllable_shunt_graphics.py +0 -0
  108. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/current_injection_graphics.py +0 -0
  109. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/external_grid_graphics.py +0 -0
  110. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_editor.py +0 -0
  111. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/generator_graphics.py +0 -0
  112. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/injections_template_graphics.py +0 -0
  113. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/load_graphics.py +0 -0
  114. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/shunt_graphics.py +0 -0
  115. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Injections/static_generator_graphics.py +0 -0
  116. {GridCal-5.1.12/GridCal/Gui/Diagrams → GridCal-5.1.13/GridCal/Gui/Diagrams/SchematicWidget/Substation}/__init__.py +0 -0
  117. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/bus_graphics.py +0 -0
  118. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/busbar_graphics.py +0 -0
  119. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/Substation/cn_graphics.py +0 -0
  120. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/__init__.py +0 -0
  121. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/SchematicWidget/terminal_item.py +0 -0
  122. {GridCal-5.1.12/GridCal/Gui/GridGenerator → GridCal-5.1.13/GridCal/Gui/Diagrams}/__init__.py +0 -0
  123. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/diagrams_model.py +0 -0
  124. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Diagrams/graphics_manager.py +0 -0
  125. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GeneralDialogues.py +0 -0
  126. {GridCal-5.1.12/GridCal/Gui/LoadDesigner → GridCal-5.1.13/GridCal/Gui/GridGenerator}/__init__.py +0 -0
  127. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  128. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/gui.py +0 -0
  129. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  130. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  131. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/GuiFunctions.py +0 -0
  132. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Model → GridCal-5.1.13/GridCal/Gui/LoadDesigner}/__init__.py +0 -0
  133. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  134. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  135. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  136. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  137. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  138. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  139. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/GridCalMain.py +0 -0
  140. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/MainWindow.py +0 -0
  141. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Results → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Model}/__init__.py +0 -0
  142. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  143. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +0 -0
  144. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/objects.py +0 -0
  145. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Model/time_events.py +0 -0
  146. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  147. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Scripting → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Results}/__init__.py +0 -0
  148. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  149. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Server → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Scripting}/__init__.py +0 -0
  150. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  151. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -0
  152. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses/Settings → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Server}/__init__.py +0 -0
  153. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Server/server.py +0 -0
  154. {GridCal-5.1.12/GridCal/Gui/Main/SubClasses → GridCal-5.1.13/GridCal/Gui/Main/SubClasses/Settings}/__init__.py +0 -0
  155. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +0 -0
  156. {GridCal-5.1.12/GridCal/Gui/Main → GridCal-5.1.13/GridCal/Gui/Main/SubClasses}/__init__.py +0 -0
  157. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  158. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/SubClasses/simulations.py +0 -0
  159. {GridCal-5.1.12/GridCal/Gui/ProfilesInput → GridCal-5.1.13/GridCal/Gui/Main}/__init__.py +0 -0
  160. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/icons_rc.py +0 -0
  161. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/object_select_window.py +0 -0
  162. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Main/update_gui_file.py +0 -0
  163. {GridCal-5.1.12/GridCal/Gui/RosetaExplorer → GridCal-5.1.13/GridCal/Gui/ProfilesInput}/__init__.py +0 -0
  164. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  165. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  166. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  167. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  168. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  169. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  170. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  171. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  172. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  173. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  174. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  175. {GridCal-5.1.12/GridCal/Gui/SigmaAnalysis → GridCal-5.1.13/GridCal/Gui/RosetaExplorer}/__init__.py +0 -0
  176. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  177. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  178. {GridCal-5.1.12/GridCal/Gui/SolarPowerWizard → GridCal-5.1.13/GridCal/Gui/SigmaAnalysis}/__init__.py +0 -0
  179. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  180. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  181. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  182. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  183. {GridCal-5.1.12/GridCal/Gui/SyncDialogue → GridCal-5.1.13/GridCal/Gui/SolarPowerWizard}/__init__.py +0 -0
  184. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  185. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  186. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  187. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  188. {GridCal-5.1.12/GridCal/Gui/SystemScaler → GridCal-5.1.13/GridCal/Gui/SyncDialogue}/__init__.py +0 -0
  189. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  190. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  191. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  192. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  193. {GridCal-5.1.12/GridCal/Gui/TowerBuilder → GridCal-5.1.13/GridCal/Gui/SystemScaler}/__init__.py +0 -0
  194. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  195. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/system_scaler.py +0 -0
  196. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  197. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  198. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  199. {GridCal-5.1.12/GridCal/Gui/TreeModelViewer → GridCal-5.1.13/GridCal/Gui/TowerBuilder}/__init__.py +0 -0
  200. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  201. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  202. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  203. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  204. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  205. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  206. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  207. {GridCal-5.1.12/GridCal/Gui/Visualization → GridCal-5.1.13/GridCal/Gui/TreeModelViewer}/__init__.py +0 -0
  208. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  209. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  210. {GridCal-5.1.12/GridCal/Gui/Widgets → GridCal-5.1.13/GridCal/Gui/Visualization}/__init__.py +0 -0
  211. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Visualization/palettes.py +0 -0
  212. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Visualization/visualization.py +0 -0
  213. {GridCal-5.1.12/GridCal/Gui/WindPowerWizard → GridCal-5.1.13/GridCal/Gui/Widgets}/__init__.py +0 -0
  214. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  215. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  216. {GridCal-5.1.12/GridCal/Gui → GridCal-5.1.13/GridCal/Gui/WindPowerWizard}/__init__.py +0 -0
  217. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  218. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  219. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  220. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  221. {GridCal-5.1.12/GridCal/Session → GridCal-5.1.13/GridCal/Gui}/__init__.py +0 -0
  222. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/messages.py +0 -0
  223. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/plot_config.py +0 -0
  224. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/themes.py +0 -0
  225. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/update_gui_all.py +0 -0
  226. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Gui/update_gui_common.py +0 -0
  227. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/LICENSE.txt +0 -0
  228. {GridCal-5.1.12/GridCal/ThirdParty → GridCal-5.1.13/GridCal/Session}/__init__.py +0 -0
  229. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/export_results_driver.py +0 -0
  230. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/file_handler.py +0 -0
  231. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/results_model.py +0 -0
  232. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/server_driver.py +0 -0
  233. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/session.py +0 -0
  234. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/Session/synchronization_driver.py +0 -0
  235. {GridCal-5.1.12/GridCal/ThirdParty/qdarktheme/_icon → GridCal-5.1.13/GridCal/ThirdParty}/__init__.py +0 -0
  236. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/__init__.py +0 -0
  237. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_color.py +0 -0
  238. {GridCal-5.1.12/GridCal/ThirdParty/qdarktheme/_template → GridCal-5.1.13/GridCal/ThirdParty/qdarktheme/_icon}/__init__.py +0 -0
  239. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_icon/icon_engine.py +0 -0
  240. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_icon/svg.py +0 -0
  241. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_main.py +0 -0
  242. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/__init__.py +0 -0
  243. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/__init__.py +0 -0
  244. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/_accent/_mac_detect.py +0 -0
  245. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_os_appearance/listener.py +0 -0
  246. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_proxy_style.py +0 -0
  247. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/__init__.py +0 -0
  248. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/colors.py +0 -0
  249. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/palette.py +0 -0
  250. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/standard_icons.py +0 -0
  251. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/stylesheets.py +0 -0
  252. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_resources/svg.py +0 -0
  253. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_style_loader.py +0 -0
  254. {GridCal-5.1.12/GridCal/data → GridCal-5.1.13/GridCal/ThirdParty/qdarktheme/_template}/__init__.py +0 -0
  255. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_template/engine.py +0 -0
  256. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_template/filter.py +0 -0
  257. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/_util.py +0 -0
  258. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtCore/__init__.py +0 -0
  259. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtGui/__init__.py +0 -0
  260. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtSvg/__init__.py +0 -0
  261. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/QtWidgets/__init__.py +0 -0
  262. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/__init__.py +0 -0
  263. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/qt_compat.py +0 -0
  264. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/qtpy/qt_version.py +0 -0
  265. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/__init__.py +0 -0
  266. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/__main__.py +0 -0
  267. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/__init__.py +0 -0
  268. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/dock_ui.py +0 -0
  269. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/frame_ui.py +0 -0
  270. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/icons_ui.py +0 -0
  271. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/mdi_ui.py +0 -0
  272. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/_ui/widgets_ui.py +0 -0
  273. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/ThirdParty/qdarktheme/widget_gallery/main_window.py +0 -0
  274. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/__init__.py +0 -0
  275. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/cables.csv +0 -0
  276. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/transformers.csv +0 -0
  277. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/data/wires.csv +0 -0
  278. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/templates.py +0 -0
  279. {GridCal-5.1.12 → GridCal-5.1.13}/GridCal/update.py +0 -0
  280. {GridCal-5.1.12 → GridCal-5.1.13}/setup.cfg +0 -0
  281. {GridCal-5.1.12 → GridCal-5.1.13}/setup.py +0 -0
@@ -363,6 +363,22 @@ def analyze_lines(elements: List[Line],
363
363
 
364
364
  s = '[' + str(V1) + '-' + str(V2) + ']'
365
365
 
366
+ if elm.bus_from is None:
367
+ logger.add(object_type=elm.device_type.value,
368
+ element_name=elm,
369
+ element_index=i,
370
+ severity=LogSeverity.Error,
371
+ propty="bus_from",
372
+ message="The bus from is None")
373
+
374
+ if elm.bus_to is None:
375
+ logger.add(object_type=elm.device_type.value,
376
+ element_name=elm,
377
+ element_index=i,
378
+ severity=LogSeverity.Error,
379
+ propty="bus_to",
380
+ message="The bus to is None")
381
+
366
382
  if V1 > 0 and V2 > 0:
367
383
  per = V1 / V2
368
384
  if per < (1.0 - branch_connection_voltage_tolerance):
@@ -498,6 +514,22 @@ def analyze_transformers(elements: List[Transformer2W],
498
514
  """
499
515
  for i, elm in enumerate(elements):
500
516
 
517
+ if elm.bus_from is None:
518
+ logger.add(object_type=elm.device_type.value,
519
+ element_name=elm,
520
+ element_index=i,
521
+ severity=LogSeverity.Error,
522
+ propty="bus_from",
523
+ message="The bus from is None")
524
+
525
+ if elm.bus_to is None:
526
+ logger.add(object_type=elm.device_type.value,
527
+ element_name=elm,
528
+ element_index=i,
529
+ severity=LogSeverity.Error,
530
+ propty="bus_to",
531
+ message="The bus to is None")
532
+
501
533
  if elm.name == '':
502
534
  logger.add(object_type=object_type.value,
503
535
  element_name=elm.name,
@@ -759,6 +791,14 @@ def analyze_generators(elements: List[Generator],
759
791
  if time_profile is not None:
760
792
  Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
761
793
 
794
+ if obj.bus is None:
795
+ logger.add(object_type=object_type.value,
796
+ element_name=obj,
797
+ element_index=k,
798
+ severity=LogSeverity.Error,
799
+ propty="bus",
800
+ message="The bus is None")
801
+
762
802
  if obj.Vset < v_low:
763
803
  logger.add(object_type=object_type.value,
764
804
  element_name=obj,
@@ -886,6 +926,14 @@ def analyze_batteries(elements: List[Battery],
886
926
  for k, obj in enumerate(elements):
887
927
  Pg += obj.P * obj.active
888
928
 
929
+ if obj.bus is None:
930
+ logger.add(object_type=object_type.value,
931
+ element_name=obj,
932
+ element_index=k,
933
+ severity=LogSeverity.Error,
934
+ propty="bus",
935
+ message="The bus is None")
936
+
889
937
  if time_profile is not None:
890
938
  Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
891
939
 
@@ -978,7 +1026,8 @@ def analyze_batteries(elements: List[Battery],
978
1026
 
979
1027
 
980
1028
  def analyze_static_gen(elements: List[StaticGenerator],
981
- time_profile):
1029
+ time_profile,
1030
+ logger: GridErrorLog,):
982
1031
  """
983
1032
 
984
1033
  :param elements:
@@ -994,6 +1043,14 @@ def analyze_static_gen(elements: List[StaticGenerator],
994
1043
  Pg += obj.P * obj.active
995
1044
  Qg += obj.Q * obj.active
996
1045
 
1046
+ if obj.bus is None:
1047
+ logger.add(object_type=obj.device_type.value,
1048
+ element_name=obj,
1049
+ element_index=k,
1050
+ severity=LogSeverity.Error,
1051
+ propty="bus",
1052
+ message="The bus is None")
1053
+
997
1054
  if time_profile is not None:
998
1055
  Pg_prof += obj.P_prof.toarray() * obj.active_prof.toarray()
999
1056
  Qg_prof += obj.Q_prof.toarray() * obj.active_prof.toarray()
@@ -1002,7 +1059,8 @@ def analyze_static_gen(elements: List[StaticGenerator],
1002
1059
 
1003
1060
 
1004
1061
  def analyze_load(elements: List[Load],
1005
- time_profile):
1062
+ time_profile,
1063
+ logger: GridErrorLog,):
1006
1064
  """
1007
1065
 
1008
1066
  :param elements:
@@ -1014,10 +1072,18 @@ def analyze_load(elements: List[Load],
1014
1072
  Pl_prof = 0.0
1015
1073
  Ql_prof = 0.0
1016
1074
 
1017
- for elm in elements:
1075
+ for k, elm in enumerate(elements):
1018
1076
  Pl += elm.P * elm.active
1019
1077
  Ql += elm.Q * elm.active
1020
1078
 
1079
+ if elm.bus is None:
1080
+ logger.add(object_type=elm.device_type.value,
1081
+ element_name=elm,
1082
+ element_index=k,
1083
+ severity=LogSeverity.Error,
1084
+ propty="bus",
1085
+ message="The bus is None")
1086
+
1021
1087
  if time_profile is not None:
1022
1088
  Pl_prof += elm.P_prof.toarray() * elm.active_prof.toarray()
1023
1089
  Ql_prof += elm.Q_prof.toarray() * elm.active_prof.toarray()
@@ -1124,7 +1190,8 @@ def grid_analysis(circuit: MultiCircuit,
1124
1190
  Pg_prof += Pgb_prof
1125
1191
 
1126
1192
  Pgs, Qgs, Pgs_prof, Qgs_prof = analyze_static_gen(elements=circuit.get_static_generators(),
1127
- time_profile=circuit.get_time_array())
1193
+ time_profile=circuit.get_time_array(),
1194
+ logger=logger)
1128
1195
 
1129
1196
  Pg += Pgs
1130
1197
  Pg_prof += Pgs_prof
@@ -1132,7 +1199,8 @@ def grid_analysis(circuit: MultiCircuit,
1132
1199
  Qg_prof += Qgs_prof
1133
1200
 
1134
1201
  Pll, Qll, Pll_prof, Qll_prof = analyze_load(elements=circuit.get_loads(),
1135
- time_profile=circuit.get_time_array())
1202
+ time_profile=circuit.get_time_array(),
1203
+ logger=logger)
1136
1204
 
1137
1205
  Pl += Pll
1138
1206
  Pl_prof += Pll_prof
@@ -0,0 +1,38 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ from __future__ import annotations
18
+ from typing import TYPE_CHECKING
19
+ from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
20
+ from GridCalEngine.Devices.Branches.line import Line
21
+
22
+ if TYPE_CHECKING:
23
+ from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
24
+
25
+
26
+ class MapAcLine(MapLineContainer):
27
+
28
+ def __init__(self,
29
+ editor: GridMapWidget,
30
+ api_object: Line,
31
+ draw_labels: bool = True):
32
+ """
33
+
34
+ :param editor:
35
+ :param api_object:
36
+ :param draw_labels:
37
+ """
38
+ MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
@@ -0,0 +1,38 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ from __future__ import annotations
18
+ from typing import TYPE_CHECKING
19
+ from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
20
+ from GridCalEngine.Devices.Branches.dc_line import DcLine
21
+
22
+ if TYPE_CHECKING:
23
+ from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
24
+
25
+
26
+ class MapDcLine(MapLineContainer):
27
+
28
+ def __init__(self,
29
+ editor: GridMapWidget,
30
+ api_object: DcLine,
31
+ draw_labels: bool = True):
32
+ """
33
+
34
+ :param editor:
35
+ :param api_object:
36
+ :param draw_labels:
37
+ """
38
+ MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
@@ -0,0 +1,39 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ from __future__ import annotations
18
+ from typing import TYPE_CHECKING
19
+ from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
20
+ from GridCalEngine.Devices.Fluid.fluid_path import FluidPath
21
+
22
+ if TYPE_CHECKING:
23
+ from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
24
+
25
+
26
+ class MapFluidPathLine(MapLineContainer):
27
+
28
+ def __init__(self,
29
+ editor: GridMapWidget,
30
+ api_object: FluidPath,
31
+ draw_labels: bool = True):
32
+ """
33
+
34
+ :param editor:
35
+ :param api_object:
36
+ :param draw_labels:
37
+ """
38
+ MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
39
+
@@ -0,0 +1,38 @@
1
+ # GridCal
2
+ # Copyright (C) 2015 - 2024 Santiago Peñate Vera
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 3 of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program; if not, write to the Free Software Foundation,
16
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ from __future__ import annotations
18
+ from typing import TYPE_CHECKING
19
+ from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
20
+ from GridCalEngine.Devices.Branches.hvdc_line import HvdcLine
21
+
22
+ if TYPE_CHECKING:
23
+ from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
24
+
25
+
26
+ class MapHvdcLine(MapLineContainer):
27
+
28
+ def __init__(self,
29
+ editor: GridMapWidget,
30
+ api_object: HvdcLine,
31
+ draw_labels: bool = True):
32
+ """
33
+
34
+ :param editor:
35
+ :param api_object:
36
+ :param draw_labels:
37
+ """
38
+ MapLineContainer.__init__(self, editor=editor, api_object=api_object, draw_labels=draw_labels)
@@ -24,12 +24,11 @@ from PySide6.QtGui import QColor, QPen
24
24
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_segment import MapLineSegment
25
25
  from GridCalEngine.Devices import LineLocation
26
26
  from GridCalEngine.Devices.Diagrams.base_diagram import PointsGroup
27
- from GridCalEngine.Devices.types import BRANCH_TYPES
27
+ from GridCalEngine.Devices.types import BRANCH_TYPES, FluidPath
28
28
  from GridCalEngine.Devices.Branches.line import Line
29
29
  from GridCalEngine.enumerations import DeviceType
30
30
  from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
31
31
 
32
-
33
32
  if TYPE_CHECKING:
34
33
  from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGraphicItem
35
34
  from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import SubstationGraphicItem
@@ -44,7 +43,7 @@ class MapLineContainer(GenericDiagramWidget):
44
43
 
45
44
  def __init__(self,
46
45
  editor: GridMapWidget,
47
- api_object: BRANCH_TYPES,
46
+ api_object: Union[BRANCH_TYPES, FluidPath],
48
47
  draw_labels: bool = True):
49
48
  """
50
49
 
@@ -64,6 +63,16 @@ class MapLineContainer(GenericDiagramWidget):
64
63
  self.enabled = True
65
64
  self.original = True
66
65
 
66
+ def setWidthScale(self, val: float):
67
+ """
68
+ Set the width scale of the line
69
+ :param val:
70
+ """
71
+ for segment in self.segments_list:
72
+ pen = segment.pen() # get the current pen
73
+ pen.setWidthF(val) # Set the fractional thickness of the line
74
+ segment.setPen(pen) # Assign the pen to the line item
75
+
67
76
  def clean_segments(self) -> None:
68
77
  """
69
78
  Remove all segments from the scene
@@ -187,10 +196,14 @@ class MapLineContainer(GenericDiagramWidget):
187
196
  self.redraw_segments()
188
197
 
189
198
  def removeNode(self, node: NodeGraphicItem):
199
+ """
190
200
 
201
+ :param node:
202
+ :return:
203
+ """
191
204
  for seg in self.segments_list:
192
205
  if seg.first.api_object == node.api_object or seg.second.api_object == node.api_object:
193
- self.editor.diagram_scene.removeItem(seg)
206
+ self.editor.map.diagram_scene.removeItem(seg)
194
207
 
195
208
  self.nodes_list.remove(node)
196
209
 
@@ -402,5 +415,3 @@ class MapLineContainer(GenericDiagramWidget):
402
415
 
403
416
  for line in self.segments_list:
404
417
  line.set_enable(val=False)
405
-
406
-
@@ -19,13 +19,17 @@ from typing import TYPE_CHECKING
19
19
  from PySide6.QtCore import Qt
20
20
  from PySide6.QtGui import QPen, QColor, QCursor
21
21
  from PySide6.QtWidgets import QMenu, QGraphicsSceneContextMenuEvent
22
- from PySide6.QtWidgets import QGraphicsLineItem
23
- from GridCalEngine.Devices.types import BRANCH_TYPES
22
+ from PySide6.QtWidgets import QGraphicsLineItem, QGraphicsSceneMouseEvent
23
+
24
24
  from GridCal.Gui.GuiFunctions import add_menu_entry
25
25
  from GridCal.Gui.messages import yes_no_question
26
26
  from GridCal.Gui.Diagrams.generic_graphics import ACTIVE, DEACTIVATED, OTHER
27
27
  from GridCal.Gui.Diagrams.SchematicWidget.Branches.line_editor import LineEditor
28
28
 
29
+ from GridCalEngine.Devices.types import BRANCH_TYPES
30
+ from GridCalEngine.enumerations import DeviceType
31
+
32
+
29
33
  if TYPE_CHECKING:
30
34
  from GridCal.Gui.Diagrams.MapWidget.Substation.node_graphic_item import NodeGraphicItem
31
35
  from GridCal.Gui.Diagrams.MapWidget.Branches.map_line_container import MapLineContainer
@@ -51,8 +55,8 @@ class MapLineSegment(QGraphicsLineItem):
51
55
 
52
56
  self.style = Qt.SolidLine
53
57
  self.color = Qt.blue
54
- self.width = 1
55
- self.lineWidth = 3
58
+ self.width = 0
59
+ self.lineWidth = 1
56
60
  self.scaleSegment = self.lineWidth
57
61
  self.setScale(self.scaleSegment)
58
62
 
@@ -119,6 +123,20 @@ class MapLineSegment(QGraphicsLineItem):
119
123
  self.first.needsUpdate = False
120
124
  self.second.needsUpdate = False
121
125
 
126
+ def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
127
+ """
128
+ mouse press: display the editor
129
+ :param event:
130
+ :return:
131
+ """
132
+ if self.api_object is not None:
133
+ self.editor.set_editor_model(api_object=self.api_object,
134
+ dictionary_of_lists={
135
+ DeviceType.BusDevice: self.editor.circuit.get_buses(),
136
+ DeviceType.ConnectivityNodeDevice: self.editor.circuit.get_connectivity_nodes(),
137
+ DeviceType.BranchGroupDevice: self.editor.circuit.get_branch_groups()
138
+ })
139
+
122
140
  def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
123
141
  """
124
142
 
@@ -161,7 +161,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
161
161
  super().mousePressEvent(event)
162
162
 
163
163
  if self.enabled:
164
- self.editor.disableMove = True
164
+ self.editor.map.view.disableMove = True
165
165
  if event.button() == Qt.RightButton:
166
166
  pass
167
167
  elif event.button() == Qt.LeftButton:
@@ -174,7 +174,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
174
174
  super().mouseReleaseEvent(event)
175
175
  self.editor.disableMove = True
176
176
  self.updateDiagram()
177
- self.editor.diagram_scene.update()
177
+ self.editor.map.view._scene.update()
178
178
 
179
179
  def hoverEnterEvent(self, event: QtWidgets.QGraphicsSceneHoverEvent) -> None:
180
180
  """
@@ -230,7 +230,7 @@ class NodeGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
230
230
  :return:
231
231
  """
232
232
  if not self.itemSelected:
233
- self.editor.selectedItems.append(self)
233
+ self.editor.map.view.selectedItems.append(self)
234
234
  self.setNodeColor(QColor(Qt.yellow), QColor(Qt.yellow))
235
235
  self.itemSelected = True
236
236
 
@@ -17,12 +17,13 @@
17
17
  from __future__ import annotations
18
18
  from typing import Union, TYPE_CHECKING
19
19
  from PySide6.QtCore import QPointF
20
- from GridCalEngine.Devices.types import ALL_DEV_TYPES
20
+
21
21
  from GridCal.Gui.Diagrams.generic_graphics import GenericDiagramWidget
22
22
 
23
+ from GridCalEngine.Devices.types import ALL_DEV_TYPES
24
+
23
25
  if TYPE_CHECKING: # Only imports the below statements during type checking
24
- from GridCal.Gui.Diagrams.SchematicWidget.schematic_widget import SchematicWidget
25
- from GridCal.Gui.Diagrams.MapWidget.map_widget import MapWidget
26
+ from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
26
27
 
27
28
 
28
29
  class NodeTemplate(GenericDiagramWidget):
@@ -32,7 +33,7 @@ class NodeTemplate(GenericDiagramWidget):
32
33
 
33
34
  def __init__(self,
34
35
  api_object: ALL_DEV_TYPES = None,
35
- editor: Union[SchematicWidget, MapWidget, None] = None,
36
+ editor: Union[GridMapWidget, None] = None,
36
37
  draw_labels: bool = True,
37
38
  needsUpdate: bool = True,
38
39
  lat: float = 0.0,
@@ -20,9 +20,11 @@ from PySide6 import QtWidgets
20
20
  from PySide6.QtWidgets import QApplication, QMenu, QGraphicsSceneContextMenuEvent, QGraphicsSceneMouseEvent
21
21
  from PySide6.QtCore import Qt, QPointF
22
22
  from PySide6.QtGui import QBrush, QColor
23
+ from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
23
24
  from GridCal.Gui.GuiFunctions import add_menu_entry
25
+
24
26
  from GridCalEngine.Devices.Substation.substation import Substation
25
- from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
27
+ from GridCalEngine.enumerations import DeviceType
26
28
 
27
29
  if TYPE_CHECKING: # Only imports the below statements during type checking
28
30
  from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
@@ -68,7 +70,13 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
68
70
  self.setRect(0.0, 0.0, r, r)
69
71
  self.lat = lat
70
72
  self.lon = lon
71
- self.x, self.y = editor.to_x_y(lat=lat, lon=lon)
73
+
74
+ if lat is not None and lon is not None:
75
+ self.x, self.y = self.editor.to_x_y(lat=lat, lon=lon)
76
+ else:
77
+ self.x = 0
78
+ self.y = 0
79
+
72
80
  self.radius = r
73
81
 
74
82
  self.resize(r)
@@ -111,7 +119,7 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
111
119
 
112
120
  def updatePosition(self) -> None:
113
121
  """
114
-
122
+
115
123
  :return:
116
124
  """
117
125
  real_position = self.pos()
@@ -138,23 +146,33 @@ class SubstationGraphicItem(QtWidgets.QGraphicsRectItem, NodeTemplate):
138
146
  """
139
147
  Event handler for mouse move events.
140
148
  """
141
- super().mouseMoveEvent(event)
149
+
142
150
  if self.hovered:
151
+ super().mouseMoveEvent(event)
143
152
  self.updatePosition()
144
153
  self.editor.update_connectors()
145
154
 
146
- def mousePressEvent(self, event):
155
+ def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
147
156
  """
148
157
  Event handler for mouse press events.
149
158
  """
150
- super().mousePressEvent(event)
151
- self.editor.disableMove = True
159
+ self.editor.map.view.disableMove = True
160
+
161
+ if self.api_object is not None:
162
+ self.editor.set_editor_model(api_object=self.api_object,
163
+ dictionary_of_lists={
164
+ DeviceType.CountryDevice: self.editor.circuit.get_countries(),
165
+ DeviceType.CommunityDevice: self.editor.circuit.get_communities(),
166
+ DeviceType.RegionDevice: self.editor.circuit.get_regions(),
167
+ DeviceType.MunicipalityDevice: self.editor.circuit.get_municipalities(),
168
+ DeviceType.AreaDevice: self.editor.circuit.get_areas(),
169
+ DeviceType.ZoneDevice: self.editor.circuit.get_zones(),
170
+ })
152
171
 
153
172
  def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent):
154
173
  """
155
174
  Event handler for mouse release events.
156
175
  """
157
- super().mouseReleaseEvent(event)
158
176
  self.editor.disableMove = True
159
177
  self.updateDiagram() # always update
160
178
 
@@ -19,9 +19,13 @@ from typing import TYPE_CHECKING, Tuple
19
19
  from PySide6 import QtWidgets
20
20
  from PySide6.QtCore import Qt, QPointF
21
21
  from PySide6.QtGui import QBrush, QColor
22
- from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
22
+ from PySide6.QtWidgets import QGraphicsSceneMouseEvent
23
23
  from GridCal.Gui.Diagrams.MapWidget.Substation.node_template import NodeTemplate
24
24
 
25
+ from GridCalEngine.Devices.Substation.voltage_level import VoltageLevel
26
+ from GridCalEngine.enumerations import DeviceType
27
+
28
+
25
29
  if TYPE_CHECKING: # Only imports the below statements during type checking
26
30
  from GridCal.Gui.Diagrams.MapWidget.grid_map_widget import GridMapWidget
27
31
  from GridCal.Gui.Diagrams.MapWidget.Substation.substation_graphic_item import SubstationGraphicItem
@@ -131,7 +135,7 @@ class VoltageLevelGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
131
135
  self.updatePosition()
132
136
  self.editor.update_connectors()
133
137
 
134
- def mousePressEvent(self, event):
138
+ def mousePressEvent(self, event: QGraphicsSceneMouseEvent):
135
139
  """
136
140
  Event handler for mouse press events.
137
141
  """
@@ -139,6 +143,12 @@ class VoltageLevelGraphicItem(QtWidgets.QGraphicsEllipseItem, NodeTemplate):
139
143
  self.editor.disableMove = True
140
144
  self.updateDiagram() # always update
141
145
 
146
+ if self.api_object is not None:
147
+ self.editor.set_editor_model(api_object=self.api_object,
148
+ dictionary_of_lists={
149
+ DeviceType.SubstationDevice: self.editor.circuit.get_substations(),
150
+ })
151
+
142
152
  def mouseReleaseEvent(self, event):
143
153
  """
144
154
  Event handler for mouse release events.
@@ -43,7 +43,7 @@ class OsmTiles(Tiles):
43
43
  self.level = min(self.levels)
44
44
  self.num_tiles_x, self.num_tiles_y, self.ppd_x, self.ppd_y = self.GetInfo(self.level)
45
45
 
46
- def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[float, float]:
46
+ def Geo2Tile(self, longitude: float, latitude: float) -> Tuple[int, int]:
47
47
  """
48
48
  Convert geo to tile fractional coordinates for level in use.
49
49
  geo tuple of geo coordinates (xgeo, ygeo)
@@ -52,8 +52,8 @@ class OsmTiles(Tiles):
52
52
  """
53
53
  lat_rad = math.radians(latitude)
54
54
  n = 2.0 ** self.level
55
- xtile = (longitude + 180.0) / 360.0 * n
56
- ytile = ((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n
55
+ xtile = int((longitude + 180.0) / 360.0 * n)
56
+ ytile = int(((1.0 - math.log(math.tan(lat_rad) + (1.0 / math.cos(lat_rad))) / math.pi) / 2.0) * n)
57
57
 
58
58
  return xtile, ytile
59
59