def test_changeFromParent(self): """TreeNode changeFromParent should record change from parent""" t = DndParser('(a,(c,b)x,d)') t.mapAttr({'a':5, 'c':3, 'b':7, 'x':2, 'd':1}) self.assertEqual(t[1][0].changeFromParent('Data'), 1) self.assertEqual(t[1][1].changeFromParent('Data'), 5) f = lambda x: x.Data * 2 self.assertEqual(t[1][0].changeFromParent(f), 2) self.assertEqual(t[1][1].changeFromParent(f), 10)
def test_removeDeleted(self): """removeDeleted should remove all nodes where is_deleted tests true.""" tree = DndParser('((a:3,(b:2,(c:1,d:1):1):1):2,(e:3,f:3):2);', constructor=TreeNode) result_not_deleted = deepcopy(tree) tree.removeDeleted(lambda x: x.Data in []) self.assertEqual(str(tree),str(result_not_deleted)) deleted = Set(['b','d','e','f']) result_tree = DndParser('((a:3,((c:1):1):1):2);',constructor=TreeNode) is_deleted = lambda x: x.Data in deleted tree.removeDeleted(is_deleted) self.assertEqual(str(tree),str(result_tree))
def test_nodedata(self): """DndParser should assign Data 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.Data] = node.BranchLength 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_mapAttr(self): """Tree mapattr should correctly change the attributes in-place""" t = DndParser('(a,(c,b)x,d)') t.mapAttr({'a':'aa','b':'bb','c':'cc','x':'xx'}) # d left out self.assertEqual(str(t), '(aa,(cc,bb)xx,d)') t = DndParser('(a,(c,b)x,d)') f = lambda x: x in list('abcx') and x*3 or x t.mapAttr(f) # d left out self.assertEqual(str(t), '(aaa,(ccc,bbb)xxx,d)') #check that it works if you set a different attribute than you read t = DndParser('(a,(c,b)x,d)') t.mapAttr(f, new_attr='xxx') for n in t.traverse(self_before=True, self_after=False): if n in list('abcx'): self.assertEqual(n.xxx, n.Data*3) else: self.assertEqual(n.xxx, n.Data)
def test_attrTable(self): """"TreeNode attrTable should return correct table of attributes""" t = DndParser('(a,(c,b)x,d)') f1 = lambda x: x in list('abcx') and x*2 or x f2 = lambda x: x in list('abcx') and x*3 or x f3 = lambda x: x in list('abcx') and x*4 or x t.mapAttr(f1, new_attr='xx') t.mapAttr(f2, new_attr='xxx') t.mapAttr(f3, new_attr='xxxx') table = t.attrTable(['xx','xxxx']) self.assertEqual(table, [[None, None], ['aa','aaaa'],['xx','xxxx'],\ ['cc','cccc'],['bb','bbbb'],['d','d']])
def GSC_weightnode_dependent(tree): """GSC method depending on the NodeWeight object implemented by Micah Hamady """ weight_node = DndParser(str(tree),constructor=WeightNode) weight_node.setWeights() return weight_node.leafWeights()
""" mean_name = prop_name+'WeightedMean' stdev_name = prop_name+'WeightedStdev' for n in self.traverse(self_before=False, self_after=True): if not n.Children: setattr(n, mean_name, f(n)) setattr(n, stdev_name, 0) else: num = 0 den = 0 branchlengths = [max(c.BranchLength, branch_delta) \ for c in n.Children] child_vals = [getattr(c, mean_name) for c in n.Children] num = sum([(1.0*i)/j for i, j in zip(child_vals, branchlengths)]) den = sum([1.0/j for j in branchlengths]) result = num/den setattr(n, mean_name, result) std = sqrt(sum([(c-result)**2 for c in child_vals])\ /len(child_vals)) setattr(n, stdev_name, std) if __name__ == '__main__': from old_cogent.parse.tree import DndParser s = '((a:7.9,((b:0.1,c:0.1):0.1,d:0.2):7.7):0.1,e:8.0)' t = DndParser(s) print t t.scaleBranchLengths(8, ultrametric=True) print t
def test_prune(self): """prune should recconstruct 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))