Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
["b", "c", "d", "e", "f", "g", "f", "c", "b", "h"],
)
self.assertEqual(
[i.name for i in r.traverse(True, False, False)],
["b", "c", "d", "e", "f", "g", "h"],
)
self.assertEqual(
[i.name for i in r.traverse(False, True, False)],
["d", "e", "g", "f", "c", "b", "h"],
)
self.assertEqual(
[i.name for i in r.traverse(False, False, False)], ["d", "e", "g", "h"]
)
# this previously failed
t = DndParser("((a:6,(b:1,c:2):8):12,(d:3,(e:1,f:1):4):10);")
t0 = t.children[0]
list(t0.traverse(self_before=False, self_after=True))
list(t0.traverse(self_before=True, self_after=True))
def test_bifurcating(self):
"""Coerces nodes to have <= 2 children"""
t_str = "((a:1,b:2,c:3)d:4,(e:5,f:6,g:7)h:8,(i:9,j:10,k:11)l:12)m:14;"
t = DndParser(t_str)
# can't break up easily... sorry 80char
exp_str = "((a:1.0,(b:2.0,c:3.0):0.0)d:4.0,((e:5.0,(f:6.0,g:7.0):0.0)h:8.0,(i:9.0,(j:10.0,k:11.0):0.0)l:12.0):0.0)m:14.0;"
obs = t.bifurcating()
def test_levelorder(self):
t = DndParser("(((A,B)C,(D,E)F,(G,H)I)J,(K,L)M)N;")
exp = ["N", "J", "M", "C", "F", "I", "K", "L", "A", "B", "D", "E", "G", "H"]
names = [n.name for n in t.levelorder()]
self.assertEqual(names, exp)
def setUp(self):
"""Define a few standard trees"""
constructor = PhyloNode
self.root_std = DndParser(tree_std, constructor)
self.root_one_level = DndParser(tree_one_level, constructor)
self.root_two_level = DndParser(tree_two_level, constructor)
self.root_one_child = DndParser(tree_one_child, constructor)
def test_root_at_midpoint4(self):
"""midpoint should be selected correctly when it is an internal node
"""
tree = DndParser("(a:1,((c:1,d:3)n3:1,b:1)n2:1)rt;")
tmid = tree.root_at_midpoint()
self.assertEqual(tmid.get_distances(), tree.get_distances())
tipnames = tree.get_tip_names()
nontipnames = [t.name for t in tree.nontips()]
# for tipname in tipnames:
# tmid_tip = tmid.get_node_matching_name(tipname)
# orig_tip = tree.get_node_matching_name(tipname)
# for nontipname in nontipnames:
# tmid_dist=\
# tmid.get_node_matching_name(nontipname).distance(tmid_tip)
# orig_dist=\
# tree.get_node_matching_name(nontipname).distance(orig_tip)
# print nontipname, tipname, 'assert'
# self.assertEqual(tmid_dist, orig_dist)
self.assertTrue(tmid.is_root())
self.assertEqual(tmid.distance(tmid.get_node_matching_name("d")), 3)
def test_gnodedata(self):
"""DndParser should assign name to internal nodes correctly"""
t = DndParser(nodedata)
self.assertEqual(len(t), 2)
self.assertEqual(len(t[0]), 0) # first child is terminal
self.assertEqual(len(t[1]), 2) # second child has two children
self.assertEqual(str(t), "(abc:3.0,(def:4.0,ghi:5.0)jkl:6.0);")
info_dict = {}
for node in t.traverse():
info_dict[node.name] = node.length
self.assertEqual(info_dict["abc"], 3.0)
self.assertEqual(info_dict["def"], 4.0)
self.assertEqual(info_dict["ghi"], 5.0)
self.assertEqual(info_dict["jkl"], 6.0)
def test_nonames(self):
"""DndParser should produce the correct tree when there are no names"""
obs = DndParser(no_names)
exp = PhyloNode()
exp.append(PhyloNode())
exp.append(PhyloNode())
exp.children[0].append(PhyloNode())
exp.children[0].append(PhyloNode())
exp.children[1].append(PhyloNode())
exp.children[1].append(PhyloNode())
self.assertEqual(str(obs), str(exp))
def test_getsubtree_4(self):
"""tree.get_sub_tree() handles keep_root correctly
"""
t1 = DndParser("((a:1,b:2):4,(((c:2)cparent:1, j:17):0,(d:1,e:4):2):3)")
# /----4--- /--1-a
# ---------| \--2-b
# | /----0--- /-1---cparent---2---c
# \---3----| \--17-j
# \----2--- /--1--d
# \--4--e
# note c,j is len 0 node
true_dists = {
("a", "b"): 3.0,
("a", "c"): 11.0,
("a", "d"): 11.0,
("a", "e"): 14.0,
("a", "j"): 25.0,
("b", "a"): 3.0,
("b", "c"): 12.0,
def test_prune(self):
"""prune should reconstruct correct topology of tree."""
tree = DndParser("((a:3,((c:1):1):1):2);", constructor=TreeNode)
tree.prune()
result_tree = DndParser("((a:3,c:1));", constructor=TreeNode)
self.assertEqual(str(tree), str(result_tree))
samename_bug = DndParser("((A,B)SAMENAME,((C,D)SAMENAME));")
samename_bug.prune()
exp_tree_str = "((A,B)SAMENAME,(C,D)SAMENAME);"
self.assertEqual(str(samename_bug), exp_tree_str)
def test_data(self):
"""DndParser should work as expected on real data"""
t = DndParser(sample)
self.assertEqual(
str(t),
"((xyz:0.28124,(def:0.24498,mno:0.03627):0.1771):0.0487,abc:0.05925,(ghi:0.06914,jkl:0.13776):0.09853);",
)
tdata = DndParser(node_data_sample, unescape_name=True)
self.assertEqual(
str(tdata),
"((xyz:0.28124,(def:0.24498,mno:0.03627)A:0.1771)B:0.0487,abc:0.05925,(ghi:0.06914,jkl:0.13776)C:0.09853);",
)