test_anonymous_repr.py 1.56 KB
Newer Older
Minjie Wang's avatar
Minjie Wang committed
1
2
3
from dgl import DGLGraph
from dgl.graph import __REPR__

4
def message_func(hu, e_uv):
Minjie Wang's avatar
Minjie Wang committed
5
6
    return hu + e_uv

7
8
def reduce_func(h, msgs):
    return h + sum(msgs)
Minjie Wang's avatar
Minjie Wang committed
9
10
11
12

def generate_graph():
    g = DGLGraph()
    for i in range(10):
13
        g.add_node(i, __REPR__=i+1) # 10 nodes.
Minjie Wang's avatar
Minjie Wang committed
14
15
    # create a graph where 0 is the source and 9 is the sink
    for i in range(1, 9):
16
17
        g.add_edge(0, i, __REPR__=1)
        g.add_edge(i, 9, __REPR__=1)
Minjie Wang's avatar
Minjie Wang committed
18
19
20
21
22
    # add a back flow from 9 to 0
    g.add_edge(9, 0)
    return g

def check(g, h):
23
    nh = [str(g.nodes[i][__REPR__]) for i in range(10)]
Minjie Wang's avatar
Minjie Wang committed
24
25
26
27
28
29
30
    h = [str(x) for x in h]
    assert nh == h, "nh=[%s], h=[%s]" % (' '.join(nh), ' '.join(h))

def test_sendrecv():
    g = generate_graph()
    check(g, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    g.register_message_func(message_func)
31
32
    g.register_reduce_func(reduce_func)
    g.send(0, 1)
33
    g.recv(1)
Minjie Wang's avatar
Minjie Wang committed
34
    check(g, [1, 4, 3, 4, 5, 6, 7, 8, 9, 10])
35
36
    g.send(5, 9)
    g.send(6, 9)
37
    g.recv(9)
Minjie Wang's avatar
Minjie Wang committed
38
39
    check(g, [1, 4, 3, 4, 5, 6, 7, 8, 9, 25])

40
def message_func_hybrid(src, edge):
Minjie Wang's avatar
Minjie Wang committed
41
42
    return src[__REPR__] + edge

43
44
def reduce_func_hybrid(node, msgs):
    return node[__REPR__] + sum(msgs)
Minjie Wang's avatar
Minjie Wang committed
45
46
47
48
49
50

def test_hybridrepr():
    g = generate_graph()
    for i in range(10):
        g.nodes[i]['id'] = -i
    g.register_message_func(message_func_hybrid)
51
52
    g.register_reduce_func(reduce_func_hybrid)
    g.send(0, 1)
53
    g.recv(1)
Minjie Wang's avatar
Minjie Wang committed
54
    check(g, [1, 4, 3, 4, 5, 6, 7, 8, 9, 10])
55
56
    g.send(5, 9)
    g.send(6, 9)
57
    g.recv(9)
Minjie Wang's avatar
Minjie Wang committed
58
59
60
61
62
    check(g, [1, 4, 3, 4, 5, 6, 7, 8, 9, 25])

if __name__ == '__main__':
    test_sendrecv()
    test_hybridrepr()