예제 #1
0
    def test_depth_wise(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        tree_a = Tree(a)
        tree_a_a = Tree(a_a)
        tree_a_a_b = Tree(a_a_b)

        assert tree_a.depth_wise == {
            0: (a, ),
            1: (a_a, ),
            2: (a_a_a, a_a_b, a_a_c),
            3: (a_a_b_a, a_a_b_b)
        }

        assert tree_a_a.depth_wise == {
            0: (a_a, ),
            1: (a_a_a, a_a_b, a_a_c),
            2: (a_a_b_a, a_a_b_b)
        }

        assert tree_a_a_b.depth_wise == {0: (a_a_b, ), 1: (a_a_b_a, a_a_b_b)}
예제 #2
0
 def test_to_dict(self, tree_a):
     results = {
         Label('a'): {
             Label('a_a'): {
                 Label('a_a_a'): {},
                 Label('a_a_b'): {
                     Label('a_a_b_a'): {},
                     Label('a_a_b_b'): {}
                 },
                 Label('a_a_c'): {
                     Label('a_a_c_a'): {
                         Label('a_a_c_a_a'): {},
                         Label('a_a_c_a_b'): {
                             Label('a_a_c_a_b_a'): {}
                         }
                     },
                     Label('a_a_c_b'): {
                         Label('a_a_c_b_a'): {}
                     }
                 }
             },
             Label('a_b'): {
                 Label('a_b_a'): {
                     Label('a_b_a_a'): {},
                     Label('a_b_a_b'): {}
                 }
             }
         }
     }
     assert Tree(tree_a).to_dict() == results
예제 #3
0
    def test_contains(self, tree_a):
        tree = Tree(tree_a)

        assert Label('a_a_c_a_b') in tree
        assert not Label('c_a_c_a_b') in tree

        assert Label('a') in tree
        assert not Label('c') in tree
예제 #4
0
    def test_siblings(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        tree_a = Tree(a)
        tree_a_a = Tree(a_a)
        tree_a_a_b = Tree(a_a_b)

        assert set(tree_a.siblings(a_a_b)) == {a_a_a, a_a_c}
        assert set(tree_a_a.siblings(a_a_b)) == {a_a_a, a_a_c}
        assert set(tree_a_a_b.siblings(a_a_b)) == set()
예제 #5
0
    def test_depth(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        tree_a_a = Tree(a_a)
        tree_a_a_b = Tree(a_a_b)

        assert a_a_b_a.depth > tree_a_a.depth(a_a_b_a) > tree_a_a_b.depth(
            a_a_b_a)
        assert a_a_b_a.depth == 3
        assert tree_a_a.depth(a_a_b_a) == 2
        assert tree_a_a_b.depth(a_a_b_a) == 1
예제 #6
0
    def test_ancestors(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        tree_a_a = Tree(a_a)
        tree_a_a_b = Tree(a_a_b)

        assert a_a_b_a.ancestors == (a_a_b, a_a, a)
        assert tree_a_a.ancestors(a_a_b_a) == (a_a_b, a_a)
        assert tree_a_a_b.ancestors(a_a_b_a) == (a_a_b, )
예제 #7
0
    def test_clade(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)
        a_a_c_a = Label("a_a_c_a")
        a_a_c_b_a = Label("a_a_c_b_a")
        a_a_c_b = Label("a_a_c_b", children=(a_a_c_b_a, ))
        a_a_c_a_a = Label("a_a_c_a_a")
        a_a_c_a_b = Label("a_a_c_a_b")
        a_a_c_a_b_a = Label("a_a_c_a_b_a", parent=a_a_c_a_b)

        a_a_c.add(a_a_c_a, a_a_c_b)
        a_a_c_a_a.attach(a_a_c_a)
        a_a_c_a_b.attach(a_a_c_a)

        a_b = Label("a_b", parent=a)
        a_b_a = Label("a_b_a", parent=a_b)
        a_b_a_a = Label("a_b_a_a", parent=a_b_a)
        a_b_a_b = Label("a_b_a_b", parent=a_b_a)

        assert a_a_c_b.clade(a_a_c_a_b_a) == Tree(a_a_c)
        assert a_a_c_a_b_a.clade(a_a_c_b) == Tree(a_a_c)

        assert a_a_c_a_b_a.clade(a_a_b_a) == Tree(a_a)
        assert a_a_b_a.clade(a_a_c_a_b_a) == Tree(a_a)

        assert a_a.clade(a_a) == Tree(a_a)

        for label_name in a_a.descendants:
            assert a_a.clade(a_a.descendants[label_name]) == Tree(a_a)
예제 #8
0
 def test_len(self, tree_a):
     tree = Tree(tree_a)
     assert len(tree) == 17
예제 #9
0
    def test_accessor(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        tree_a = Tree(a)
        tree_a_a_b = Tree(a_a_b)

        assert tree_a['a_a_b_a'] == tree_a_a_b['a_a_b_a'] == a_a_b_a
        assert tree_a['a_a_b_a'].id == tree_a_a_b['a_a_b_a'].id == a_a_b_a.id

        assert tree_a.get()['a_a_b_a'] == tree_a_a_b.get(
        )['a_a_b_a'] == a_a_b_a
        assert tree_a.get()['a_a_b_a'].id == tree_a_a_b.get(
        )['a_a_b_a'].id == a_a_b_a.id

        assert tree_a.get(max_depth=1)['a_a_b_a'] == a_a
        assert tree_a.get(max_depth=1)['a_a_b_a'].id == a_a.id

        assert tree_a_a_b.get(max_depth=0)['a_a_b_a'] == a_a_b
        assert tree_a_a_b.get(max_depth=0)['a_a_b_a'].id == a_a_b.id

        assert tree_a.get().name['a_a_b_a'] == tree_a_a_b.get(
        )['a_a_b_a'] == a_a_b_a
        assert tree_a.get().name['a_a_b_a'].id == tree_a_a_b.get(
        )['a_a_b_a'].id == a_a_b_a.id

        assert tree_a.get(max_depth=1).name['a_a_b_a'] == a_a
        assert tree_a.get(max_depth=1).name['a_a_b_a'].id == a_a.id

        assert tree_a_a_b.get(max_depth=0).name['a_a_b_a'] == a_a_b
        assert tree_a_a_b.get(max_depth=0).name['a_a_b_a'].id == a_a_b.id

        assert tree_a.get().id[a_a_b_a.id] == tree_a_a_b.get().id[
            a_a_b_a.id] == a_a_b_a
        assert tree_a.get().id[a_a_b_a.id].id == tree_a_a_b.get().id[
            a_a_b_a.id].id == a_a_b_a.id

        assert tree_a.get(max_depth=1).id[a_a_b_a.id] == a_a
        assert tree_a.get(max_depth=1).id[a_a_b_a.id].id == a_a.id

        assert tree_a_a_b.get(max_depth=0).id[a_a_b_a.id] == a_a_b
        assert tree_a_a_b.get(max_depth=0).id[a_a_b_a.id].id == a_a_b.id

        new_a_a_b = Label("new_a_a_b")
        new_a_a_b_name = Label("new_a_a_b_name")
        new_a_a_b_id = Label("new_a_a_b_id")
        c = Label("c")

        tree_a.get()['a_a_b'] = new_a_a_b
        assert new_a_a_b in a_a.children
        assert a_a_b_a.parent == new_a_a_b
        assert a_a_b_b.parent == new_a_a_b
        assert a_a_b.parent is None
        assert not a_a_b.children

        tree_a.get().name['new_a_a_b'] = new_a_a_b_name
        assert new_a_a_b_name in a_a.children
        assert a_a_b_a.parent == new_a_a_b_name
        assert a_a_b_b.parent == new_a_a_b_name
        assert new_a_a_b.parent is None
        assert not new_a_a_b.children

        tree_a.get().id[new_a_a_b_name.id] = new_a_a_b_id
        assert new_a_a_b_id in a_a.children
        assert a_a_b_a.parent == new_a_a_b_id
        assert a_a_b_b.parent == new_a_a_b_id
        assert new_a_a_b_name.parent is None
        assert not new_a_a_b_name.children

        tree_a['new_a_a_b_id'] = new_a_a_b
        assert new_a_a_b in a_a.children
        assert a_a_b_a.parent == new_a_a_b
        assert a_a_b_b.parent == new_a_a_b
        assert new_a_a_b_id.parent is None
        assert not new_a_a_b_id.children

        tree_a.get()['label'] = c
        assert c in a.children
        assert c.parent == a

        with pytest.raises(
                KeyError,
                match=
                'Invalid identifier: label does not correspond to any label in the tree.'
        ):
            print(tree_a.get()['label'])

        with pytest.raises(
                KeyError,
                match=
                'Invalid identifier: label does not correspond to any label in the tree.'
        ):
            print(tree_a.get().name['label'])

        with pytest.raises(
                KeyError,
                match=
                'Invalid identifier: label does not correspond to any label in the tree.'
        ):
            print(tree_a.get().id['label'])
예제 #10
0
    def test_equality(self):
        a = Label("a")
        a_a = Label("a_a", parent=a)

        a_a_a = Label("a_a_a", parent=a_a)

        a_a_b = Label("a_a_b", parent=a_a)
        a_a_b_a = Label("a_a_b_a", parent=a_a_b)
        a_a_b_b = Label("a_a_b_b", parent=a_a_b)

        a_a_c = Label("a_a_c", parent=a_a)

        # Unordered
        b = Label("a")
        b_a = Label("a_a", parent=b)

        b_a_c = Label("a_a_c", parent=b_a)

        b_a_b_b = Label("a_a_b_b")
        b_a_b_a = Label("a_a_b_a")
        b_a_b = Label("a_a_b", parent=b_a, children=(b_a_b_b, b_a_b_a))
        b_a_a = Label("a_a_a", parent=b_a)

        assert Tree(a) == Tree(b)
        assert not Tree(a) != Tree(b)

        # Structure change
        b = Label("a")
        b_a = Label("a_a", parent=b)

        b_a_c = Label("a_a_c", parent=b_a)
        b_a_a = Label("a_a_a", parent=b_a)

        b_a_b_b = Label("a_a_b_b")
        b_a_b = Label("a_a_b", parent=b_a, children=(b_a_b_b, ))

        assert not Tree(a) == Tree(b)
        assert Tree(a) != Tree(b)

        # Content change
        b = Label("a")
        b_a = Label("a_a", parent=b)

        b_a_c = Label("a_a_c", parent=b_a)
        b_a_a = Label("a_a_e", parent=b_a)

        b_a_b_b = Label("a_a_b_b")
        b_a_b_a = Label("a_a_b_a")
        b_a_b = Label("a_a_b", parent=b_a, children=(b_a_b_b, b_a_b_a))

        assert not Tree(a) == Tree(b)
        assert Tree(a) != Tree(b)
예제 #11
0
    def test_iteration(self, tree_a):
        tree = Tree(tree_a)

        assert tuple(tree.iterate()) == tuple(tree.iterate().top_down())
        assert tuple(tree.iterate()) == (Label('a'), Label('a_a'),
                                         Label('a_a_a'), Label('a_a_b'),
                                         Label('a_a_b_a'), Label('a_a_b_b'),
                                         Label('a_a_c'), Label('a_a_c_a'),
                                         Label('a_a_c_a_a'),
                                         Label('a_a_c_a_b'),
                                         Label('a_a_c_a_b_a'),
                                         Label('a_a_c_b'), Label('a_a_c_b_a'),
                                         Label('a_b'), Label('a_b_a'),
                                         Label('a_b_a_a'), Label('a_b_a_b'))

        assert tuple(
            tree.iterate().bottom_up()) == (Label('a'), Label('a_a'),
                                            Label('a_a_a'), Label('a_a_b'),
                                            Label('a_a_b_a'), Label('a_a_b_b'),
                                            Label('a_a_c'), Label('a_a_c_a'),
                                            Label('a_a_c_a_a'),
                                            Label('a_a_c_a_b'),
                                            Label('a_a_c_a_b_a'),
                                            Label('a_a_c_b'),
                                            Label('a_a_c_b_a'), Label('a_b'),
                                            Label('a_b_a'), Label('a_b_a_a'),
                                            Label('a_b_a_b'))[::-1]

        assert tuple(tuple(e)
                     for e in tree.iterate().depth_wise_top_down()) == (
                         (Label('a'), ), (Label('a_a'), Label('a_b')),
                         (Label('a_a_a'), Label('a_a_b'), Label('a_a_c'),
                          Label('a_b_a')), (Label('a_a_b_a'), Label('a_a_b_b'),
                                            Label('a_a_c_a'), Label('a_a_c_b'),
                                            Label('a_b_a_a'),
                                            Label('a_b_a_b')),
                         (Label('a_a_c_a_a'), Label('a_a_c_a_b'),
                          Label('a_a_c_b_a')), (Label('a_a_c_a_b_a'), ))

        assert tuple(tuple(e)
                     for e in tree.iterate().depth_wise_bottom_up()) == (
                         (Label('a'), ), (Label('a_a'), Label('a_b')),
                         (Label('a_a_a'), Label('a_a_b'), Label('a_a_c'),
                          Label('a_b_a')), (Label('a_a_b_a'), Label('a_a_b_b'),
                                            Label('a_a_c_a'), Label('a_a_c_b'),
                                            Label('a_b_a_a'),
                                            Label('a_b_a_b')),
                         (Label('a_a_c_a_a'), Label('a_a_c_a_b'),
                          Label('a_a_c_b_a')), (Label('a_a_c_a_b_a'), ))[::-1]

        assert tuple(tree.iterate(max_depth=3)) == tuple(
            tree.iterate(max_depth=3).top_down())
        assert tuple(
            tree.iterate(max_depth=3)) == (Label('a'), Label('a_a'),
                                           Label('a_a_a'), Label('a_a_b'),
                                           Label('a_a_b_a'), Label('a_a_b_b'),
                                           Label('a_a_c'), Label('a_a_c_a'),
                                           Label('a_a_c_b'), Label('a_b'),
                                           Label('a_b_a'), Label('a_b_a_a'),
                                           Label('a_b_a_b'))

        assert tuple(tree.iterate(
            max_depth=3).bottom_up()) == (Label('a'), Label('a_a'),
                                          Label('a_a_a'), Label('a_a_b'),
                                          Label('a_a_b_a'), Label('a_a_b_b'),
                                          Label('a_a_c'), Label('a_a_c_a'),
                                          Label('a_a_c_b'), Label('a_b'),
                                          Label('a_b_a'), Label('a_b_a_a'),
                                          Label('a_b_a_b'))[::-1]

        assert tuple(
            tuple(e) for e in tree.iterate(
                max_depth=3).depth_wise_top_down()) == ((Label('a'), ),
                                                        (Label('a_a'),
                                                         Label('a_b')),
                                                        (Label('a_a_a'),
                                                         Label('a_a_b'),
                                                         Label('a_a_c'),
                                                         Label('a_b_a')),
                                                        (Label('a_a_b_a'),
                                                         Label('a_a_b_b'),
                                                         Label('a_a_c_a'),
                                                         Label('a_a_c_b'),
                                                         Label('a_b_a_a'),
                                                         Label('a_b_a_b')))

        assert tuple(
            tuple(e)
            for e in tree.iterate(max_depth=3).depth_wise_bottom_up()) == (
                (Label('a'), ), (Label('a_a'), Label('a_b')),
                (Label('a_a_a'), Label('a_a_b'), Label('a_a_c'),
                 Label('a_b_a')), (Label('a_a_b_a'), Label('a_a_b_b'),
                                   Label('a_a_c_a'), Label('a_a_c_b'),
                                   Label('a_b_a_a'), Label('a_b_a_b')))[::-1]

        assert tuple(
            tree.iterate(max_depth=3).floor(4)) == (Label('a_a_c_a_a'),
                                                    Label('a_a_c_a_b'),
                                                    Label('a_a_c_b_a'))

        assert tuple(tree.iterate().floor(3)) == (Label('a_a_b_a'),
                                                  Label('a_a_b_b'),
                                                  Label('a_a_c_a'),
                                                  Label('a_a_c_b'),
                                                  Label('a_b_a_a'),
                                                  Label('a_b_a_b'))
예제 #12
0
 def test_represent(self, tree_a):
     tree = Tree(tree_a)
     assert tree.represent() == tree_a_repr
     assert str(tree) == tree_a_repr
     assert tree.represent(max_depth=3) == tree_a_repr_3
     assert tree.represent(max_depth=0) == "a"
예제 #13
0
 def test_creation(self, tree_a):
     tree = Tree(tree_a)
     mixin_suite(tree)  # Base validity tests
     assert tree.root == tree_a