def join_nodes(parsed): """Join the nodes from tips up expects parsed to go from high -> low similarity, ie: 99, 97, 94, ... """ last_lookup, last_nodes = parsed[0] for lookup, nodes in parsed[1:]: for n in nodes: replace_nodes = [last_lookup[c.Name] for c in n.Children] new_c = [] todelete = set([]) for c in n.Children: last_lookup[c.Name].Length = c.Length new_c.append(last_lookup[c.Name]) todelete.add(c) n.removeDeleted(lambda x: x in todelete) for c in new_c: n.append(c) last_lookup = lookup last_nodes = nodes root = PhyloNode() for c in last_nodes: root.append(c) return root
def test_missing_tip_name(self): """DndParser should produce the correct tree when missing a name""" obs = DndParser(missing_tip_name) exp = PhyloNode() exp.append(PhyloNode()) exp.append(PhyloNode()) exp.Children[0].append(PhyloNode(Name='a')) exp.Children[0].append(PhyloNode(Name='b')) exp.Children[1].append(PhyloNode(Name='c')) exp.Children[1].append(PhyloNode()) self.assertEqual(str(obs), str(exp))
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_gops(self): """Basic PhyloNode operations should work as expected""" p = PhyloNode() self.assertEqual(str(p), ';') p.Name = 'abc' self.assertEqual(str(p), 'abc;') p.Length = 3 self.assertEqual(str(p), 'abc:3;') #don't suppress branch from root q = PhyloNode() p.append(q) self.assertEqual(str(p), '()abc:3;') r = PhyloNode() q.append(r) self.assertEqual(str(p), '(())abc:3;') r.Name = 'xyz' self.assertEqual(str(p), '((xyz))abc:3;') q.Length = 2 self.assertEqual(str(p), '((xyz):2)abc:3;')
def test_gops(self): """Basic PhyloNode operations should work as expected""" p = PhyloNode() self.assertEqual(str(p), ";") p.Name = "abc" self.assertEqual(str(p), "abc;") p.Length = 3 self.assertEqual(str(p), "abc:3;") # don't suppress branch from root q = PhyloNode() p.append(q) self.assertEqual(str(p), "()abc:3;") r = PhyloNode() q.append(r) self.assertEqual(str(p), "(())abc:3;") r.Name = "xyz" self.assertEqual(str(p), "((xyz))abc:3;") q.Length = 2 self.assertEqual(str(p), "((xyz):2)abc:3;")
def test_minimal(self): """DndParser should produce the correct minimal tree""" obs = DndParser(minimal) exp = PhyloNode() exp.append(PhyloNode()) self.assertEqual(str(obs), str(exp))