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)}
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
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
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()
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
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, )
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)
def test_len(self, tree_a): tree = Tree(tree_a) assert len(tree) == 17
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'])
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)
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'))
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"
def test_creation(self, tree_a): tree = Tree(tree_a) mixin_suite(tree) # Base validity tests assert tree.root == tree_a