GridCal 5.0.18__tar.gz → 5.0.21__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 (260) hide show
  1. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/object_plot_analysis.py +5 -5
  2. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/dc_line_graphics.py +7 -5
  3. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/hvdc_graphics.py +9 -6
  4. {GridCal-5.0.18/GridCal/Gui/NodeBreakerEditorWidget → GridCal-5.0.21/GridCal/Gui/BusBranchEditorWidget}/Branches/line_editor.py +16 -2
  5. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/line_graphics.py +39 -30
  6. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/line_graphics_template.py +279 -148
  7. GridCal-5.0.21/GridCal/Gui/BusBranchEditorWidget/Branches/series_reactance_graphics.py +104 -0
  8. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/switch_graphics.py +6 -6
  9. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/transformer2w_graphics.py +8 -7
  10. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/transformer3w_graphics.py +0 -1
  11. {GridCal-5.0.18/GridCal/Gui/NodeBreakerEditorWidget → GridCal-5.0.21/GridCal/Gui/BusBranchEditorWidget}/Branches/transformer_editor.py +1 -1
  12. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/upfc_graphics.py +5 -5
  13. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/vsc_graphics.py +5 -5
  14. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/winding_graphics.py +7 -7
  15. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/fluid_node_graphics.py +16 -11
  16. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/fluid_p2x_graphics.py +1 -17
  17. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/fluid_path_graphics.py +6 -107
  18. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/fluid_pump_graphics.py +1 -17
  19. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/fluid_turbine_graphics.py +1 -17
  20. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/battery_graphics.py +1 -17
  21. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/controllable_shunt_graphics.py +1 -17
  22. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/current_injection_graphics.py +1 -17
  23. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/external_grid_graphics.py +1 -17
  24. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/generator_graphics.py +2 -18
  25. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/injections_template_graphics.py +8 -8
  26. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/load_graphics.py +1 -17
  27. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/shunt_graphics.py +1 -29
  28. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/static_generator_graphics.py +1 -17
  29. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Substation/bus_graphics.py +92 -80
  30. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/bus_branch_editor_widget.py +734 -437
  31. {GridCal-5.0.18/GridCal/Gui/NodeBreakerEditorWidget → GridCal-5.0.21/GridCal/Gui/BusBranchEditorWidget}/generic_graphics.py +1 -1
  32. GridCal-5.0.21/GridCal/Gui/BusBranchEditorWidget/terminal_item.py +248 -0
  33. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GuiFunctions.py +202 -29
  34. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/GridCalMain.py +0 -9
  35. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/MainWindow.py +436 -773
  36. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Model/diagrams.py +43 -5
  37. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Model/objects.py +152 -92
  38. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Model/time_events.py +13 -2
  39. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Scripting/scripting.py +0 -1
  40. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Settings/configuration.py +48 -51
  41. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/io.py +1 -0
  42. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/simulations.py +83 -224
  43. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/icons_rc.py +591 -39
  44. GridCal-5.0.21/GridCal/Gui/MapWidget/Schema/Connector.py +53 -0
  45. GridCal-5.0.21/GridCal/Gui/MapWidget/Schema/Nodes.py +149 -0
  46. GridCal-5.0.21/GridCal/Gui/MapWidget/Schema/SchemaManager.py +45 -0
  47. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/grid_map_widget.py +182 -47
  48. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/map_widget.py +148 -14
  49. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/fluid_node_graphics.py +0 -13
  50. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/fluid_p2x_graphics.py +1 -1
  51. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/fluid_pump_graphics.py +1 -1
  52. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/fluid_turbine_graphics.py +1 -1
  53. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/battery_graphics.py +1 -1
  54. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/external_grid_graphics.py +1 -1
  55. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/generator_graphics.py +2 -2
  56. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/injections_template_graphics.py +1 -1
  57. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/load_graphics.py +1 -1
  58. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/shunt_graphics.py +1 -1
  59. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/static_generator_graphics.py +1 -1
  60. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Substation/bus_graphics.py +0 -24
  61. {GridCal-5.0.18/GridCal/Gui/BusBranchEditorWidget → GridCal-5.0.21/GridCal/Gui/NodeBreakerEditorWidget}/generic_graphics.py +1 -1
  62. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SystemScaler/system_scaler.py +1 -1
  63. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/results_model.py +9 -7
  64. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/__version__.py +1 -1
  65. {GridCal-5.0.18 → GridCal-5.0.21}/PKG-INFO +1 -1
  66. GridCal-5.0.18/GridCal/Gui/BusBranchEditorWidget/terminal_item.py +0 -187
  67. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/ExecuteGridCal.py +0 -0
  68. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/AboutDialogue/__init__.py +0 -0
  69. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/AboutDialogue/about_dialogue.py +0 -0
  70. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/AboutDialogue/gui.py +0 -0
  71. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/AboutDialogue/icons_rc.py +0 -0
  72. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/AboutDialogue/update_gui_file.py +0 -0
  73. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/AnalysisDialogue.py +0 -0
  74. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/__init__.py +0 -0
  75. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/gui.py +0 -0
  76. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/icons_rc.py +0 -0
  77. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Analysis/update_gui_file.py +0 -0
  78. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Branches/__init__.py +0 -0
  79. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Fluid/__init__.py +0 -0
  80. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Injections/__init__.py +0 -0
  81. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/Substation/__init__.py +0 -0
  82. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/__init__.py +0 -0
  83. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusBranchEditorWidget/matplotlibwidget.py +0 -0
  84. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusViewer/__init__.py +0 -0
  85. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusViewer/bus_viewer_dialogue.py +0 -0
  86. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusViewer/gui.py +0 -0
  87. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusViewer/icons_rc.py +0 -0
  88. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/BusViewer/update_gui_file.py +0 -0
  89. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CascadingSteps/__init__.py +0 -0
  90. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CascadingSteps/cascading_steps.py +0 -0
  91. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CascadingSteps/gui.py +0 -0
  92. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CascadingSteps/update_gui_file.py +0 -0
  93. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ConsoleWidget.py +0 -0
  94. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ContingencyPlanner/__init__.py +0 -0
  95. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ContingencyPlanner/contingency_planner_dialogue.py +0 -0
  96. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ContingencyPlanner/gui.py +0 -0
  97. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ContingencyPlanner/icons_rc.py +0 -0
  98. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ContingencyPlanner/update_gui_file.py +0 -0
  99. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CoordinatesInput/__init__.py +0 -0
  100. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CoordinatesInput/coordinates_dialogue.py +0 -0
  101. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CoordinatesInput/gui.py +0 -0
  102. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CoordinatesInput/icons_rc.py +0 -0
  103. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/CoordinatesInput/update_gui_file.py +0 -0
  104. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GeneralDialogues.py +0 -0
  105. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GridGenerator/__init__.py +0 -0
  106. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GridGenerator/grid_generator_dialogue.py +0 -0
  107. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GridGenerator/gui.py +0 -0
  108. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GridGenerator/icons_rc.py +0 -0
  109. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/GridGenerator/update_gui_file.py +0 -0
  110. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/LoadDesigner/__init__.py +0 -0
  111. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/LoadDesigner/icons_rc.py +0 -0
  112. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/LoadDesigner/load_designer.py +0 -0
  113. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/LoadDesigner/load_designer_ui.py +0 -0
  114. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/LoadDesigner/update_gui_file.py +0 -0
  115. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/ConsoleLog.py +0 -0
  116. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/ConsoleLogController.py +0 -0
  117. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Model/__init__.py +0 -0
  118. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Model/compiled_arrays.py +0 -0
  119. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/README.txt +0 -0
  120. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Results/__init__.py +0 -0
  121. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Results/results.py +0 -0
  122. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Scripting/__init__.py +0 -0
  123. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Scripting/python_highlighter.py +0 -0
  124. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/Settings/__init__.py +0 -0
  125. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/__init__.py +0 -0
  126. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/SubClasses/base_gui.py +0 -0
  127. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/__init__.py +0 -0
  128. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/object_select_window.py +0 -0
  129. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Main/update_gui_file.py +0 -0
  130. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/__init__.py +0 -0
  131. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/image_layer.py +0 -0
  132. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/layer_types.py +0 -0
  133. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/place.py +0 -0
  134. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/point_layer.py +0 -0
  135. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/polygon_layer.py +0 -0
  136. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/polyline_layer.py +0 -0
  137. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Layers/text_layer.py +0 -0
  138. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/__init__.py +0 -0
  139. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/blue_marble.py +0 -0
  140. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/cartodb.py +0 -0
  141. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/gmt_local.py +0 -0
  142. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/mapbox.py +0 -0
  143. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/mapquest.py +0 -0
  144. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/open_street_map.py +0 -0
  145. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/stamen_toner.py +0 -0
  146. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/stamen_transport.py +0 -0
  147. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/TileProviders/stamen_watercolor.py +0 -0
  148. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/__init__.py +0 -0
  149. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/base_tiles.py +0 -0
  150. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/default_tile_data.py +0 -0
  151. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/pycacheback.py +0 -0
  152. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/tile_worker.py +0 -0
  153. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/tiles.py +0 -0
  154. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/Tiles/tiles_cache.py +0 -0
  155. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/__init__.py +0 -0
  156. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/logger.py +0 -0
  157. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/map_events.py +0 -0
  158. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/MapWidget/node_widget.py +0 -0
  159. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/Rectangle_Connector.py +0 -0
  160. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/__init__.py +0 -0
  161. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/dc_line_graphics.py +0 -0
  162. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/hvdc_graphics.py +0 -0
  163. {GridCal-5.0.18/GridCal/Gui/BusBranchEditorWidget → GridCal-5.0.21/GridCal/Gui/NodeBreakerEditorWidget}/Branches/line_editor.py +0 -0
  164. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/line_graphics.py +0 -0
  165. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/line_graphics_template.py +0 -0
  166. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/switch_graphics.py +0 -0
  167. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/transformer2w_graphics.py +0 -0
  168. {GridCal-5.0.18/GridCal/Gui/BusBranchEditorWidget → GridCal-5.0.21/GridCal/Gui/NodeBreakerEditorWidget}/Branches/transformer_editor.py +0 -0
  169. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/upfc_graphics.py +0 -0
  170. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/vsc_graphics.py +0 -0
  171. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Branches/winding_graphics.py +0 -0
  172. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Connector.py +0 -0
  173. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/__init__.py +0 -0
  174. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Fluid/fluid_path_graphics.py +0 -0
  175. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Injections/__init__.py +0 -0
  176. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/Substation/__init__.py +0 -0
  177. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/__init__.py +0 -0
  178. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/matplotlibwidget.py +0 -0
  179. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/node_breaker_editor_widget.py +0 -0
  180. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/NodeBreakerEditorWidget/terminal_item.py +0 -0
  181. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/__init__.py +0 -0
  182. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/excel_dialog.py +0 -0
  183. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/excel_sheet_selection.py +0 -0
  184. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/icons_rc.py +0 -0
  185. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/models_dialogue.py +0 -0
  186. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/profile_dialogue.py +0 -0
  187. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/profiles_from_data.py +0 -0
  188. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/profiles_from_data_gui.py +0 -0
  189. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/profiles_from_models_gui.py +0 -0
  190. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/ProfilesInput/update_gui_file.py +0 -0
  191. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/ConsoleWidget.py +0 -0
  192. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/MainWindow.py +0 -0
  193. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/RosetaExplorer.py +0 -0
  194. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/__init__.py +0 -0
  195. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/icons_rc.py +0 -0
  196. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/RosetaExplorer/update_gui_file.py +0 -0
  197. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SigmaAnalysis/__init__.py +0 -0
  198. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SigmaAnalysis/gui.py +0 -0
  199. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SigmaAnalysis/icons_rc.py +0 -0
  200. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SigmaAnalysis/sigma_analysis_dialogue.py +0 -0
  201. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SigmaAnalysis/update_gui_file.py +0 -0
  202. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SolarPowerWizard/__init__.py +0 -0
  203. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SolarPowerWizard/gui.py +0 -0
  204. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SolarPowerWizard/icons_rc.py +0 -0
  205. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SolarPowerWizard/solar_power_wizzard.py +0 -0
  206. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SolarPowerWizard/update_gui_file.py +0 -0
  207. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SyncDialogue/__init__.py +0 -0
  208. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SyncDialogue/gui.py +0 -0
  209. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SyncDialogue/icons_rc.py +0 -0
  210. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SyncDialogue/sync_dialogue.py +0 -0
  211. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SyncDialogue/update_gui_file.py +0 -0
  212. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SystemScaler/__init__.py +0 -0
  213. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SystemScaler/icons_rc.py +0 -0
  214. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SystemScaler/system_scaler_ui.py +0 -0
  215. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/SystemScaler/update_gui_file.py +0 -0
  216. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/LineBuilderDialogue.py +0 -0
  217. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/__init__.py +0 -0
  218. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/gui.py +0 -0
  219. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/icons_rc.py +0 -0
  220. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/table_models.py +0 -0
  221. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/test_.py +0 -0
  222. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TowerBuilder/update_gui_file.py +0 -0
  223. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TreeModelViewer/MainWindow.py +0 -0
  224. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TreeModelViewer/TreeModelViewer.py +0 -0
  225. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TreeModelViewer/__init__.py +0 -0
  226. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TreeModelViewer/icons_rc.py +0 -0
  227. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/TreeModelViewer/update_gui_file.py +0 -0
  228. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Visualization/__init__.py +0 -0
  229. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Visualization/palettes.py +0 -0
  230. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Visualization/visualization.py +0 -0
  231. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Widgets/__init__.py +0 -0
  232. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Widgets/custom_qrangeslider.py +0 -0
  233. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/Widgets/matplotlibwidget.py +0 -0
  234. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/WindPowerWizard/__init__.py +0 -0
  235. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/WindPowerWizard/gui.py +0 -0
  236. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/WindPowerWizard/icons_rc.py +0 -0
  237. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/WindPowerWizard/update_gui_file.py +0 -0
  238. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/WindPowerWizard/wind_power_wizzard.py +0 -0
  239. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/__init__.py +0 -0
  240. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/messages.py +0 -0
  241. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/plot_config.py +0 -0
  242. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/themes.py +0 -0
  243. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/update_gui_all.py +0 -0
  244. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Gui/update_gui_common.py +0 -0
  245. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/LICENSE.txt +0 -0
  246. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/__init__.py +0 -0
  247. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/export_results_driver.py +0 -0
  248. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/file_handler.py +0 -0
  249. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/session.py +0 -0
  250. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/Session/synchronization_driver.py +0 -0
  251. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/__init__.py +0 -0
  252. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/data/__init__.py +0 -0
  253. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/data/cables.csv +0 -0
  254. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/data/sequence_lines.csv +0 -0
  255. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/data/transformers.csv +0 -0
  256. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/data/wires.csv +0 -0
  257. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/templates.py +0 -0
  258. {GridCal-5.0.18 → GridCal-5.0.21}/GridCal/update.py +0 -0
  259. {GridCal-5.0.18 → GridCal-5.0.21}/setup.cfg +0 -0
  260. {GridCal-5.0.18 → GridCal-5.0.21}/setup.py +0 -0
