def test_majority_rule(self): trees = [ TreeNode.from_newick("(A,(B,(H,(D,(J,(((G,E),(F,I)),C))))));"), TreeNode.from_newick("(A,(B,(D,((J,H),(((G,E),(F,I)),C)))));"), TreeNode.from_newick("(A,(B,(D,(H,(J,(((G,E),(F,I)),C))))));"), TreeNode.from_newick("(A,(B,(E,(G,((F,I),((J,(H,D)),C))))));"), TreeNode.from_newick("(A,(B,(E,(G,((F,I),(((J,H),D),C))))));"), TreeNode.from_newick("(A,(B,(E,((F,I),(G,((J,(H,D)),C))))));"), TreeNode.from_newick("(A,(B,(E,((F,I),(G,(((J,H),D),C))))));"), TreeNode.from_newick("(A,(B,(E,((G,(F,I)),((J,(H,D)),C)))));"), TreeNode.from_newick("(A,(B,(E,((G,(F,I)),(((J,H),D),C)))));")] exp = TreeNode.from_newick("(((E,(G,(F,I),(C,(D,J,H)))),B),A);") obs = majority_rule(trees) self.assertEqual(exp.compare_subsets(obs[0]), 0.0) self.assertEqual(len(obs), 1) tree = obs[0] exp_supports = sorted([9.0, 9.0, 9.0, 6.0, 6.0, 6.0]) obs_supports = sorted([n.support for n in tree.non_tips()]) self.assertEqual(obs_supports, exp_supports) obs = majority_rule(trees, weights=np.ones(len(trees)) * 2) self.assertEqual(exp.compare_subsets(obs[0]), 0.0) self.assertEqual(len(obs), 1) tree = obs[0] exp_supports = sorted([18.0, 18.0, 12.0, 18.0, 12.0, 12.0]) obs_supports = sorted([n.support for n in tree.non_tips()]) with self.assertRaises(ValueError): majority_rule(trees, weights=[1, 2])
def main(): option_parser, opts, args = parse_command_line_parameters(**script_info) trees = load_tree_files(opts.input_dir) # this retains the default behavior from PyCogent's majority_rule function if opts.strict: cutoff = 0.5 else: cutoff = 0.0 consensus = majority_rule(trees=trees, cutoff=cutoff)[0] f = open(opts.output_fname, 'w') f.write(consensus.to_newick(with_distances=True)) f.close()
def test_majority_rule_multiple_trees(self): trees = [ TreeNode.from_newick("((a,b),(c,d),(e,f))"), TreeNode.from_newick("(a,(c,d),b,(e,f))"), TreeNode.from_newick("((c,d),(e,f),b)"), TreeNode.from_newick("(a,(c,d),(e,f))")] trees = majority_rule(trees) self.assertEqual(len(trees), 4) exp = set([ frozenset(['a']), frozenset(['b']), frozenset([None, 'c', 'd']), frozenset([None, 'e', 'f'])]) obs = set([frozenset([n.name for n in t.traverse()]) for t in trees]) self.assertEqual(obs, exp)