test_add.py 1.05 KB
Newer Older
rusty1s's avatar
rusty1s committed
1
2
3
from nose.tools import assert_equal

import torch
rusty1s's avatar
rusty1s committed
4
from torch.autograd import Variable
rusty1s's avatar
rusty1s committed
5
from torch_scatter import scatter_add_, scatter_add
rusty1s's avatar
rusty1s committed
6
7


rusty1s's avatar
rusty1s committed
8
def test_scatter_add():
rusty1s's avatar
rusty1s committed
9
10
11
12
13
14
15
    input = [[2, 0, 1, 4, 3], [0, 2, 1, 3, 4]]
    index = [[4, 5, 4, 2, 3], [0, 0, 2, 2, 1]]
    input = torch.FloatTensor(input)
    index = torch.LongTensor(index)
    output = input.new(2, 6).fill_(0)
    expected_output = [[0, 0, 4, 3, 3, 0], [2, 4, 4, 0, 0, 0]]

rusty1s's avatar
rusty1s committed
16
17
18
19
    scatter_add_(output, index, input, dim=1)
    assert_equal(output.tolist(), expected_output)

    output = scatter_add(index, input, dim=1)
rusty1s's avatar
rusty1s committed
20
    assert_equal(output.tolist(), expected_output)
rusty1s's avatar
rusty1s committed
21

rusty1s's avatar
rusty1s committed
22
    output = Variable(output).fill_(0)
rusty1s's avatar
rusty1s committed
23
24
    index = Variable(index)
    input = Variable(input, requires_grad=True)
rusty1s's avatar
rusty1s committed
25
    scatter_add_(output, index, input, dim=1)
rusty1s's avatar
rusty1s committed
26

rusty1s's avatar
rusty1s committed
27
28
29
30
31
    c = output.sum()
    c.backward()

    # # a = input * 2
    # # b = output * 2
rusty1s's avatar
rusty1s committed
32
33
    # a = input * 2
    # b = output * 2
rusty1s's avatar
rusty1s committed
34
35
    # ScatterAdd(1)(b, index, a)
    # # b.scatter_add_(1, index, a)
rusty1s's avatar
rusty1s committed
36

rusty1s's avatar
rusty1s committed
37
38
    # c = b.sum()
    # c.backward()
rusty1s's avatar
rusty1s committed
39

rusty1s's avatar
rusty1s committed
40
41
    # print(input.grad)
    # print(output.grad)