def test_is_canonical(self): for n in range(7): for tree in RankTree.all_labelled_trees(n): assert tree.is_canonical() shape_not_canonical = RankTree(children=[ RankTree(children=[], label=0), RankTree(children=[ RankTree(children=[ RankTree(children=[], label=1), RankTree(children=[], label=2), ]), RankTree(children=[], label=3), ]), ]) assert not shape_not_canonical.is_canonical() labels_not_canonical = RankTree(children=[ RankTree(children=[], label=0), RankTree(children=[ RankTree(children=[ RankTree(children=[], label=2), RankTree(children=[], label=3), ]), RankTree(children=[ RankTree(children=[], label=1), RankTree(children=[], label=4), ]), ]), ]) assert not labels_not_canonical.is_canonical()
def test_is_canonical(self): for n in range(7): for tree in RankTree.all_labelled_trees(n): self.assertTrue(tree.is_canonical()) shape_not_canonical = RankTree(children=[ RankTree(children=[], label=0), RankTree(children=[ RankTree(children=[ RankTree(children=[], label=1), RankTree(children=[], label=2), ]), RankTree(children=[], label=3), ]), ]) self.assertFalse(shape_not_canonical.is_canonical()) labels_not_canonical = RankTree(children=[ RankTree(children=[], label=0), RankTree(children=[ RankTree(children=[ RankTree(children=[], label=2), RankTree(children=[], label=3), ]), RankTree(children=[ RankTree(children=[], label=1), RankTree(children=[], label=4), ]), ]), ]) self.assertFalse(labels_not_canonical.is_canonical())
def test_to_from_tsk_tree(self): for n in range(5): for tree in RankTree.all_labelled_trees(n): self.assertTrue(tree.is_canonical()) tsk_tree = tree.to_tsk_tree() reconstructed = RankTree.from_tsk_tree(tsk_tree) self.assertTrue(tree.is_canonical()) self.assertEqual(tree, reconstructed)
def test_to_from_tsk_tree(self): for n in range(5): for tree in RankTree.all_labelled_trees(n): assert tree.is_canonical() tsk_tree = tree.to_tsk_tree() reconstructed = RankTree.from_tsk_tree(tsk_tree) assert tree.is_canonical() assert tree == reconstructed
def test_generate_treeseq_roundtrip(self): n = 5 span = 9 all_rank_trees = RankTree.all_labelled_trees(n) all_tsk_trees = tskit.all_trees(n, span=span) for rank_tree, tsk_tree in zip(all_rank_trees, all_tsk_trees): ts1 = tsk_tree.tree_sequence ts2 = rank_tree.to_tsk_tree(span=span).tree_sequence assert ts1.tables.equals(ts2.tables, ignore_provenance=True)
def test_all_labelled_trees_4(self): expected = [ # 1 + 1 + 1 + 1 (partition of num leaves) "(0,1,2,3)", # 1 + 1 + 2 "(0,1,(2,3))", "(0,2,(1,3))", "(0,3,(1,2))", "(1,2,(0,3))", "(1,3,(0,2))", "(2,3,(0,1))", # 1 + 3 # partition of 3 = 1 + 1 + 1 "(0,(1,2,3))", "(1,(0,2,3))", "(2,(0,1,3))", "(3,(0,1,2))", # partition of 3 = 1 + 2 "(0,(1,(2,3)))", "(0,(2,(1,3)))", "(0,(3,(1,2)))", "(1,(0,(2,3)))", "(1,(2,(0,3)))", "(1,(3,(0,2)))", "(2,(0,(1,3)))", "(2,(1,(0,3)))", "(2,(3,(0,1)))", "(3,(0,(1,2)))", "(3,(1,(0,2)))", "(3,(2,(0,1)))", # 2 + 2 "((0,1),(2,3))", "((0,2),(1,3))", "((0,3),(1,2))", ] actual = [t.newick() for t in RankTree.all_labelled_trees(4)] self.assertEqual(expected, actual)
def test_generate_trees_roundtrip(self): n = 5 all_rank_trees = RankTree.all_labelled_trees(n) all_tsk_trees = tskit.all_trees(n) for rank_tree, tsk_tree in zip(all_rank_trees, all_tsk_trees): self.assertEqual(rank_tree, RankTree.from_tsk_tree(tsk_tree))
def test_all_labelled_trees_3(self): expected = ["(0,1,2)", "(0,(1,2))", "(1,(0,2))", "(2,(0,1))"] actual = [t.newick() for t in RankTree.all_labelled_trees(3)] self.assertEqual(expected, actual)
def test_num_labelled_trees(self): # Number of leaf-labelled trees with n leaves on OEIS n_trees = [0, 1, 1, 4, 26, 236, 2752, 39208] for i, expected in zip(range(len(n_trees)), n_trees): actual = sum(1 for _ in RankTree.all_labelled_trees(i)) self.assertEqual(actual, expected)