power-grid-model-ds 1.4.4__tar.gz → 1.4.7__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 (91) hide show
  1. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/PKG-INFO +4 -23
  2. power_grid_model_ds-1.4.7/PYPI_VERSION +1 -0
  3. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/pyproject.toml +76 -17
  4. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/_string.py +1 -1
  5. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/containers/base.py +10 -3
  6. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/grids/base.py +1 -1
  7. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/callbacks/element_selection.py +1 -1
  8. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/colors.py +2 -1
  9. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/cytoscape_styling.py +12 -0
  10. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/header_config.py +1 -1
  11. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds.egg-info/PKG-INFO +4 -23
  12. power_grid_model_ds-1.4.7/src/power_grid_model_ds.egg-info/requires.txt +11 -0
  13. power_grid_model_ds-1.4.4/PYPI_VERSION +0 -1
  14. power_grid_model_ds-1.4.4/src/power_grid_model_ds.egg-info/requires.txt +0 -32
  15. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/LICENSE +0 -0
  16. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/README.md +0 -0
  17. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/setup.cfg +0 -0
  18. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/setup.py +0 -0
  19. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/__init__.py +0 -0
  20. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/__init__.py +0 -0
  21. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/__init__.py +0 -0
  22. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/__init__.py +0 -0
  23. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/__init__.py +0 -0
  24. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/base.py +0 -0
  25. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/line.py +0 -0
  26. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/node.py +0 -0
  27. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/source.py +0 -0
  28. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/arrays/transformer.py +0 -0
  29. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/data_source/generator/grid_generators.py +0 -0
  30. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/fancypy.py +0 -0
  31. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/load_flow.py +0 -0
  32. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/__init__.py +0 -0
  33. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/__init__.py +0 -0
  34. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/__init__.py +0 -0
  35. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/_build.py +0 -0
  36. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/_filters.py +0 -0
  37. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/_modify.py +0 -0
  38. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/_optional.py +0 -0
  39. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/array.py +0 -0
  40. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/base/errors.py +0 -0
  41. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/arrays/pgm_arrays.py +0 -0
  42. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/constants.py +0 -0
  43. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/containers/__init__.py +0 -0
  44. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/__init__.py +0 -0
  45. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/appliances.py +0 -0
  46. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/branches.py +0 -0
  47. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/id.py +0 -0
  48. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/nodes.py +0 -0
  49. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/regulators.py +0 -0
  50. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/dtypes/sensors.py +0 -0
  51. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/enums/__init__.py +0 -0
  52. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/enums/nodes.py +0 -0
  53. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/__init__.py +0 -0
  54. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/container.py +0 -0
  55. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/errors.py +0 -0
  56. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/models/__init__.py +0 -0
  57. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/models/_rustworkx_search.py +0 -0
  58. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/models/base.py +0 -0
  59. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/graphs/models/rustworkx.py +0 -0
  60. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/grids/__init__.py +0 -0
  61. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/grids/_text_sources.py +0 -0
  62. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/model/grids/helpers.py +0 -0
  63. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/utils/__init__.py +0 -0
  64. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/utils/misc.py +0 -0
  65. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/utils/pickle.py +0 -0
  66. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/utils/zip.py +0 -0
  67. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/__init__.py +0 -0
  68. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/app.py +0 -0
  69. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/callbacks/__init__.py +0 -0
  70. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/callbacks/config.py +0 -0
  71. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/callbacks/header.py +0 -0
  72. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/callbacks/search_form.py +0 -0
  73. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/__init__.py +0 -0
  74. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/cytoscape_html.py +0 -0
  75. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/header.py +0 -0
  76. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/header_legenda.py +0 -0
  77. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/header_search.py +0 -0
  78. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/layout/selection_output.py +0 -0
  79. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/parsers.py +0 -0
  80. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/_core/visualizer/typing.py +0 -0
  81. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/arrays.py +0 -0
  82. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/constants.py +0 -0
  83. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/enums.py +0 -0
  84. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/errors.py +0 -0
  85. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/fancypy.py +0 -0
  86. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/generators.py +0 -0
  87. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/graph_models.py +0 -0
  88. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds/visualizer.py +0 -0
  89. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds.egg-info/SOURCES.txt +0 -0
  90. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds.egg-info/dependency_links.txt +0 -0
  91. {power_grid_model_ds-1.4.4 → power_grid_model_ds-1.4.7}/src/power_grid_model_ds.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-ds
