power-grid-model-ds 1.3.3__py3-none-any.whl → 1.4.0__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.
@@ -8,6 +8,8 @@ from typing import TYPE_CHECKING, Union
8
8
 
9
9
  import numpy as np
10
10
 
11
+ from power_grid_model_ds._core.utils.misc import array_equal_with_nan
12
+
11
13
  if TYPE_CHECKING:
12
14
  from power_grid_model_ds._core.model.arrays.base.array import FancyArray
13
15
 
@@ -44,23 +46,5 @@ def sort(array: "FancyArray", axis=-1, kind=None, order=None) -> "FancyArray":
44
46
  def array_equal(array1: "FancyArray", array2: "FancyArray", equal_nan: bool = True) -> bool:
45
47
  """Return True if two arrays are equal."""
46
48
  if equal_nan:
47
- return _array_equal_with_nan(array1, array2)
49
+ return array_equal_with_nan(array1.data, array2.data)
48
50
  return np.array_equal(array1.data, array2.data)
49
-
50
-
51
- def _array_equal_with_nan(array1: "FancyArray", array2: "FancyArray") -> bool:
52
- # np.array_equal does not work with NaN values in structured arrays, so we need to compare column by column.
53
- # related issue: https://github.com/numpy/numpy/issues/21539
54
-
55
- if array1.columns != array2.columns:
56
- return False
57
-
58
- for column in array1.columns:
59
- column_dtype = array1.dtype[column]
60
- if np.issubdtype(column_dtype, np.str_):
61
- if not np.array_equal(array1[column], array2[column]):
62
- return False
63
- continue
64
- if not np.array_equal(array1[column], array2[column], equal_nan=True):
65
- return False
66
- return True
@@ -4,6 +4,7 @@
4
4
 
5
5
  """Power flow functions and classes"""
6
6
 
7
+ import warnings
7
8
  from typing import Dict, Optional
8
9
 
9
10
  import numpy as np
@@ -50,18 +51,29 @@ class PowerGridModelInterface:
50
51
  self.grid = grid or Grid.empty()
51
52
  self.system_frequency = system_frequency
52
53
 
53
- self.input_data = input_data or {}
54
+ self._input_data = input_data or {}
54
55
  self.output_data: dict[str, NDArray] = {}
55
56
  self.model: Optional[PowerGridModel] = None
56
57
 
58
+ @property
59
+ def input_data(self) -> Dict[str, NDArray]:
60
+ """Get the input data for the PowerGridModel."""
61
+ warnings.warn(
62
+ "Input data has been made private and will be removed as public properety in a future version. "
63
+ "Do not use it directly.",
64
+ DeprecationWarning,
65
+ stacklevel=2,
66
+ )
67
+ return self._input_data
68
+
57
69
  def create_input_from_grid(self):
58
70
  """
59
71
  Create input for the PowerGridModel
60
72
  """
61
73
  for array_name in PGM_ARRAYS:
62
74
  pgm_array = self._create_power_grid_array(array_name=array_name)
63
- self.input_data[array_name] = pgm_array
64
- return self.input_data
75
+ self._input_data[array_name] = pgm_array
76
+ return self._input_data
65
77
 
66
78
  def create_grid_from_input_data(self, check_ids: bool = True) -> Grid:
67
79
  """
@@ -75,9 +87,9 @@ class PowerGridModelInterface:
75
87
  Returns a Grid object with the arrays filled with the PowerGridModel input.
76
88
  """
77
89
  for pgm_name in PGM_ARRAYS:
78
- if pgm_name in self.input_data:
90
+ if pgm_name in self._input_data:
79
91
  pgm_ds_array_class = getattr(self.grid, pgm_name).__class__
80
- pgm_ds_array = pgm_ds_array_class(self.input_data[pgm_name])
92
+ pgm_ds_array = pgm_ds_array_class(self._input_data[pgm_name])
81
93
  self.grid.append(pgm_ds_array, check_max_id=False)
82
94
  if check_ids:
83
95
  self.grid.check_ids()
