Esempio n. 1
0
    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()
Esempio n. 2
0
    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())
Esempio n. 3
0
 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)
Esempio n. 4
0
 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
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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))
Esempio n. 8
0
 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)
Esempio n. 9
0
 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)