@@ -422,13 +422,13 @@ def grid_analysis(circuit: MultiCircuit,
422
422
  property_name='R',
423
423
  value=elm.R))
424
424
 
425
- elif elm.R == 0.0:
425
+ elif elm.R == 1e-20:
426
426
  logger.add(object_type=object_type.value,
427
427
  element_name=elm.name,
428
428
  element_index=i,
429
429
  severity=LogSeverity.Information,
430
430
  propty='R',
431
- message='The resistance is exactly zero.',
431
+ message='The resistance is practically zero.',
432
432
  val=elm.R)
433
433
  fixable_errors.append(FixableErrorOutOfRange(grid_element=elm,
434
434
  property_name='R',
@@ -436,13 +436,13 @@ def grid_analysis(circuit: MultiCircuit,
436
436
  lower_limit=eps_min,
437
437
  upper_limit=eps_max))
438
438
 
439
- if elm.X == 0.0:
439
+ if elm.X == 1e-20:
440
440
  logger.add(object_type=object_type.value,
441
441
  element_name=elm.name,
442
442
  element_index=i,
443
443
  severity=LogSeverity.Error,
444
444
  propty='X',
445
- message='The reactance is exactly zero. This hurts numerical conditioning.',
445
+ message='The reactance is practically zero. This hurts numerical conditioning.',
446
446
  val=elm.X)
447
447
  fixable_errors.append(FixableErrorOutOfRange(grid_element=elm,
448
448
  property_name='X',
@@ -456,7 +456,7 @@ def grid_analysis(circuit: MultiCircuit,
456
456
  element_index=i,
457
457
  severity=LogSeverity.Error,
458
458
  propty='B',
459
- message='There is no susceptance, this hurts numerical conditioning.',
459
+ message='There is no susceptance, this could hurt numerical conditioning.',
460
460
  val=elm.B)
461
461
  fixable_errors.append(FixableErrorOutOfRange(grid_element=elm,
462
462
  property_name='B',
@@ -229,20 +229,22 @@ class DcLineEditor(QDialog):
229
229
 
230
230
  class DcLineGraphicItem(LineGraphicTemplateItem):
231
231
 
232
- def __init__(self, fromPort: TerminalItem, toPort: TerminalItem,
232
+ def __init__(self,
233
+ from_port: TerminalItem,
234
+ to_port: TerminalItem,
233
235
  editor: BusBranchEditorWidget,
234
236
  width=5, api_object: DcLine = None):
235
237
  """
236
238
 
237
- :param fromPort:
238
- :param toPort:
239
+ :param from_port:
240
+ :param to_port:
239
241
  :param editor:
240
242
  :param width:
241
243
  :param api_object:
242
244
  """
243
245
  LineGraphicTemplateItem.__init__(self=self,
244
- fromPort=fromPort,
245
- toPort=toPort,
246
+ from_port=from_port,
247
+ to_port=to_port,
246
248
  editor=editor,
247
249
  width=width,
248
250
  api_object=api_object)
@@ -28,20 +28,23 @@ if TYPE_CHECKING: # Only imports the below statements during type checking
28
28
 
29
29
  class HvdcGraphicItem(LineGraphicTemplateItem):
30
30
 
31
- def __init__(self, fromPort: TerminalItem, toPort: TerminalItem,
32
- editor: BusBranchEditorWidget, width=5,
31
+ def __init__(self,
32
+ from_port: TerminalItem,
33
+ to_port: TerminalItem,
34
+ editor: BusBranchEditorWidget,
35
+ width=5,
33
36
  api_object: HvdcLine = None):
34
37
  """
35
38
 
36
- :param fromPort:
37
- :param toPort:
39
+ :param from_port:
40
+ :param to_port:
38
41
  :param editor:
39
42
  :param width:
40
43
  :param api_object:
41
44
  """
42
45
  LineGraphicTemplateItem.__init__(self=self,
43
- fromPort=fromPort,
44
- toPort=toPort,
46
+ from_port=from_port,
47
+ to_port=to_port,
45
48
  editor=editor,
46
49
  width=width,
47
50
  api_object=api_object)
@@ -18,7 +18,7 @@ import numpy as np
18
18
 
19
19
  from typing import Union, List
20
20
  from PySide6.QtCore import Qt
21
- from PySide6.QtWidgets import QPushButton, QVBoxLayout, QDialog, QLabel, QDoubleSpinBox, QComboBox
21
+ from PySide6.QtWidgets import QPushButton, QVBoxLayout, QDialog, QLabel, QDoubleSpinBox, QComboBox, QCheckBox
22
22
  from GridCal.Gui.GuiFunctions import get_list_model
23
23
  from GridCalEngine.Devices.Branches.line import Line, SequenceLineType, OverheadLineType, UndergroundLineType
24
24
 
@@ -150,6 +150,12 @@ class LineEditor(QDialog):
150
150
  self.b_spinner.setDecimals(6)
151
151
  self.b_spinner.setValue(B)
152
152
 
153
+ # apply to profile
154
+ self.apply_to_profile = QCheckBox()
155
+ self.apply_to_profile.setToolTip("Apply the newly computed values like the rating to the profile")
156
+ self.apply_to_profile.setChecked(True)
157
+ self.apply_to_profile.setText("Apply to profiles")
158
+
153
159
  # accept button
154
160
  self.accept_btn = QPushButton()
155
161
  self.accept_btn.setText('Accept')
@@ -177,6 +183,8 @@ class LineEditor(QDialog):
177
183
  self.layout.addWidget(QLabel("B: Susceptance [uS/Km]"))
178
184
  self.layout.addWidget(self.b_spinner)
179
185
 
186
+ self.layout.addWidget(self.apply_to_profile)
187
+
180
188
  self.layout.addWidget(self.accept_btn)
181
189
 
182
190
  self.setLayout(self.layout)
@@ -206,9 +214,15 @@ class LineEditor(QDialog):
206
214
  self.line.R = np.round(R / Zbase, 6)
207
215
  self.line.X = np.round(X / Zbase, 6)
208
216
  self.line.B = np.round(B / Ybase, 6)
209
- self.line.rate = np.round(I * Vf * 1.73205080757, 6) # nominal power in MVA = kA * kV * sqrt(3)
217
+ old_rate = float(self.line.rate)
218
+ new_rate = np.round(I * Vf * 1.73205080757, 6) # nominal power in MVA = kA * kV * sqrt(3)
219
+ self.line.rate = new_rate
210
220
  self.line.length = length
211
221
 
222
+ if self.apply_to_profile.isChecked():
223
+ prof_old = self.line.rate_prof.toarray()
224
+ self.line.rate_prof.set(prof_old * new_rate / old_rate)
225
+
212
226
  self.accept()
213
227
 
214
228
  def load_template(self, template):
@@ -18,7 +18,7 @@ from __future__ import annotations
18
18
  from typing import TYPE_CHECKING, Union
19
19
  from PySide6.QtCore import Qt, QRectF
20
20
  from PySide6.QtGui import QPen, QIcon, QPixmap, QBrush
21
- from PySide6.QtWidgets import QMenu, QGraphicsRectItem
21
+ from PySide6.QtWidgets import QMenu, QGraphicsRectItem, QGraphicsSceneContextMenuEvent
22
22
  from GridCal.Gui.BusBranchEditorWidget.Substation.bus_graphics import TerminalItem
23
23
  from GridCal.Gui.BusBranchEditorWidget.Branches.line_editor import LineEditor
24
24
  from GridCal.Gui.messages import yes_no_question, warning_msg
@@ -36,22 +36,22 @@ class LineGraphicItem(LineGraphicTemplateItem):
36
36
  """
37
37
 
38
38
  def __init__(self,
39
- fromPort: TerminalItem,
40
- toPort: Union[TerminalItem, None],
39
+ from_port: TerminalItem,
40
+ to_port: Union[TerminalItem, None],
41
41
  editor: BusBranchEditorWidget,
42
42
  width=5,
43
43
  api_object: Line = None):
44
44
  """
45
45
 
46
- :param fromPort:
47
- :param toPort:
46
+ :param from_port:
47
+ :param to_port:
48
48
  :param editor:
49
49
  :param width:
50
50
  :param api_object:
51
51
  """
52
52
  LineGraphicTemplateItem.__init__(self,
53
- fromPort=fromPort,
54
- toPort=toPort,
53
+ from_port=from_port,
54
+ to_port=to_port,
55
55
  editor=editor,
56
56
  width=width,
57
57
  api_object=api_object)
@@ -108,7 +108,7 @@ class LineGraphicItem(LineGraphicTemplateItem):
108
108
  # change state
109
109
  self.enable_disable_toggle()
110
110
 
111
- def contextMenuEvent(self, event):
111
+ def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
112
112
  """
113
113
  Show context menu
114
114
  @param event:
@@ -206,29 +206,16 @@ class LineGraphicItem(LineGraphicTemplateItem):
206
206
  toupfc.setIcon(toupfc_icon)
207
207
  toupfc.triggered.connect(self.to_upfc)
208
208
 
209
- menu.exec_(event.screenPos())
209
+ toser = menu.addAction('Series reactance')
210
+ toser_icon = QIcon()
211
+ toser_icon.addPixmap(QPixmap(":/Icons/icons/to_series_reactance.svg"))
212
+ toser.setIcon(toser_icon)
213
+ toser.triggered.connect(self.to_series_reactance)
214
+
215
+ menu.exec(event.screenPos())
210
216
  else:
211
217
  pass
212
218
 
213
- def enable_disable_toggle(self):
214
- """
215
-
216
- @return:
217
- """
218
- if self.api_object is not None:
219
- if self.api_object.active:
220
- self.set_enable(False)
221
- else:
222
- self.set_enable(True)
223
-
224
- if self.editor.circuit.has_time_series:
225
- ok = yes_no_question('Do you want to update the time series active status accordingly?',
226
- 'Update time series active status')
227
-
228
- if ok:
229
- # change the bus state (time series)
230
- self.editor.set_active_status_to_profile(self.api_object, override_question=True)
231
-
232
219
  def plot_profiles(self):
233
220
  """
234
221
  Plot the time series profiles
@@ -332,7 +319,8 @@ class LineGraphicItem(LineGraphicTemplateItem):
332
319
  :return:
333
320
  """
334
321
  if self.api_object.convertible_to_vsc():
335
- ok = yes_no_question('Are you sure that you want to convert this line into a VSC device?', 'Convert line')
322
+ ok = yes_no_question('Are you sure that you want to convert this line into a VSC device?',
323
+ 'Convert line')
336
324
  if ok:
337
325
  self.editor.convert_line_to_vsc(line=self.api_object, line_graphic=self)
338
326
  else:
@@ -343,6 +331,27 @@ class LineGraphicItem(LineGraphicTemplateItem):
343
331
  Convert this object to UPFC
344
332
  :return:
345
333
  """
346
- ok = yes_no_question('Are you sure that you want to convert this line into a UPFC device?', 'Convert line')
334
+ ok = yes_no_question('Are you sure that you want to convert this line into a UPFC device?',
335
+ 'Convert line')
347
336
  if ok:
348
337
  self.editor.convert_line_to_upfc(line=self.api_object, line_graphic=self)
338
+
339
+ def to_series_reactance(self):
340
+ """
341
+ Convert this object to series reactance
342
+ :return:
343
+ """
344
+ ok = yes_no_question('Are you sure that you want to convert this line into a series reactance device?',
345
+ 'Convert line')
346
+ if ok:
347
+ self.editor.convert_line_to_series_reactance(line=self.api_object, line_graphic=self)
348
+
349
+ def __str__(self):
350
+
351
+ if self.api_object is None:
352
+ return f"Line graphics {hex(id(self))}"
353
+ else:
354
+ return f"Graphics of {self.api_object.name} [{hex(id(self))}]"
355
+
356
+ def __repr__(self):
357
+ return str(self)