@@ -155,6 +167,6 @@ class PowerGridModelInterface:
155
167
  return list(set(first_dtype.names).intersection(set(second_dtype.names))) # type: ignore[arg-type]
156
168
 
157
169
  def _setup_model(self):
158
- self.input_data = self.input_data or self.create_input_from_grid()
159
- self.model = PowerGridModel(self.input_data, system_frequency=self.system_frequency)
170
+ self._input_data = self._input_data or self.create_input_from_grid()
171
+ self.model = PowerGridModel(self._input_data, system_frequency=self.system_frequency)
160
172
  return self.model
@@ -323,3 +323,11 @@ class FancyArray(ABC):
323
323
  if pandas is None:
324
324
  raise ImportError("pandas is not installed")
325
325
  return pandas.DataFrame(self._data)
326
+
327
+ @classmethod
328
+ def from_extended(cls: Type[Self], extended: Self) -> Self:
329
+ """Create an instance from an extended array."""
330
+ if not isinstance(extended, cls):
331
+ raise TypeError(f"Extended array must be of type {cls.__name__}, got {type(extended).__name__}")
332
+ dtype = cls.get_dtype()
333
+ return cls(data=np.array(extended[list(dtype.names)], dtype=dtype))
@@ -5,7 +5,6 @@
5
5
  """Stores the GraphContainer class"""
6
6
 
7
7
  import dataclasses
8
- import warnings
9
8
  from dataclasses import dataclass
10
9
  from typing import TYPE_CHECKING, Generator
11
10
 
@@ -63,45 +62,18 @@ class GraphContainer:
63
62
  graph = getattr(self, field.name)
64
63
  graph.add_node_array(node_array=node_array, raise_on_fail=False)
65
64
 
66
- def add_node(self, node: NodeArray) -> None:
67
- """Add a node to all graphs"""
68
- warnings.warn(
69
- "add_node is deprecated and will be removed in a future release, use add_node_array instead",
70
- category=DeprecationWarning,
71
- stacklevel=2,
72
- )
73
- self.add_node_array(node_array=node)
74
-
75
65
  def add_branch_array(self, branch_array: BranchArray) -> None:
76
66
  """Add a branch to all graphs"""
77
67
  for field in self.graph_attributes:
78
68
  graph = getattr(self, field.name)
79
69
  graph.add_branch_array(branch_array=branch_array)
80
70
 
81
- def add_branch(self, branch: BranchArray) -> None:
82
- """Add a branch to all graphs"""
83
- warnings.warn(
84
- "add_branch is deprecated and will be removed in a future release, use add_branch_array instead",
85
- category=DeprecationWarning,
86
- stacklevel=2,
87
- )
88
- self.add_branch_array(branch_array=branch)
89
-
90
71
  def add_branch3_array(self, branch3_array: Branch3Array) -> None:
91
72
  """Add a branch to all graphs"""
92
73
  for field in self.graph_attributes:
93
74
  graph = getattr(self, field.name)
94
75
  graph.add_branch3_array(branch3_array=branch3_array)
95
76
 
96
- def add_branch3(self, branch: Branch3Array) -> None:
97
- """Add a branch to all graphs"""
98
- warnings.warn(
99
- "add_branch3 is deprecated and will be removed in a future release, use add_branch3_array instead",
100
- category=DeprecationWarning,
101
- stacklevel=2,
102
- )
103
- self.add_branch3_array(branch3_array=branch)
104
-
105
77
  def delete_node(self, node: NodeArray) -> None:
106
78
  """Remove a node from all graphs"""
107
79
  for field in dataclasses.fields(self):
@@ -2,7 +2,6 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
 
5
- import warnings
6
5
  from abc import ABC, abstractmethod
7
6
  from contextlib import contextmanager
8
7
  from typing import TYPE_CHECKING, Generator
@@ -16,6 +15,7 @@ from power_grid_model_ds._core.model.graphs.errors import (
16
15
  MissingNodeError,
17
16
  NoPathBetweenNodes,
18
17
  )
