Skip to content

Commit 3425837

Browse files
committed
Minor bug fix.
Traverse tree optionally doesn't reset params. Fix tip parsing bug.
1 parent 3125964 commit 3425837

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

baltic/baltic.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def subtree(self,k=None,traverse_condition=None,stem=True):
167167
Returns a new baltic tree instance.
168168
Note - custom traversal functions can result in multitype trees.
169169
If this is undesired call singleType() on the resulting subtree afterwards. """
170-
subtree=copy.deepcopy(self.traverse_tree(k,include_condition=lambda k:True,traverse_condition=traverse_condition))
170+
subtree=copy.deepcopy(self.traverse_tree(k,include_condition=lambda k:True,traverse_condition=traverse_condition,reset_branches=False))
171171

172172
if subtree is None or len([k for k in subtree if k.branchType=='leaf'])==0:
173173
return None
@@ -256,14 +256,15 @@ def treeStats(self):
256256

257257
print('\nNumbers of objects in tree: %d (%d nodes and %d leaves)\n'%(len(obs),len(nodes),len(self.getExternal()))) ## report numbers of different objects in the tree
258258

259-
def traverse_tree(self,cur_node=None,include_condition=lambda k:k.branchType=='leaf',traverse_condition=lambda k:True,collect=None,verbose=False):
260-
if cur_node==None: ## if no starting point defined - start from root
259+
def traverse_tree(self,cur_node=None,include_condition=lambda k:k.branchType=='leaf',traverse_condition=lambda k:True,collect=None,reset_branches=True,verbose=False):
260+
if reset_branches:
261261
for k in self.Objects: ## reset various parameters
262262
if k.branchType=='node':
263263
k.leaves=set()
264264
k.childHeight=None
265265
k.height=None
266266

267+
if cur_node==None: ## if no starting point defined - start from root
267268
if verbose==True: print('Initiated traversal from root')
268269
cur_node=self.root
269270

@@ -286,7 +287,7 @@ def traverse_tree(self,cur_node=None,include_condition=lambda k:k.branchType=='l
286287
elif cur_node.branchType=='node': ## cur_node is node
287288
for child in filter(traverse_condition,cur_node.children): ## only traverse through children we're interested
288289
if verbose==True: print('visiting child %s'%(child.index))
289-
self.traverse_tree(cur_node=child,include_condition=include_condition,traverse_condition=traverse_condition,verbose=verbose,collect=collect) ## recurse through children
290+
self.traverse_tree(cur_node=child,include_condition=include_condition,traverse_condition=traverse_condition,verbose=verbose,collect=collect,reset_branches=False) ## recurse through children
290291
if verbose==True: print('child %s done'%(child.index))
291292
assert len(cur_node.children)>0, 'Tried traversing through hanging node without children. Index: %s'%(cur_node.index)
292293
cur_node.childHeight=max([child.childHeight if child.branchType=='node' else child.height for child in cur_node.children])
@@ -982,7 +983,7 @@ def make_tree(data,ll=None,verbose=False):
982983
"""
983984
patterns = {
984985
'beast_tip': r'(\(|,)([0-9]+)(\[|\:)',
985-
'non_beast_tip': r'(\(|,)(\'|\")*([^\(\):\[]+)(\'|\"|)(\[)*'
986+
'non_beast_tip': r'(\(|,)(\'|\")*([^\(\):\[\'\"]+)(\'|\"|)*(\[)*'
986987
}
987988
if isinstance(data,str)==False: ## tree string is not an instance of string (could be unicode) - convert
988989
data=str(data)

0 commit comments

Comments
 (0)