3
- Version: 1.4.4
3
+ Version: 1.4.7
4
4
  Summary: Power Grid Model extension which provides a grid data structure for simulation and analysis
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -23,32 +23,13 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: power-grid-model>=1.7
25
25
  Requires-Dist: rustworkx>=0.15.1
26
- Requires-Dist: numpy>=1.21
27
- Provides-Extra: pandas
28
- Requires-Dist: pandas>=2.2.1; extra == "pandas"
29
- Provides-Extra: dev
30
- Requires-Dist: pylint>=3.1.0; extra == "dev"
31
- Requires-Dist: pytest>=8.1.1; extra == "dev"
32
- Requires-Dist: coverage>=7.4.4; extra == "dev"
33
- Requires-Dist: black>=24.3.0; extra == "dev"
34
- Requires-Dist: ruff>=0.3.5; extra == "dev"
35
- Requires-Dist: isort>=5.13.2; extra == "dev"
36
- Requires-Dist: mypy>=1.9.0; extra == "dev"
37
- Requires-Dist: pre-commit>=4; extra == "dev"
38
- Requires-Dist: dash>=3.0.0; extra == "dev"
39
- Requires-Dist: dash-bootstrap-components>=2.0.3; extra == "dev"
40
- Requires-Dist: dash-cytoscape>=1.0.2; extra == "dev"
26
+ Requires-Dist: numpy>=2.0
41
27
  Provides-Extra: visualizer
42
28
  Requires-Dist: dash>=3.0.0; extra == "visualizer"
43
29
  Requires-Dist: dash-bootstrap-components>=2.0.0; extra == "visualizer"
44
30
  Requires-Dist: dash-cytoscape>=1.0.2; extra == "visualizer"
45
- Provides-Extra: doc
46
- Requires-Dist: sphinx; extra == "doc"
47
- Requires-Dist: myst-nb; extra == "doc"
48
- Requires-Dist: sphinx_rtd_theme; extra == "doc"
49
- Requires-Dist: readthedocs-sphinx-search; extra == "doc"
50
- Requires-Dist: sphinx-hoverxref; extra == "doc"
51
- Requires-Dist: numpydoc; extra == "doc"
31
+ Provides-Extra: pandas
32
+ Requires-Dist: pandas>=2.2.1; extra == "pandas"
52
33
  Dynamic: license-file
53
34
 
54
35
  <!--
@@ -0,0 +1 @@
1
+ 1.4.7
@@ -29,29 +29,32 @@ requires-python = ">=3.11,<3.14"
29
29
  dependencies = [
30
30
  "power-grid-model>=1.7",
31
31
  "rustworkx>= 0.15.1",
32
- "numpy>=1.21",
32
+ "numpy>=2.0",
33
33
  ]
34
34
  dynamic = ["version"]
35
35
 
36
36
  [project.optional-dependencies]
