-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathtest_dependency_graph.py
More file actions
75 lines (72 loc) · 2.3 KB
/
Copy pathtest_dependency_graph.py
File metadata and controls
75 lines (72 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import pytest
def test_dependency_graph():
from speechbrain.utils.depgraph import (
CircularDependencyError,
DependencyGraph,
)
dg = DependencyGraph()
# a->b->c
dg.add_edge("b", "c")
dg.add_edge("a", "b")
assert dg.is_valid()
eval_order = [node.key for node in dg.get_evaluation_order()]
assert eval_order == ["c", "b", "a"]
dg = DependencyGraph()
# a->b->c, a->c
dg.add_edge("b", "c")
dg.add_edge("a", "b")
dg.add_edge("a", "c")
eval_order = [node.key for node in dg.get_evaluation_order()]
assert eval_order == ["c", "b", "a"]
dg = DependencyGraph()
# a->b, a->c
dg.add_edge("a", "b")
dg.add_edge("a", "c")
eval_order = [node.key for node in dg.get_evaluation_order()]
assert eval_order == ["c", "b", "a"] or eval_order == ["b", "c", "a"]
dg = DependencyGraph()
# a->b, c->d
dg.add_edge("a", "b")
dg.add_edge("c", "d")
eval_order = [node.key for node in dg.get_evaluation_order()]
valid_orders = [
["d", "c", "b", "a"],
["d", "b", "c", "a"],
["d", "b", "a", "c"],
["b", "a", "d", "c"],
["b", "d", "a", "c"],
["b", "d", "c", "a"],
]
assert eval_order in valid_orders
dg = DependencyGraph()
# a->b
dg.add_node("a")
dg.add_node("b")
dg.add_edge("a", "b")
eval_order = [node.key for node in dg.get_evaluation_order()]
assert eval_order == ["b", "a"]
dg = DependencyGraph()
# a->b->a Impossible!
dg.add_edge("a", "b")
dg.add_edge("b", "a")
assert not dg.is_valid()
with pytest.raises(CircularDependencyError):
list(dg.get_evaluation_order())
dg = DependencyGraph()
# a->b with data
# should use uuids
a_key = dg.add_node(data="a")
assert a_key != "a"
b_key = dg.add_node(data="b")
dg.add_edge(a_key, b_key)
eval_order_data = [node.data for node in dg.get_evaluation_order()]
assert eval_order_data == ["b", "a"]
# Adding same key in edge (implicitly) and then explicitly is ok:
dg = DependencyGraph()
dg.add_edge("a", "b")
dg.add_node("a")
eval_order = [node.key for node in dg.get_evaluation_order()]
assert eval_order == ["b", "a"]
# But adding same key twice explicitly will not work:
with pytest.raises(ValueError):
dg.add_node("a")