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.
- power_grid_model_ds/_core/model/arrays/base/_string.py +1 -1
- power_grid_model_ds/_core/model/containers/base.py +10 -3
- power_grid_model_ds/_core/model/grids/base.py +1 -1
- power_grid_model_ds/_core/visualizer/callbacks/element_selection.py +1 -1
- power_grid_model_ds/_core/visualizer/layout/colors.py +2 -1
- power_grid_model_ds/_core/visualizer/layout/cytoscape_styling.py +12 -0
- power_grid_model_ds/_core/visualizer/layout/header_config.py +1 -1
- {power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/METADATA +4 -23
- {power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/RECORD +12 -12
- {power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/WHEEL +0 -0
- {power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/licenses/LICENSE +0 -0
- {power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/top_level.txt +0 -0
@@ -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": "
|
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.
|
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>=
|
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:
|
46
|
-
Requires-Dist:
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
79
|
-
power_grid_model_ds-1.4.
|
80
|
-
power_grid_model_ds-1.4.
|
81
|
-
power_grid_model_ds-1.4.
|
82
|
-
power_grid_model_ds-1.4.
|
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,,
|
File without changes
|
{power_grid_model_ds-1.4.4.dist-info → power_grid_model_ds-1.4.7.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|