power-grid-model-ds 1.4.4__py3-none-any.whl → 1.4.7__py3-none-any.whl

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.
@@ -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
  <!--
@@ -28,11 +28,11 @@ power_grid_model_ds/_core/model/arrays/base/_build.py,sha256=NAdmzkjpC4lP-z1y0au
28
28
  power_grid_model_ds/_core/model/arrays/base/_filters.py,sha256=68DBuliTADfp2VNKpuTSq18fgPa5XC4MkxQIH6G9mV8,4241
29
29
  power_grid_model_ds/_core/model/arrays/base/_modify.py,sha256=TP8LojFMcZnyzhmshzNQnjlEVSZjE_xJ6BNQ4SpIBvA,2476
30
30
  power_grid_model_ds/_core/model/arrays/base/_optional.py,sha256=zEEaE5z7bjLiARb8WTYsgZhbtJYAT6BTd61IUdv_YTA,288
31
- power_grid_model_ds/_core/model/arrays/base/_string.py,sha256=H66DBYq8RHQHj6Gfn2tdEXKoL3ND64iVkZCt-Fwjdn0,3568
31
+ power_grid_model_ds/_core/model/arrays/base/_string.py,sha256=Y2oTbGvoAwKGN2e32LbGynRW_amoLrIhTCt8ItVlKwQ,3569
32
32
  power_grid_model_ds/_core/model/arrays/base/array.py,sha256=b6e8LBajvzYCfvTvADudG8lE9SnOdke769YFewOjnhs,13167
33
33
  power_grid_model_ds/_core/model/arrays/base/errors.py,sha256=M62aA2pv9AlSJSvniU1IJTtRC0jvBlMYRxv2SchTdDA,475
34
34
  power_grid_model_ds/_core/model/containers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- power_grid_model_ds/_core/model/containers/base.py,sha256=O-GoE2oN-WJl5wKXCl3fUHbvW5qc0oZ2-oY-zUWBGbs,9037
35
+ power_grid_model_ds/_core/model/containers/base.py,sha256=ovEn0xbll8N1zaAQ6mXtIIyA_UnZuVGU0QZ3FrrA4kY,9453
36
36
  power_grid_model_ds/_core/model/dtypes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  power_grid_model_ds/_core/model/dtypes/appliances.py,sha256=ZfubZm0e7057gv78EQXMeUWefES0icyqFgIgRDnyV5c,1002
38
38
  power_grid_model_ds/_core/model/dtypes/branches.py,sha256=Pb65bRmaxCIJf1d2zF1D0r1zIYee1kEifkvgdP8OvTo,3811
@@ -51,7 +51,7 @@ power_grid_model_ds/_core/model/graphs/models/base.py,sha256=B1My17h5VPf9jrs4Wbx
51
51
  power_grid_model_ds/_core/model/graphs/models/rustworkx.py,sha256=jccM7MUhNqH2215mk_X8ihQ-Q8IkjjRhUk4jSruaxy8,6158
52
52
  power_grid_model_ds/_core/model/grids/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  power_grid_model_ds/_core/model/grids/_text_sources.py,sha256=3CWn0zjaUkFhrnSEIqAas52xeW0EX3EWXIXyo8XSQgw,4229
54
- power_grid_model_ds/_core/model/grids/base.py,sha256=JzM4pbDr8NwvTIe-lAjGVRGZVYWmM_3BzgWVpIJazKk,17294
54
+ power_grid_model_ds/_core/model/grids/base.py,sha256=WRdvnOqgVgC4u2bWBWWiWixkgeO9fc7gnPCPNdcpf3k,17327
55
55
  power_grid_model_ds/_core/model/grids/helpers.py,sha256=lMUEER6l5MfdgLBIesSo_KnqK_K1CyRtu1dj33q924c,4244
56
56
  power_grid_model_ds/_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  power_grid_model_ds/_core/utils/misc.py,sha256=fPjpczUr3IZ7EnAYI2darLzN2O8NJwhxgnOx7s-vU8w,2044
@@ -63,20 +63,20 @@ power_grid_model_ds/_core/visualizer/parsers.py,sha256=IYvnlunzZG-hqEjbVQGnDaZ37
63
63
  power_grid_model_ds/_core/visualizer/typing.py,sha256=3q9AU7Uz0Cp06biIWLFw3zzmfsVSu8rPEFKkIQpHr-g,197
64
64
  power_grid_model_ds/_core/visualizer/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
65
  power_grid_model_ds/_core/visualizer/callbacks/config.py,sha256=c1j30Q-dKYEKNf1fZVLcZWZ9o384k_okwfTfegQ5x8I,2268