18
+ from power_grid_model_ds._core.model.utils import _get_branch3_branches
19
19
 
20
20
  if TYPE_CHECKING:
21
21
  from power_grid_model_ds._core.model.grids.base import Grid
@@ -253,23 +253,17 @@ class BaseGraphModel(ABC):
253
253
 
254
254
  return [self._internals_to_externals(path) for path in internal_paths]
255
255
 
256
- def get_components(self, substation_nodes: list[int] | None = None) -> list[list[int]]:
257
- """Returns all separate components when the substation_nodes are removed of the graph as lists"""
258
- if substation_nodes:
259
- warnings.warn(
260
- message="""
261
- get_components: substation_nodes argument is deprecated and will be removed in a future release.
262
- The functionality is still available with the use of the `tmp_remove_nodes` context manager.
263
-
264
- Example:
265
- >>> with graph.tmp_remove_nodes(substation_nodes):
266
- >>> components = graph.get_components()
267
- """,
268
- category=DeprecationWarning,
269
- stacklevel=2,
270
- )
271
- with self.tmp_remove_nodes(substation_nodes or []):
272
- internal_components = self._get_components()
256
+ def get_components(self) -> list[list[int]]:
257
+ """Returns all separate components when the substation_nodes are removed of the graph as lists
258
+
259
+ If you want to get the components of the graph without certain nodes,
260
+ use the `tmp_remove_nodes` context manager.
261
+
262
+ Example:
263
+ >>> with graph.tmp_remove_nodes(substation_nodes):
264
+ >>> components = graph.get_components()
265
+ """
266
+ internal_components = self._get_components()
273
267
  return [self._internals_to_externals(component) for component in internal_components]
274
268
 
275
269
  def get_connected(
@@ -421,21 +415,3 @@ Example:
421
415
 
422
416
  @abstractmethod
423
417
  def _all_branches(self) -> Generator[tuple[int, int], None, None]: ...
424
-
425
-
426
- def _get_branch3_branches(branch3: Branch3Array) -> BranchArray:
427
- node_1 = branch3.node_1.item()
428
- node_2 = branch3.node_2.item()
429
- node_3 = branch3.node_3.item()
430
-
431
- status_1 = branch3.status_1.item()
432
- status_2 = branch3.status_2.item()
433
- status_3 = branch3.status_3.item()
434
-
435
- branches = BranchArray.zeros(3)
436
- branches.from_node = [node_1, node_1, node_2]
437
- branches.to_node = [node_2, node_3, node_3]
438
- branches.from_status = [status_1, status_1, status_2]
439
- branches.to_status = [status_2, status_3, status_3]
440
-
441
- return branches
@@ -440,6 +440,24 @@ class Grid(FancyArrayContainer):
440
440
  set_is_feeder(grid=self)
441
441
  set_feeder_ids(grid=self)
442
442
 
443
+ @classmethod
444
+ def from_extended(cls, extended: "Grid") -> "Grid":
445
+ """Create a grid from an extended Grid object."""
446
+ new_grid = cls.empty()
447
+
448
+ # Add nodes first, so that branches can reference them
449
+ new_grid.append(new_grid.node.__class__.from_extended(extended.node))
450
+
451
+ for field in dataclasses.fields(cls):
452
+ if field.name == "node":
453
+ continue # already added
454
+ if issubclass(field.type, FancyArray):
455
+ extended_array = getattr(extended, field.name)
456
+ new_array = field.type.from_extended(extended_array)
457
+ new_grid.append(new_array, check_max_id=False)
458
+
459
+ return new_grid
460
+
443
461
 
444
462
  def _add_branch_array(branch: BranchArray | Branch3Array, grid: Grid):
445
463
  """Add a branch array to the grid"""
@@ -0,0 +1,22 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+ from power_grid_model_ds._core.model.arrays.pgm_arrays import Branch3Array, BranchArray
5
+
6
+
7
+ def _get_branch3_branches(branch3: Branch3Array) -> BranchArray:
8
+ node_1 = branch3.node_1.item()
9
+ node_2 = branch3.node_2.item()
10
+ node_3 = branch3.node_3.item()
11
+
12
+ status_1 = branch3.status_1.item()
13
+ status_2 = branch3.status_2.item()
14
+ status_3 = branch3.status_3.item()
15
+
16
+ branches = BranchArray.zeros(3)
17
+ branches.from_node = [node_1, node_1, node_2]
18
+ branches.to_node = [node_2, node_3, node_3]
19
+ branches.from_status = [status_1, status_1, status_2]
20
+ branches.to_status = [status_2, status_3, status_3]
21
+
22
+ return branches
@@ -39,3 +39,24 @@ def get_inherited_attrs(cls: Type, *private_attributes):
39
39
  retrieved_attributes[private_attr] = attr_dict
40
40
 
41
41
  return retrieved_attributes
42
+
43
+
44
+ def array_equal_with_nan(array1: np.ndarray, array2: np.ndarray) -> bool:
45
+ """Compare two structured arrays for equality, treating NaN values as equal.
46
+
47
+ np.array_equal does not work with NaN values in structured arrays, so we need to compare column by column.
48
+ related issue: https://github.com/numpy/numpy/issues/21539
49
+ """
50
+ if array1.dtype.names != array2.dtype.names:
51
+ return False
52
+
53
+ columns: Sequence[str] = array1.dtype.names
54
+ for column in columns:
55
+ column_dtype = array1.dtype[column]
56
+ if np.issubdtype(column_dtype, np.str_):
57
+ if not np.array_equal(array1[column], array2[column]):
58
+ return False
59
+ continue
60
+ if not np.array_equal(array1[column], array2[column], equal_nan=True):
61
+ return False
62
+ return True
@@ -60,6 +60,7 @@ def _get_columns_store(grid: Grid) -> dcc.Store:
60
60
  "line": grid.line.columns,
61
61
  "link": grid.link.columns,
62
62
  "transformer": grid.transformer.columns,
63
+ "three_winding_transformer": grid.three_winding_transformer.columns,
63
64
  "branch": grid.branches.columns,
64
65
  },
