Skip to content

Commit d0c5329

Browse files
Quek Ching YeeQuek Ching Yee
authored andcommitted
fix: use node name instead of name
1 parent c51605b commit d0c5329

File tree

18 files changed

+78
-71
lines changed

18 files changed

+78
-71
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88
### Added:
9-
- Misc: Documentation to rely on jupyter notebook.
9+
- (WIP) Misc: Documentation to rely on jupyter notebook.
10+
### Changed:
11+
- Tree Export: Exporting to dot allow node_attr and edge_attr to modify node before retrieving node name.
12+
- Misc: All code reference to node_name (immutable) instead of name (mutable).
1013

1114
## [0.22.0] - 2024-11-03
1215
### Added:

bigtree/dag/export.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,15 @@ def dag_to_dot(
259259
_node_style = node_style.copy()
260260
_edge_style = edge_style.copy()
261261

262-
child_name = child_node.name
262+
child_name = child_node.node_name
263263
if node_attr and child_node.get_attr(node_attr):
264264
_node_style.update(child_node.get_attr(node_attr))
265265
if edge_attr and child_node.get_attr(edge_attr):
266266
_edge_style.update(child_node.get_attr(edge_attr))
267267
pydot_child = pydot.Node(name=child_name, label=child_name, **_node_style)
268268
_graph.add_node(pydot_child)
269269

270-
parent_name = parent_node.name
270+
parent_name = parent_node.node_name
271271
parent_node_style = node_style.copy()
272272
if node_attr and parent_node.get_attr(node_attr):
273273
parent_node_style.update(parent_node.get_attr(node_attr))

bigtree/node/basenode.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ def copy(self: T) -> T:
739739
return copy.deepcopy(self)
740740

741741
def sort(self: T, **kwargs: Any) -> None:
742-
"""Sort children, possible keyword arguments include ``key=lambda node: node.name``, ``reverse=True``
742+
"""Sort children, possible keyword arguments include ``key=lambda node: node.node_name``, ``reverse=True``
743743
Accepts kwargs for sort() function.
744744
745745
Examples:
@@ -751,7 +751,7 @@ def sort(self: T, **kwargs: Any) -> None:
751751
a
752752
├── c
753753
└── b
754-
>>> a.sort(key=lambda node: node.name)
754+
>>> a.sort(key=lambda node: node.node_name)
755755
>>> print_tree(a)
756756
a
757757
├── b

bigtree/node/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def path_name(self) -> str:
122122
"""
123123
ancestors = [self] + list(self.ancestors)
124124
sep = ancestors[-1].sep
125-
return sep + sep.join([str(node.name) for node in reversed(ancestors)])
125+
return sep + sep.join([str(node.node_name) for node in reversed(ancestors)])
126126

127127
def __pre_assign_children(self: T, new_children: List[T]) -> None:
128128
"""Custom method to check before attaching children

bigtree/tree/export.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,12 +1303,6 @@ def _recursive_append(parent_name: Optional[str], child_node: T) -> None:
13031303
_node_style = node_style.copy()
13041304
_edge_style = edge_style.copy()
13051305

1306-
child_label = child_node.node_name
1307-
if child_node.path_name not in name_dict[child_label]: # pragma: no cover
1308-
name_dict[child_label].append(child_node.path_name)
1309-
child_name = child_label + str(
1310-
name_dict[child_label].index(child_node.path_name)
1311-
)
13121306
if node_attr:
13131307
if isinstance(node_attr, str) and child_node.get_attr(node_attr):
13141308
_node_style.update(child_node.get_attr(node_attr))
@@ -1319,6 +1313,13 @@ def _recursive_append(parent_name: Optional[str], child_node: T) -> None:
13191313
_edge_style.update(child_node.get_attr(edge_attr))
13201314
elif isinstance(edge_attr, Callable): # type: ignore
13211315
_edge_style.update(edge_attr(child_node)) # type: ignore
1316+
1317+
child_label = child_node.node_name
1318+
if child_node.path_name not in name_dict[child_label]: # pragma: no cover
1319+
name_dict[child_label].append(child_node.path_name)
1320+
child_name = child_label + str(
1321+
name_dict[child_label].index(child_node.path_name)
1322+
)
13221323
node = pydot.Node(name=child_name, label=child_label, **_node_style)
13231324
_graph.add_node(node)
13241325
if parent_name is not None:
@@ -1683,7 +1684,7 @@ def _get_attr(
16831684
# Get custom style for root (node_shape_attr, node_attr)
16841685
_parent_node_name = node_shapes[
16851686
_get_attr(_node.parent, node_shape_attr, node_shape)
1686-
].format(label=_node.parent.name)
1687+
].format(label=_node.parent.node_name)
16871688

16881689
if _get_attr(_node.parent, node_attr, "") and len(styles) < 2:
16891690
_from_style = _get_attr(_node.parent, node_attr, "")
@@ -1698,7 +1699,7 @@ def _get_attr(
16981699
_from_style = f":::{_from_style_class}"
16991700
_node_name = node_shapes[
17001701
_get_attr(_node, node_shape_attr, node_shape)
1701-
].format(label=_node.name)
1702+
].format(label=_node.node_name)
17021703

17031704
# Get custom style (edge_arrow_attr, edge_label)
17041705
_arrow = edge_arrows[_get_attr(_node, edge_arrow_attr, edge_arrow)]

docs/gettingstarted/demo/binarytree.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,24 @@ root.show()
8181
# ├── 6
8282
# └── 7
8383

84-
[node.name for node in inorder_iter(root)]
84+
[node.node_name for node in inorder_iter(root)]
8585
# ['8', '4', '2', '5', '1', '6', '3', '7']
8686

87-
[node.name for node in preorder_iter(root)]
87+
[node.node_name for node in preorder_iter(root)]
8888
# ['1', '2', '4', '8', '5', '3', '6', '7']
8989

90-
[node.name for node in postorder_iter(root)]
90+
[node.node_name for node in postorder_iter(root)]
9191
# ['8', '4', '5', '2', '6', '7', '3', '1']
9292

93-
[node.name for node in levelorder_iter(root)]
93+
[node.node_name for node in levelorder_iter(root)]
9494
# ['1', '2', '3', '4', '5', '6', '7', '8']
9595

96-
[[node.name for node in node_group] for node_group in levelordergroup_iter(root)]
96+
[[node.node_name for node in node_group] for node_group in levelordergroup_iter(root)]
9797
# [['1'], ['2', '3'], ['4', '5', '6', '7'], ['8']]
9898

99-
[node.name for node in zigzag_iter(root)]
99+
[node.node_name for node in zigzag_iter(root)]
100100
# ['1', '3', '2', '4', '5', '6', '7', '8']
101101

102-
[[node.name for node in node_group] for node_group in zigzaggroup_iter(root)]
102+
[[node.node_name for node in node_group] for node_group in zigzaggroup_iter(root)]
103103
# [['1'], ['3', '2'], ['4', '5', '6', '7'], ['8']]
104104
```

docs/gettingstarted/demo/tree.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -585,19 +585,19 @@ a
585585
[node.node_name for node in preorder_iter(root)]
586586
# ['a', 'b', 'd', 'e', 'c']
587587

588-
[node.name for node in postorder_iter(root)]
588+
[node.node_name for node in postorder_iter(root)]
589589
# ['d', 'e', 'b', 'c', 'a']
590590

591-
[node.name for node in levelorder_iter(root)]
591+
[node.node_name for node in levelorder_iter(root)]
592592
# ['a', 'b', 'c', 'd', 'e']
593593

594-
[[node.name for node in node_group] for node_group in levelordergroup_iter(root)]
594+
[[node.node_name for node in node_group] for node_group in levelordergroup_iter(root)]
595595
# [['a'], ['b', 'c'], ['d', 'e']]
596596

597-
[node.name for node in zigzag_iter(root)]
597+
[node.node_name for node in zigzag_iter(root)]
598598
# ['a', 'c', 'b', 'd', 'e']
599599

600-
[[node.name for node in node_group] for node_group in zigzaggroup_iter(root)]
600+
[[node.node_name for node in node_group] for node_group in zigzaggroup_iter(root)]
601601
# [['a'], ['c', 'b'], ['d', 'e']]
602602
```
603603

@@ -827,7 +827,7 @@ it does not require traversing the whole tree to find the node(s).
827827
find_children(root, lambda node: node.age >= 60)
828828
# (Node(/a/b, age=65), Node(/a/c, age=60))
829829

830-
find_child(root, lambda node: node.name == "c")
830+
find_child(root, lambda node: node.node_name == "c")
831831
# Node(/a/c, age=60)
832832

833833
find_child_by_name(root, "c")

docs_sphinx/source/demo/binarytree.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,24 @@ root.show()
8080
# ├── 6
8181
# └── 7
8282

83-
[node.name for node in inorder_iter(root)]
83+
[node.node_name for node in inorder_iter(root)]
8484
# ['8', '4', '2', '5', '1', '6', '3', '7']
8585

86-
[node.name for node in preorder_iter(root)]
86+
[node.node_name for node in preorder_iter(root)]
8787
# ['1', '2', '4', '8', '5', '3', '6', '7']
8888

89-
[node.name for node in postorder_iter(root)]
89+
[node.node_name for node in postorder_iter(root)]
9090
# ['8', '4', '5', '2', '6', '7', '3', '1']
9191

92-
[node.name for node in levelorder_iter(root)]
92+
[node.node_name for node in levelorder_iter(root)]
9393
# ['1', '2', '3', '4', '5', '6', '7', '8']
9494

95-
[[node.name for node in node_group] for node_group in levelordergroup_iter(root)]
95+
[[node.node_name for node in node_group] for node_group in levelordergroup_iter(root)]
9696
# [['1'], ['2', '3'], ['4', '5', '6', '7'], ['8']]
9797

98-
[node.name for node in zigzag_iter(root)]
98+
[node.node_name for node in zigzag_iter(root)]
9999
# ['1', '3', '2', '4', '5', '6', '7', '8']
100100

101-
[[node.name for node in node_group] for node_group in zigzaggroup_iter(root)]
101+
[[node.node_name for node in node_group] for node_group in zigzaggroup_iter(root)]
102102
# [['1'], ['3', '2'], ['4', '5', '6', '7'], ['8']]
103103
```

docs_sphinx/source/demo/tree.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -452,22 +452,22 @@ root.show()
452452
# │ └── e
453453
# └── c
454454

455-
[node.name for node in preorder_iter(root)]
455+
[node.node_name for node in preorder_iter(root)]
456456
# ['a', 'b', 'd', 'e', 'c']
457457

458-
[node.name for node in postorder_iter(root)]
458+
[node.node_name for node in postorder_iter(root)]
459459
# ['d', 'e', 'b', 'c', 'a']
460460

461-
[node.name for node in levelorder_iter(root)]
461+
[node.node_name for node in levelorder_iter(root)]
462462
# ['a', 'b', 'c', 'd', 'e']
463463

464-
[[node.name for node in node_group] for node_group in levelordergroup_iter(root)]
464+
[[node.node_name for node in node_group] for node_group in levelordergroup_iter(root)]
465465
# [['a'], ['b', 'c'], ['d', 'e']]
466466

467-
[node.name for node in zigzag_iter(root)]
467+
[node.node_name for node in zigzag_iter(root)]
468468
# ['a', 'c', 'b', 'd', 'e']
469469

470-
[[node.name for node in node_group] for node_group in zigzaggroup_iter(root)]
470+
[[node.node_name for node in node_group] for node_group in zigzaggroup_iter(root)]
471471
# [['a'], ['c', 'b'], ['d', 'e']]
472472
```
473473

@@ -673,7 +673,7 @@ root.show(attr_list=["age"])
673673
find_children(root, lambda node: node.age >= 60)
674674
# (Node(/a/b, age=65), Node(/a/c, age=60))
675675

676-
find_child(root, lambda node: node.name == "c")
676+
find_child(root, lambda node: node.node_name == "c")
677677
# Node(/a/c, age=60)
678678

679679
find_child_by_name(root, "c")

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ nav:
2323
- gettingstarted/demo/tree.md
2424
- gettingstarted/demo/binarytree.md
2525
- gettingstarted/demo/dag.md
26-
- gettingstarted/demo/workflow.ipynb
26+
- gettingstarted/demo/workflow.md
2727
- Resources:
2828
- gettingstarted/resources/articles.md
2929
- gettingstarted/resources/glossary.md

0 commit comments

Comments
 (0)