66
77from power_grid_model_ds ._core .model .arrays .base .array import FancyArray
88from 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
1212def 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+
3876def parse_branch_array (branches : BranchArray , group : Literal ["line" , "link" , "transformer" ]) -> list [dict [str , Any ]]:
3977 """Parse the branch array."""
4078 parsed_branches = []
0 commit comments