65
66
  )
@@ -6,7 +6,8 @@ from typing import Any, Literal
6
6
 
7
7
  from power_grid_model_ds._core.model.arrays.base.array import FancyArray
8
8
  from power_grid_model_ds._core.model.grids.base import Grid
9
- from power_grid_model_ds.arrays import BranchArray, NodeArray
9
+ from power_grid_model_ds._core.model.utils import _get_branch3_branches
10
+ from power_grid_model_ds.arrays import Branch3Array, BranchArray, NodeArray
10
11
 
11
12
 
12
13
  def parse_node_array(nodes: NodeArray) -> list[dict[str, Any]]:
@@ -32,6 +33,27 @@ def parse_branches(grid: Grid) -> list[dict[str, Any]]:
32
33
  parsed_branches.extend(parse_branch_array(grid.line, "line"))
33
34
  parsed_branches.extend(parse_branch_array(grid.link, "link"))
34
35
  parsed_branches.extend(parse_branch_array(grid.transformer, "transformer"))
36
+ parsed_branches.extend(parse_branch3_array(grid.three_winding_transformer, "transformer"))
37
+ return parsed_branches
38
+
39
+
40
+ def parse_branch3_array(branches: Branch3Array, group: Literal["transformer"]) -> list[dict[str, Any]]:
41
+ """Parse the three-winding transformer array."""
42
+ parsed_branches = []
43
+ columns = branches.columns
44
+ for branch in branches:
45
+ for branch_ in _get_branch3_branches(branch):
46
+ cyto_elements = {"data": _array_to_dict(branch_, columns)}
47
+ cyto_elements["data"].update(
48
+ {
49
+ # IDs need to be unique, so we combine the branch ID with the from and to nodes
50
+ "id": str(branch.id.item()) + f"_{branch_.from_node.item()}_{branch_.to_node.item()}",
51
+ "source": str(branch_.from_node.item()),
52
+ "target": str(branch_.to_node.item()),
53
+ "group": group,
54
+ }
55
+ )
56
+ parsed_branches.append(cyto_elements)
35
57
  return parsed_branches