66
- power_grid_model_ds/_core/visualizer/callbacks/element_selection.py,sha256=Teaeq0atd2rD_edaW0u_N-YCnaf6MQyC8WsgnEhQczk,963
66
+ power_grid_model_ds/_core/visualizer/callbacks/element_selection.py,sha256=ZscGQscceQOUKtAeHHQGgvWS_I7DLQ0IgphPoJN3Jgs,993
67
67
  power_grid_model_ds/_core/visualizer/callbacks/header.py,sha256=dQnUNzKonMPcSpSaikIGrsM9OdZV_C2RdFuPigTVZzg,925
68
68
  power_grid_model_ds/_core/visualizer/callbacks/search_form.py,sha256=KceSRKYcSAxUdfyfQ3MFbkb0GHljiWEnSk60ufjFoXg,2181
69
69
  power_grid_model_ds/_core/visualizer/layout/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- power_grid_model_ds/_core/visualizer/layout/colors.py,sha256=tt-2LvkClYvQ5ozL2UCX5q63AbXaXXo7kK2yLAzeCVw,455
70
+ power_grid_model_ds/_core/visualizer/layout/colors.py,sha256=ourb0fRb2FEBVdepxPw-CeK7pDE7zcMoIwUIlnf_Afs,489
71
71
  power_grid_model_ds/_core/visualizer/layout/cytoscape_html.py,sha256=EL6Z2ewCZc86NvoDQoek7MmZH_trPtRWXBcH1kfnR2Y,924
72
- power_grid_model_ds/_core/visualizer/layout/cytoscape_styling.py,sha256=o5Rh8uNCyt9YxODkNH76sx_wKs8aCBrCMVGCFBTtegQ,3288
72
+ power_grid_model_ds/_core/visualizer/layout/cytoscape_styling.py,sha256=4YkmQFNMaGKQaP5szVsw_oJW1zj5wglMDintuTITiTA,3700
73
73
  power_grid_model_ds/_core/visualizer/layout/header.py,sha256=PdIXUBZgdacTc7V99tR93SFcMjUHAzWdFGVGjq7PhMw,1829
74
- power_grid_model_ds/_core/visualizer/layout/header_config.py,sha256=e0W7tgbDTu-dJ4YDZ89vGCiQr5G12Fypr1popFyitgs,1866
74
+ power_grid_model_ds/_core/visualizer/layout/header_config.py,sha256=5Pn3mjHMLy5Xp2k0BkNosB-St6cy_vFp4Mdz0VdkpPc,1892
75
75
  power_grid_model_ds/_core/visualizer/layout/header_legenda.py,sha256=tmSIxQFW0d4ey64J_w9QwcZji3EIg7BZ7Rf8w167xb8,2086
76
76
  power_grid_model_ds/_core/visualizer/layout/header_search.py,sha256=RYTQosQaAeKyOiPNR9c0ofMiY2wKmmJCPENmlkv6BZw,1726
77
77
  power_grid_model_ds/_core/visualizer/layout/selection_output.py,sha256=fuPAdG5XmTj2E0oQ8w_tp9PGbB8bJ5fguteLtnM1EDg,534
78
- power_grid_model_ds-1.4.4.dist-info/licenses/LICENSE,sha256=GpbnG1pNl-ORtSP6dmHeiZvwy36UFli6MEZy1XlmBqo,14906
79
- power_grid_model_ds-1.4.4.dist-info/METADATA,sha256=q3vceCLNnZdBWfbQBGzeK40hyjw7OjERqjzuqEXtTEQ,8873
80
- power_grid_model_ds-1.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
81
- power_grid_model_ds-1.4.4.dist-info/top_level.txt,sha256=nJa103Eqvm5TESYEKPFVImfLg_ugGOBznikrM-rZQZg,20
82
- power_grid_model_ds-1.4.4.dist-info/RECORD,,
78
+ power_grid_model_ds-1.4.7.dist-info/licenses/LICENSE,sha256=GpbnG1pNl-ORtSP6dmHeiZvwy36UFli6MEZy1XlmBqo,14906
79
+ power_grid_model_ds-1.4.7.dist-info/METADATA,sha256=iTTMYepEESvvYe-7mtPgtYyJ0Mg-6UJKbBdCK85TIjo,8044
80
+ power_grid_model_ds-1.4.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
81
+ power_grid_model_ds-1.4.7.dist-info/top_level.txt,sha256=nJa103Eqvm5TESYEKPFVImfLg_ugGOBznikrM-rZQZg,20
82
+ power_grid_model_ds-1.4.7.dist-info/RECORD,,