test_random.py 1.38 KB
Newer Older
1
2
import unittest

3
4
5
import backend as F
import numpy as np

6
7
8
9
10
11
import dgl


@unittest.skipIf(
    F._default_context_str == "gpu", reason="GPU random choice not implemented"
)
12
13
14
15
16
17
def test_random_choice():
    # test 1
    a = F.arange(0, 100)
    x = dgl.random.choice(a, 10, replace=True, prob=None)
    assert len(x) == 10
    for i in range(len(x)):
18
        assert F.asnumpy(x[i]) >= 0 and F.asnumpy(x[i]) < 100
19
20
21
22
23
    # test 2, replace=False, small num
    a = F.arange(0, 100)
    x = dgl.random.choice(a, 10, replace=False, prob=None)
    assert len(x) == 10
    for i in range(len(x)):
24
        assert F.asnumpy(x[i]) >= 0 and F.asnumpy(x[i]) < 100
25
26
27
28
29
30
31
32
33
34
35
    # test 3, replace=False, large num
    a = F.arange(0, 100)
    x = dgl.random.choice(a, 100, replace=False, prob=None)
    assert len(x) == 100
    assert np.array_equal(np.sort(F.asnumpy(x)), F.asnumpy(a))
    # test 4, first arg is integer
    x = dgl.random.choice(100, 100, replace=False, prob=None)
    assert len(x) == 100
    assert np.array_equal(np.sort(F.asnumpy(x)), F.asnumpy(a))
    # test 5, with prob
    prob = np.ones((100,))
36
    prob[37:40] = 0.0
37
38
39
40
41
42
    prob -= prob.min()
    prob /= prob.sum()
    prob = F.tensor(prob)
    x = dgl.random.choice(100, 97, replace=False, prob=prob)
    assert len(x) == 97
    for i in range(len(x)):
43
        assert F.asnumpy(x[i]) < 37 or F.asnumpy(x[i]) >= 40
44

45
46

if __name__ == "__main__":
47
    test_random_choice()