36
58
 
37
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-ds
3
- Version: 1.3.3
3
+ Version: 1.4.0
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
@@ -8,8 +8,8 @@ power_grid_model_ds/generators.py,sha256=suQCHIzLOXjJj3tLn1-vuzR9m6V-bhFZQWEukTp
8
8
  power_grid_model_ds/graph_models.py,sha256=so5niaXJqtuL0hUmtSPxV6Bven5c8DfAlF3MM4I1d28,348
9
9
  power_grid_model_ds/visualizer.py,sha256=W9GfWuM-CrDTnniCj1y-lxSt6IQkLJViW5aPC4syauw,411
10
10
  power_grid_model_ds/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- power_grid_model_ds/_core/fancypy.py,sha256=MVnt6gRe2civTQBY17Dtp_wyqARpy4jP1NCpOoNW3nc,2672
12
- power_grid_model_ds/_core/load_flow.py,sha256=2XKWHwhwvDa6hRgmlrv9XAKIZmTac4BGfpu9cZ1f_to,5832
11
+ power_grid_model_ds/_core/fancypy.py,sha256=EKH1gIACBPF9lUFI4kUPZJ_peS6B_udsLTs-PysdIns,2065
12
+ power_grid_model_ds/_core/load_flow.py,sha256=8GYzHw2Uxlzo4pZbjgOXELAP69_0o0yoav4yprZRJ_s,6247
13
13
  power_grid_model_ds/_core/data_source/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  power_grid_model_ds/_core/data_source/generator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  power_grid_model_ds/_core/data_source/generator/grid_generators.py,sha256=knAtQOhdUru3z6Kzc0rjSE9PPeC4_c7SUVVLqTi3ZBU,2972
@@ -21,6 +21,7 @@ power_grid_model_ds/_core/data_source/generator/arrays/source.py,sha256=rlrjDI73
21
21
  power_grid_model_ds/_core/data_source/generator/arrays/transformer.py,sha256=o2MOhWfitED2YDACLrxSYbeyDf3Rr_4fF0rsW2nROD4,1526
22
22
  power_grid_model_ds/_core/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  power_grid_model_ds/_core/model/constants.py,sha256=pxkZ-a4J8RVu4ziw_A6usY81I2tt6sOY1xDBsv6Ta14,746
24
+ power_grid_model_ds/_core/model/utils.py,sha256=j9DDnwTMIbkWTu7HdxGvrRKVZZPaIFtZN212ujsD7p0,786
24
25
  power_grid_model_ds/_core/model/arrays/__init__.py,sha256=WMMIUW5RAkJ6E7tRtu8sImhxjnQDo7h5J2I9dhvfAcw,1013
25
26
  power_grid_model_ds/_core/model/arrays/pgm_arrays.py,sha256=Vmzj6BFVY3vZqfpiOZ0-KDNdi3EbkWv3cUHUx8D29jw,3318
26
27
  power_grid_model_ds/_core/model/arrays/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -29,7 +30,7 @@ power_grid_model_ds/_core/model/arrays/base/_filters.py,sha256=68DBuliTADfp2VNKp
29
30
  power_grid_model_ds/_core/model/arrays/base/_modify.py,sha256=TP8LojFMcZnyzhmshzNQnjlEVSZjE_xJ6BNQ4SpIBvA,2476
30
31
  power_grid_model_ds/_core/model/arrays/base/_optional.py,sha256=zEEaE5z7bjLiARb8WTYsgZhbtJYAT6BTd61IUdv_YTA,288
31
32
  power_grid_model_ds/_core/model/arrays/base/_string.py,sha256=H66DBYq8RHQHj6Gfn2tdEXKoL3ND64iVkZCt-Fwjdn0,3568
