Skip to content

Commit f54596d

Browse files
feat: setup three winding trafo visualisation
Signed-off-by: jaapschoutenalliander <[email protected]>
1 parent d2bc1f1 commit f54596d

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

src/power_grid_model_ds/_core/visualizer/app.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def _get_columns_store(grid: Grid) -> dcc.Store:
6060
"line": grid.line.columns,
6161
"link": grid.link.columns,
6262
"transformer": grid.transformer.columns,
63+
"three_winding_transformer": grid.three_winding_transformer.columns,
6364
"branch": grid.branches.columns,
6465
},
6566
)

src/power_grid_model_ds/_core/visualizer/parsers.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from power_grid_model_ds._core.model.arrays.base.array import FancyArray
88
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.arrays import Branch3Array, BranchArray, NodeArray
1010

1111

1212
def parse_node_array(nodes: NodeArray) -> list[dict[str, Any]]:
@@ -32,9 +32,47 @@ def parse_branches(grid: Grid) -> list[dict[str, Any]]:
3232
parsed_branches.extend(parse_branch_array(grid.line, "line"))
3333
parsed_branches.extend(parse_branch_array(grid.link, "link"))
3434
parsed_branches.extend(parse_branch_array(grid.transformer, "transformer"))
35+
parsed_branches.extend(parse_branch3_array(grid.three_winding_transformer, "transformer"))
3536
return parsed_branches
3637

3738

39+
def parse_branch3_array(branches: Branch3Array, group: Literal["transformer"]) -> list[dict[str, Any]]:
40+
"""Parse the three-winding transformer array."""
41+
parsed_branches = []
42+
columns = branches.columns
43+
for branch in branches:
44+
for branch_ in _branch3_to_branches(branch):
45+
cyto_elements = {"data": _array_to_dict(branch_, columns)}
46+
cyto_elements["data"].update(
47+
{
48+
"id": str(branch.id.item()) + f"_{branch_.from_node.item()}_{branch_.to_node.item()}",
49+
"source": str(branch_.from_node.item()),
50+
"target": str(branch_.to_node.item()),
51+
"group": group,
52+
}
53+
)
54+
parsed_branches.append(cyto_elements)
55+
return parsed_branches
56+
57+
58+
def _branch3_to_branches(branch3: Branch3Array) -> BranchArray:
59+
node_1 = branch3.node_1.item()
60+
node_2 = branch3.node_2.item()
61+
node_3 = branch3.node_3.item()
62+
63+
status_1 = branch3.status_1.item()
64+
status_2 = branch3.status_2.item()
65+
status_3 = branch3.status_3.item()
66+
67+
branches = BranchArray.zeros(3)
68+
branches.from_node = [node_1, node_1, node_2]
69+
branches.to_node = [node_2, node_3, node_3]
70+
branches.from_status = [status_1, status_1, status_2]
71+
branches.to_status = [status_2, status_3, status_3]
72+
73+
return branches
74+
75+
3876
def parse_branch_array(branches: BranchArray, group: Literal["line", "link", "transformer"]) -> list[dict[str, Any]]:
3977
"""Parse the branch array."""
4078
parsed_branches = []

tests/unit/visualizer/test_parsers.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from numpy.typing import NDArray
77

88
from power_grid_model_ds._core.model.arrays import LineArray, NodeArray
9-
from power_grid_model_ds._core.visualizer.parsers import parse_branch_array, parse_node_array
9+
from power_grid_model_ds._core.model.arrays.pgm_arrays import Branch3Array
10+
from power_grid_model_ds._core.visualizer.parsers import parse_branch3_array, parse_branch_array, parse_node_array
1011

1112

1213
class CoordinatedNodeArray(NodeArray):
@@ -64,3 +65,28 @@ def test_parse_line_array(self):
6465
assert parsed[0]["data"]["source"] == "1"
6566
assert parsed[0]["data"]["target"] == "4"
6667
assert parsed[0]["data"]["group"] == "line"
68+
69+
def test_parse_branch3_array(self):
70+
branch3 = Branch3Array.zeros(1)
71+
branch3["id"] = [200]
72+
branch3["node_1"] = [1]
73+
branch3["node_2"] = [2]
74+
branch3["node_3"] = [3]
75+
branch3["status_1"] = [1]
76+
branch3["status_2"] = [1]
77+
branch3["status_3"] = [1]
78+
79+
parsed = parse_branch3_array(branch3, "transformer")
80+
assert len(parsed) == 3
81+
assert parsed[0]["data"]["id"] == "200_1_2"
82+
assert parsed[0]["data"]["source"] == "1"
83+
assert parsed[0]["data"]["target"] == "2"
84+
assert parsed[0]["data"]["group"] == "transformer"
85+
assert parsed[1]["data"]["id"] == "200_1_3"
86+
assert parsed[1]["data"]["source"] == "1"
87+
assert parsed[1]["data"]["target"] == "3"
88+
assert parsed[1]["data"]["group"] == "transformer"
89+
assert parsed[2]["data"]["id"] == "200_2_3"
90+
assert parsed[2]["data"]["source"] == "2"
91+
assert parsed[2]["data"]["target"] == "3"
92+
assert parsed[2]["data"]["group"] == "transformer"

0 commit comments

Comments
 (0)