backend_unittest.py 3.49 KB
Newer Older
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
"""This file defines the unified tensor framework interface required by DGL
unit testing, other than the ones used in the framework itself.
"""

###############################################################################
# Tensor, data type and context interfaces

def cuda():
    """Context object for CUDA."""
    pass

###############################################################################
# Tensor functions on feature data
# --------------------------------
# These functions are performance critical, so it's better to have efficient
# implementation in each framework.

def array_equal(a, b):
    """Check whether the two tensors are *exactly* equal."""
    pass

def allclose(a, b):
    """Check whether the two tensors are numerically close to each other."""
    pass

def randn(shape):
    """Generate a tensor with elements from standard normal distribution."""
    pass

def attach_grad(x):
    """Flag the tensor *in-place* to have its gradient computed in backward
    pass.

    If the flag is already set, reset the gradient buffer as well.
    """
    pass

def backward(x, head_gradient=None):
    """Invoke backward computation with an optional head gradient.
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
    Returns nothing."""
    pass

def grad(x):
    """Fetches the gradient from the tensor after backward computation."""
    pass

def is_no_grad(x):
    """Check whether a tensor has its gradient computed."""
    pass

def full(shape, fill_value, dtype, ctx):
    pass

def narrow_row_set(x, start, stop, new):
    """Set a slice of the given tensor to a new value."""
    pass

def sparse_to_numpy(x):
    """Convert a sparse tensor to a numpy array."""
    pass

def clone(x):
    pass

def reduce_sum(x):
    """Sums all the elements into a single scalar."""
    pass

70
71
72
73
def softmax(x, dim):
    """Softmax Operation on Tensors"""
    pass

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
def spmm(x, y):
    """Sparse dense matrix multiply"""
    pass

def add(a, b):
    """Compute a + b"""
    pass

def sub(a, b):
    """Compute a - b"""
    pass

def mul(a, b):
    """Compute a * b"""
    pass

def div(a, b):
    """Compute a / b"""
    pass

def sum(x, dim):
    """Computes the sum of array elements over given axes"""
    pass

def max(x, dim):
    """Computes the max of array elements over given axes"""
    pass

def min(x, dim):
    """Computes the min of array elements over given axes"""
    pass

def prod(x, dim):
    """Computes the prod of array elements over given axes"""
    pass
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
###############################################################################
# Tensor functions used *only* on index tensor
# ----------------
# These operators are light-weighted, so it is acceptable to fallback to
# numpy operators if currently missing in the framework. Ideally in the future,
# DGL should contain all the operations on index, so this set of operators
# should be gradually removed.

###############################################################################
# Other interfaces
# ----------------
# These are not related to tensors. Some of them are temporary workarounds that
# should be included in DGL in the future.

class record_grad(object):
    """Context manager that records the gradients"""
    def __init__(self):
        pass

    def __enter__(self):
        pass

    def __exit__(self, exc_type, exc_value, exc_traceback):
        pass


class no_grad(object):
    """Context manager that explicitly disables gradient computation"""
    def __init__(self):
        pass

    def __enter__(self):
        pass

    def __exit__(self, exc_type, exc_value, exc_traceback):
        pass