test_partition.py 2.18 KB
Newer Older
1
import unittest
2

3
4
import backend as F

5
6
from dgl.distributed import graph_partition_book as gpb
from dgl.partition import NDArrayPartition
7
from test_utils import parametrize_idtype
8
9


10
11
12
13
@unittest.skipIf(
    F._default_context_str == "cpu",
    reason="NDArrayPartition only works on GPU.",
)
nv-dlasalle's avatar
nv-dlasalle committed
14
@parametrize_idtype
15
def test_get_node_partition_from_book(idtype):
16
17
18
19
    node_map = {"_N": F.tensor([[0, 3], [4, 5], [6, 10]], dtype=idtype)}
    edge_map = {
        ("_N", "_E", "_N"): F.tensor([[0, 9], [10, 15], [16, 25]], dtype=idtype)
    }
20
21
    ntypes = {ntype: i for i, ntype in enumerate(node_map)}
    etypes = {etype: i for i, etype in enumerate(edge_map)}
22
    book = gpb.RangePartitionBook(0, 3, node_map, edge_map, ntypes, etypes)
23
24
25
26
    partition = gpb.get_node_partition_from_book(book, F.ctx())
    assert partition.num_parts() == 3
    assert partition.array_size() == 11

27
    # Test map_to_local
28
29
30
31
32
    test_ids = F.copy_to(F.tensor([0, 2, 6, 7, 10], dtype=idtype), F.ctx())
    act_ids = partition.map_to_local(test_ids)
    exp_ids = F.copy_to(F.tensor([0, 2, 0, 1, 4], dtype=idtype), F.ctx())
    assert F.array_equal(act_ids, exp_ids)

33
    # Test map_to_global
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    test_ids = F.copy_to(F.tensor([0, 2], dtype=idtype), F.ctx())
    act_ids = partition.map_to_global(test_ids, 0)
    exp_ids = F.copy_to(F.tensor([0, 2], dtype=idtype), F.ctx())
    assert F.array_equal(act_ids, exp_ids)

    test_ids = F.copy_to(F.tensor([0, 1], dtype=idtype), F.ctx())
    act_ids = partition.map_to_global(test_ids, 1)
    exp_ids = F.copy_to(F.tensor([4, 5], dtype=idtype), F.ctx())
    assert F.array_equal(act_ids, exp_ids)

    test_ids = F.copy_to(F.tensor([0, 1, 4], dtype=idtype), F.ctx())
    act_ids = partition.map_to_global(test_ids, 2)
    exp_ids = F.copy_to(F.tensor([6, 7, 10], dtype=idtype), F.ctx())
    assert F.array_equal(act_ids, exp_ids)
48
49
50
51
52
53
54
55

    # Test generate_permutation
    test_ids = F.copy_to(F.tensor([6, 0, 7, 2, 10], dtype=idtype), F.ctx())
    perm, split_sum = partition.generate_permutation(test_ids)
    exp_perm = F.copy_to(F.tensor([1, 3, 0, 2, 4], dtype=idtype), F.ctx())
    exp_sum = F.copy_to(F.tensor([2, 0, 3]), F.ctx())
    assert F.array_equal(perm, exp_perm)
    assert F.array_equal(split_sum, exp_sum)