32
- power_grid_model_ds/_core/model/arrays/base/array.py,sha256=F2o5Oc2AFfJ_aBpdSzQd5qxhA6-ynE7xuupPDDIPOWg,12758
33
+ power_grid_model_ds/_core/model/arrays/base/array.py,sha256=4PyIoKF4hrKbrBSy6167glg0qI1ZtXheuj11rGZHb8s,13156
33
34
  power_grid_model_ds/_core/model/arrays/base/errors.py,sha256=M62aA2pv9AlSJSvniU1IJTtRC0jvBlMYRxv2SchTdDA,475
34
35
  power_grid_model_ds/_core/model/containers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  power_grid_model_ds/_core/model/containers/base.py,sha256=O-GoE2oN-WJl5wKXCl3fUHbvW5qc0oZ2-oY-zUWBGbs,9037
@@ -43,23 +44,23 @@ power_grid_model_ds/_core/model/dtypes/sensors.py,sha256=U8HqvyH3fV348m4QjWy8IEY
43
44
  power_grid_model_ds/_core/model/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  power_grid_model_ds/_core/model/enums/nodes.py,sha256=UuJsWFasKREhVGbsUwGg5A-LvHnGTc4j636A_B4N9A4,356
45
46
  power_grid_model_ds/_core/model/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- power_grid_model_ds/_core/model/graphs/container.py,sha256=ZsE6Wr7DvVcYJYjvBszqnHI0QF9cFlHFwTfTAQnWYOA,6602
47
+ power_grid_model_ds/_core/model/graphs/container.py,sha256=M10tTUF_Mn3d2xPmfW2UAf9v5wLzNzCyqokDS5kIbT4,5524
47
48
  power_grid_model_ds/_core/model/graphs/errors.py,sha256=-9fAsCqpKM0-lCM-tO2fVot9hqZBJa8WCxxqWEH_z6k,479
48
49
  power_grid_model_ds/_core/model/graphs/models/__init__.py,sha256=xwhMajQKIAfL1R3cq2sMNXMWtqfI5WGBi6-P4clyTes,262
49
50
  power_grid_model_ds/_core/model/graphs/models/_rustworkx_search.py,sha256=TqRR22TPx8XjRLukQxK8R8FjZvJ60CttDFctbISSbOM,2979
50
- power_grid_model_ds/_core/model/graphs/models/base.py,sha256=OyhSN4Vn3otM20HDBt0Y6aXeQW7Lis7MuTgGe9aeEgM,17637
51
+ power_grid_model_ds/_core/model/graphs/models/base.py,sha256=LTWn5QROenDxEOu_8d1ehFGg8rj7oCgxsnHX-JoEkEg,16822
51
52
  power_grid_model_ds/_core/model/graphs/models/rustworkx.py,sha256=jccM7MUhNqH2215mk_X8ihQ-Q8IkjjRhUk4jSruaxy8,6158
52
53
  power_grid_model_ds/_core/model/grids/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
54
  power_grid_model_ds/_core/model/grids/_text_sources.py,sha256=3CWn0zjaUkFhrnSEIqAas52xeW0EX3EWXIXyo8XSQgw,4229
54
- power_grid_model_ds/_core/model/grids/base.py,sha256=8AQdqPuVLBjOKE2JQvlrQErq8NcCowot3SUlJvcmYvA,16592
55
+ power_grid_model_ds/_core/model/grids/base.py,sha256=JzM4pbDr8NwvTIe-lAjGVRGZVYWmM_3BzgWVpIJazKk,17294
55
56
  power_grid_model_ds/_core/model/grids/helpers.py,sha256=lMUEER6l5MfdgLBIesSo_KnqK_K1CyRtu1dj33q924c,4244
56
57
  power_grid_model_ds/_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- power_grid_model_ds/_core/utils/misc.py,sha256=aAdlXjyKN6_T4b_CQZ879TbkbDZW4TwBUsxTpkwvymU,1228
