Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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))
Exemplo n.º 3
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))
Exemplo n.º 4
0
 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))
Exemplo n.º 5
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))
Exemplo n.º 6
0
 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;')
Exemplo n.º 7
0
 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;')
Exemplo n.º 8
0
 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;")
Exemplo n.º 9
0
 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))
Exemplo n.º 10
0
 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))