37
- pandas = ["pandas>=2.2.1"]
38
- dev = [
39
- "pylint>=3.1.0",
40
- "pytest>=8.1.1",
41
- "coverage>=7.4.4",
42
- "black>=24.3.0",
43
- "ruff>=0.3.5",
44
- "isort>=5.13.2",
45
- "mypy>=1.9.0",
46
- "pre-commit>=4",
47
- # Visualization (make sure these stay equalivalent to the 'visualizer' group)
37
+ # Published optional dependencies, or "extras".
38
+
39
+ visualizer = [
40
+ # Visualization (make sure these are also updated in the 'dev' group)
48
41
  "dash>=3.0.0",
49
- "dash-bootstrap-components>=2.0.3",
42
+ "dash-bootstrap-components>=2.0.0",
50
43
  "dash-cytoscape>=1.0.2",
51
44
  ]
45
+ pandas = ["pandas>=2.2.1"]
52
46
 
53
- visualizer = [
54
- # Visualization (make sure these are also updated in the 'dev' group)
47
+ [dependency-groups]
48
+ # Local dependencies for development.
49
+
50
+ dev = [
51
+ "pylint",
52
+ "pytest",
53
+ "coverage",
54
+ "ruff",
55
+ "mypy",
56
+ "pre-commit",
57
+ # Visualization (make sure these stay equalivalent to the 'visualizer' group)
55
58
  "dash>=3.0.0",
56
59
  "dash-bootstrap-components>=2.0.0",
57
60
  "dash-cytoscape>=1.0.2",
@@ -66,7 +69,6 @@ doc = [
66
69
  "numpydoc",
67
70
  ]
68
71
 
69
-
70
72
  [project.urls]
71
73
  Home-page = "https://lfenergy.org/projects/power-grid-model/"
72
74
  GitHub = "https://github.com/PowerGridModel/power-grid-model-ds"
@@ -123,9 +125,66 @@ disable_error_code = ["assignment", "import-untyped"]
123
125
 
124
126
  [tool.coverage.run]
125
127
  relative_files = true
126
- branch = true
128
+ source = ["src"]
129
+ command_line = '--module pytest'
127
130
 
128
131
  [tool.coverage.report]
132
+ fail_under = 90
129
133
  exclude_also = [
130
134
  'if TYPE_CHECKING:',
131
135
  ]
136
+
137
+ [tool.poe.tasks.all]
138
+ help = "Run all CI calls"
139
+ control.expr = "check"
140
+ args = [{name = "check", type="boolean", help= "Does not correct files, only warns"}]
141
+ [[tool.poe.tasks.all.switch]]
142
+ case = "True"
143
+ sequence = ["lint --check", "format --check", "lock", "type", "cover", "report"]
144
+
145
+ [[tool.poe.tasks.all.switch]]
146
+ sequence = ["lint", "format", "lock", "type", "cover", "report"]
147
+
148
+
149
+ [tool.poe.tasks.lint]
150
+ help = "Lint code (with ruff & pylint)"
151
+ # --no-fix does override --fix in ruff, if --check is given to poe.
152
+ sequence = [
153
+ {cmd='ruff check --fix --show-fixes ${check:+ --no-fix}'},
154
+ {cmd="pylint src"},
155
+ ]
156
+ args=[{name = "check", type="boolean", help= "Does not correct files, only warns"}]
157
+
158
+ [tool.poe.tasks.format]
159
+ help = "Format code (with ruff)"
160
+ cmd = 'ruff format ${check:+ --diff}'
161
+ args=[{name = "check", type="boolean", help= "Does not correct files, only warns"}]
162
+
163
+ [tool.poe.tasks.sort]
164
+ help = "Sort imports (with ruff)"
165
+ cmd = 'ruff check --select I --fix --show-fixes ${check:+ --no-fix}'
166
+ args=[{name = "check", type="boolean", help= "Does not correct files, only warns"}]
167
+
168
+ [tool.poe.tasks.type]
169
+ help = "Type check code (with mypy)"
170
+ cmd = "mypy src tests"
171
+
172
+ [tool.poe.tasks.tests]
173
+ help = "Run tests"
174
+ cmd = "pytest"
175
+
176
+ [tool.poe.tasks.lock]
177
+ help = "Asserts that dependencies are locked"
178
+ cmd = "uv lock --check"
179
+
180
+ [tool.poe.tasks.cover]
181
+ help = "Run tests (and gather coverage)"
182
+ cmd = "coverage run"
183
+
184
+ [tool.poe.tasks.report]
185
+ help = "Generate coverage report. Will use data from a previous cover command."
186
+ cmd = "coverage report"
187
+
188
+ [tool.poe.tasks.coverage]
189
+ help = "Run coverage *and* generate report"
190
+ sequence = ["cover", "report"]
@@ -82,7 +82,7 @@ def _determine_column_widths(array: "FancyArray") -> list[tuple[str, int]]:
82
82
  def _center_and_truncate(string: str, width: int) -> str:
83
83
  if len(string) <= width:
84
84
  return string.center(width)
85
- return f"{string[:width - 2]}..".center(width)
85
+ return f"{string[: width - 2]}..".center(width)
86
86
 
87
87
 
88
88
  def _get_start_and_end_rows(array: "FancyArray", rows: int) -> tuple["FancyArray", Optional["FancyArray"]]:
@@ -212,11 +212,18 @@ class FancyArrayContainer:
212
212
  array = self.attach_ids(array)
213
213
  elif np.any(array.id == EMPTY_ID):
214
214
  raise ValueError(f"Cannot append: array contains empty [{EMPTY_ID}] and non-empty ids.")
215
+ elif check_max_id and self.id_counter > 0:
216
+ # Only check for overlaps when array has prescribed (non-empty) IDs
217
+ # Check if any incoming ID might overlap with existing IDs
218
+ # This prevents overlaps since counter tracks the highest used ID
219
+ new_min_id = np.min(array.id)
220
+ if new_min_id <= self._id_counter:
221
+ raise ValueError(
222
+ f"Cannot append: minimum id {new_min_id} is not greater than "
223
+ f"the current id counter {self._id_counter}"
224
+ )
215
225
 
216
226
  new_max_id = np.max(array.id)
217
- if check_max_id and new_max_id < self._id_counter:
218
- raise ValueError(f"Cannot append: id {new_max_id} is lower than the id counter")
219
-
220
227
  # Update _id_counter
221
228
  self._id_counter = max(self._id_counter, new_max_id)
222
229
 
@@ -451,7 +451,7 @@ class Grid(FancyArrayContainer):
451
451
  for field in dataclasses.fields(cls):
452
452
  if field.name == "node":
453
453
  continue # already added
454
- if issubclass(field.type, FancyArray):
454
+ if isinstance(field.type, type) and issubclass(field.type, FancyArray):
455
455
  extended_array = getattr(extended, field.name)
456
456
  new_array = field.type.from_extended(extended_array)
457
457
  new_grid.append(new_array, check_max_id=False)
@@ -27,7 +27,7 @@ def display_selected_element(node_data, edge_data):
27
27
 
28
28
  def _to_data_table(data: dict[str, Any]):
29
29
  columns = data.keys()
30
- data_table = dash_table.DataTable(
30
+ data_table = dash_table.DataTable( # type: ignore[attr-defined]
31
31
  data=[data], columns=[{"name": key, "id": key} for key in columns], editable=False
32
32
  )
33
33
  return data_table
@@ -5,11 +5,12 @@
5
5
  YELLOW = "#facc37"
6
6
  CYTO_COLORS = {
7
7
  "line": YELLOW,
8
- "link": "green",
8
+ "link": "#008000",
9
9
  "transformer": "#4290f5",
10
10
  "node": YELLOW,
11
11
  "selected": "#e28743",
12
12
  "selected_transformer": "#0349a3",
13
+ "selected_link": "#004000",
13
14
  "substation_node": "purple",
14
15
  "open_branch": "#c9c9c9",
15
16
  "highlighted": "#a10000",
@@ -75,6 +75,16 @@ _SELECTED_TRANSFORMER_STYLE = {
75
75
  },
76
76
  }
77
77
 
78
+ _LINK_STYLE = {
79
+ "selector": "edge[group = 'link']",
80
+ "style": {"line-color": CYTO_COLORS["link"], "target-arrow-color": CYTO_COLORS["link"]},
81
+ }
82
+
83
+ _SELECTED_LINK_STYLE = {
84
+ "selector": "edge[group = 'link']:selected, edge[group = 'link']:active",
85
+ "style": {"line-color": CYTO_COLORS["selected_link"], "target-arrow-color": CYTO_COLORS["selected_link"]},
86
+ }
87
+
78
88
  _OPEN_BRANCH_STYLE = {
79
89
  "selector": "edge[from_status = 0], edge[to_status = 0]",
80
90
  "style": {
@@ -106,9 +116,11 @@ DEFAULT_STYLESHEET = [
106
116
  _SUBSTATION_NODE_STYLE,
107
117
  _BRANCH_STYLE,
108
118
  _TRANSFORMER_STYLE,
119
+ _LINK_STYLE,
109
120
  _SELECTED_NODE_STYLE,
110
121
  _SELECTED_BRANCH_STYLE,
111
122
  _SELECTED_TRANSFORMER_STYLE,
123
+ _SELECTED_LINK_STYLE,
112
124
  _OPEN_BRANCH_STYLE,
113
125
  _OPEN_FROM_SIDE_BRANCH_STYLE,
114
126
  _OPEN_TO_SIDE_BRANCH_STYLE,
@@ -53,7 +53,7 @@ _LAYOUT_DROPDOWN = html.Div(
53
53
  placeholder="Select layout",
54
54
  value=LayoutOptions.BREADTHFIRST.value,
55
55
  clearable=False,
56
- options=[{"label": option.value, "value": option.value} for option in LayoutOptions],
56
+ options=[{"label": option.value, "value": option.value} for option in LayoutOptions], # type: ignore[arg-type]
57
57
  style={"width": "200px"},
58
58
  ),
59
59
  style={"margin": "0 20px 0 10px", "color": "black"},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-ds
3
- Version: 1.4.4
3
+ Version: 1.4.7
4
4
  Summary: Power Grid Model extension which provides a grid data structure for simulation and analysis
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -23,32 +23,13 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: power-grid-model>=1.7
25
25
  Requires-Dist: rustworkx>=0.15.1
26
- Requires-Dist: numpy>=1.21
27
- Provides-Extra: pandas
28
- Requires-Dist: pandas>=2.2.1; extra == "pandas"
29
- Provides-Extra: dev
30
- Requires-Dist: pylint>=3.1.0; extra == "dev"
31
- Requires-Dist: pytest>=8.1.1; extra == "dev"
32
- Requires-Dist: coverage>=7.4.4; extra == "dev"
33
- Requires-Dist: black>=24.3.0; extra == "dev"
34
- Requires-Dist: ruff>=0.3.5; extra == "dev"
35
- Requires-Dist: isort>=5.13.2; extra == "dev"
36
- Requires-Dist: mypy>=1.9.0; extra == "dev"
37
- Requires-Dist: pre-commit>=4; extra == "dev"
38
- Requires-Dist: dash>=3.0.0; extra == "dev"
39
- Requires-Dist: dash-bootstrap-components>=2.0.3; extra == "dev"
40
- Requires-Dist: dash-cytoscape>=1.0.2; extra == "dev"
26
+ Requires-Dist: numpy>=2.0
41
27
  Provides-Extra: visualizer
42
28
  Requires-Dist: dash>=3.0.0; extra == "visualizer"
43
29
  Requires-Dist: dash-bootstrap-components>=2.0.0; extra == "visualizer"
44
30
  Requires-Dist: dash-cytoscape>=1.0.2; extra == "visualizer"
45
- Provides-Extra: doc
46
- Requires-Dist: sphinx; extra == "doc"
47
- Requires-Dist: myst-nb; extra == "doc"
48
- Requires-Dist: sphinx_rtd_theme; extra == "doc"
49
- Requires-Dist: readthedocs-sphinx-search; extra == "doc"
50
- Requires-Dist: sphinx-hoverxref; extra == "doc"
51
- Requires-Dist: numpydoc; extra == "doc"
31
+ Provides-Extra: pandas
32
+ Requires-Dist: pandas>=2.2.1; extra == "pandas"
52
33
  Dynamic: license-file
53
34
 
54
35
  <!--
@@ -0,0 +1,11 @@
1
+ power-grid-model>=1.7
2
+ rustworkx>=0.15.1
3
+ numpy>=2.0
4
+
5
+ [pandas]
6
+ pandas>=2.2.1
7
+
8
+ [visualizer]
9
+ dash>=3.0.0
10
+ dash-bootstrap-components>=2.0.0
11
+ dash-cytoscape>=1.0.2
@@ -1 +0,0 @@
1
- 1.4.4
@@ -1,32 +0,0 @@
1
- power-grid-model>=1.7
2
- rustworkx>=0.15.1
3
- numpy>=1.21
4
-
5
- [dev]
6
- pylint>=3.1.0
7
- pytest>=8.1.1
8
- coverage>=7.4.4
9
- black>=24.3.0
10
- ruff>=0.3.5
11
- isort>=5.13.2
12
- mypy>=1.9.0
13
- pre-commit>=4
14
- dash>=3.0.0
15
- dash-bootstrap-components>=2.0.3
16
- dash-cytoscape>=1.0.2
17
-
18
- [doc]
19
- sphinx
20
- myst-nb
21
- sphinx_rtd_theme
22
- readthedocs-sphinx-search
23
- sphinx-hoverxref
24
- numpydoc
25
-
26
- [pandas]
27
- pandas>=2.2.1
28
-
29
- [visualizer]
30
- dash>=3.0.0
31
- dash-bootstrap-components>=2.0.0
32
- dash-cytoscape>=1.0.2