58
+ power_grid_model_ds/_core/utils/misc.py,sha256=fPjpczUr3IZ7EnAYI2darLzN2O8NJwhxgnOx7s-vU8w,2044
58
59
  power_grid_model_ds/_core/utils/pickle.py,sha256=LGeTc7nu9RY1noOzLJzYaSHSWIgqzHy2xhmueKGuipc,1445
59
60
  power_grid_model_ds/_core/utils/zip.py,sha256=9RtJYhjlgNZOtxr4iI-CpsjT1axw5kCCqprfTjaIsiI,2197
60
61
  power_grid_model_ds/_core/visualizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- power_grid_model_ds/_core/visualizer/app.py,sha256=uTtbHCRTQgLnfmJgwRmRSA_2kBHO2PZHD7fn2osGJSE,3340
62
- power_grid_model_ds/_core/visualizer/parsers.py,sha256=WPotNkHkDNOia6J7YE4F4rWXgKW2TDiBaU3TbolEjLg,2165
62
+ power_grid_model_ds/_core/visualizer/app.py,sha256=dnigMtdGkYquBpFDznLDogTzXR-BHPaa_scdF4GxUlw,3421
63
+ power_grid_model_ds/_core/visualizer/parsers.py,sha256=2QBUkUQD4EsrcJKAY-G0q657ngU41ceMbBBd_0GKJvQ,3246
63
64
  power_grid_model_ds/_core/visualizer/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
65
  power_grid_model_ds/_core/visualizer/callbacks/element_scaling.py,sha256=l8PPSqglytqBQgZ4yyNVx3wMYLF8Fcx8ku4skbGNZLM,1136
65
66
  power_grid_model_ds/_core/visualizer/callbacks/element_selection.py,sha256=Teaeq0atd2rD_edaW0u_N-YCnaf6MQyC8WsgnEhQczk,963
@@ -74,8 +75,8 @@ power_grid_model_ds/_core/visualizer/layout/header.py,sha256=el-5SlWIPeEbZZLbi3v
74
75
  power_grid_model_ds/_core/visualizer/layout/legenda.py,sha256=8JTrMRgaYRaSIXAEoM0b3PgX7AYvW0_fHuYg8nY4y0g,2161
75
76
  power_grid_model_ds/_core/visualizer/layout/search_form.py,sha256=4LPU6MjD3QEIeBEOOWBvV5-GyLMqNYWyKcUa_oWScCs,2002
76
77
  power_grid_model_ds/_core/visualizer/layout/selection_output.py,sha256=fuPAdG5XmTj2E0oQ8w_tp9PGbB8bJ5fguteLtnM1EDg,534
77
- power_grid_model_ds-1.3.3.dist-info/licenses/LICENSE,sha256=GpbnG1pNl-ORtSP6dmHeiZvwy36UFli6MEZy1XlmBqo,14906
78
- power_grid_model_ds-1.3.3.dist-info/METADATA,sha256=qFZaPDlHj5uGBUUvnf14k6E-CdsSdj0BkucAZXSvYFI,8873
79
- power_grid_model_ds-1.3.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
80
- power_grid_model_ds-1.3.3.dist-info/top_level.txt,sha256=nJa103Eqvm5TESYEKPFVImfLg_ugGOBznikrM-rZQZg,20
81
- power_grid_model_ds-1.3.3.dist-info/RECORD,,
78
+ power_grid_model_ds-1.4.0.dist-info/licenses/LICENSE,sha256=GpbnG1pNl-ORtSP6dmHeiZvwy36UFli6MEZy1XlmBqo,14906
79
+ power_grid_model_ds-1.4.0.dist-info/METADATA,sha256=yu_d7xuCeaF_aadOmXQss8t5JeCWVeSXDCGVNSPWdSk,8873
80
+ power_grid_model_ds-1.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
81
+ power_grid_model_ds-1.4.0.dist-info/top_level.txt,sha256=nJa103Eqvm5TESYEKPFVImfLg_ugGOBznikrM-rZQZg,20
82
+ power_grid_model_ds-1.4.0.dist-info/RECORD,,