33from collections import Counter
44from typing import Any , TypeVar
55
6+ from bigtree .globals import ASSERTIONS
67from bigtree .node import basenode
78from bigtree .utils import exceptions
89
@@ -83,7 +84,7 @@ def __init__(self, name: str, sep: str = "/", **kwargs: Any):
8384 self .name = name
8485 self ._sep = sep
8586 super ().__init__ (** kwargs )
86- if not self .node_name :
87+ if ASSERTIONS and not self .node_name :
8788 raise exceptions .TreeError ("Node must have a `name` attribute" )
8889
8990 @property
@@ -126,47 +127,13 @@ def path_name(self) -> str:
126127 sep = ancestors [- 1 ].sep
127128 return sep + sep .join ([str (node .node_name ) for node in reversed (ancestors )])
128129
129- def __pre_assign_children (self : T , new_children : list [T ]) -> None :
130- """Custom method to check before attaching children
131- Can be overridden with `_Node__pre_assign_children()`
132-
133- Args:
134- new_children (list[Self]): new children to be added
135- """
136- pass
137-
138- def __post_assign_children (self : T , new_children : list [T ]) -> None :
139- """Custom method to check after attaching children. Can be overridden with `_Node__post_assign_children()`.
140-
141- Args:
142- new_children: new children to be added
143- """
144- pass
145-
146- def __pre_assign_parent (self : T , new_parent : T ) -> None :
147- """Custom method to check before attaching parent. Can be overridden with `_Node__pre_assign_parent()`.
148-
149- Args:
150- new_parent: new parent to be added
151- """
152- pass
153-
154- def __post_assign_parent (self : T , new_parent : T ) -> None :
155- """Custom method to check after attaching parent. Can be overridden with `_Node__post_assign_parent()`.
156-
157- Args:
158- new_parent: new parent to be added
159- """
160- pass
161-
162130 def _BaseNode__pre_assign_parent (self : T , new_parent : T ) -> None :
163131 """Do not allow duplicate nodes of same path.
164132
165133 Args:
166134 new_parent: new parent to be added
167135 """
168- self .__pre_assign_parent (new_parent )
169- if new_parent is not None :
136+ if ASSERTIONS and new_parent is not None :
170137 if any (
171138 child .node_name == self .node_name and child is not self
172139 for child in new_parent .children
@@ -176,41 +143,25 @@ def _BaseNode__pre_assign_parent(self: T, new_parent: T) -> None:
176143 f"There exist a node with same path { new_parent .path_name } { new_parent .sep } { self .node_name } "
177144 )
178145
179- def _BaseNode__post_assign_parent (self : T , new_parent : T ) -> None :
180- """No rules.
181-
182- Args:
183- new_parent: new parent to be added
184- """
185- self .__post_assign_parent (new_parent )
186-
187146 def _BaseNode__pre_assign_children (self : T , new_children : list [T ]) -> None :
188147 """Do not allow duplicate nodes of same path.
189148
190149 Args:
191150 new_children: new children to be added
192151 """
193- self .__pre_assign_children (new_children )
194- children_names = [node .node_name for node in new_children ]
195- duplicate_names = [
196- item [0 ] for item in Counter (children_names ).items () if item [1 ] > 1
197- ]
198- if len (duplicate_names ):
199- duplicate_names_str = " and " .join (
200- [f"{ self .path_name } { self .sep } { name } " for name in duplicate_names ]
201- )
202- raise exceptions .TreeError (
203- f"Duplicate node with same path\n "
204- f"Attempting to add nodes with same path { duplicate_names_str } "
205- )
206-
207- def _BaseNode__post_assign_children (self : T , new_children : list [T ]) -> None :
208- """No rules.
209-
210- Args:
211- new_children: new children to be added
212- """
213- self .__post_assign_children (new_children )
152+ if ASSERTIONS :
153+ children_names = [node .node_name for node in new_children ]
154+ duplicate_names = [
155+ item [0 ] for item in Counter (children_names ).items () if item [1 ] > 1
156+ ]
157+ if len (duplicate_names ):
158+ duplicate_names_str = " and " .join (
159+ [f"{ self .path_name } { self .sep } { name } " for name in duplicate_names ]
160+ )
161+ raise exceptions .TreeError (
162+ f"Duplicate node with same path\n "
163+ f"Attempting to add nodes with same path { duplicate_names_str } "
164+ )
214165
215166 def show (self , ** kwargs : Any ) -> None :
216167 """Print tree to console, takes in same keyword arguments as `print_tree` function."""
0 commit comments