test_tensor.py 5.4 KB
Newer Older
1
#   Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
D
dzhwinter 已提交
2
#
D
dzhwinter 已提交
3 4 5
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
D
dzhwinter 已提交
6
#
D
dzhwinter 已提交
7
#     http://www.apache.org/licenses/LICENSE-2.0
D
dzhwinter 已提交
8
#
D
dzhwinter 已提交
9 10 11 12 13 14
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

15
import paddle.fluid.core as core
Y
Yu Yang 已提交
16 17 18 19
import unittest
import numpy


20
class TestTensor(unittest.TestCase):
21
    def test_int_tensor(self):
Y
Yu Yang 已提交
22
        scope = core.Scope()
D
dongzhihong 已提交
23
        var = scope.var("test_tensor")
Q
qijun 已提交
24
        place = core.CPUPlace()
Q
qijun 已提交
25

Y
Yu Yang 已提交
26 27
        tensor = var.get_tensor()

Y
yuyang18 已提交
28
        tensor._set_dims([1000, 784])
Y
yuyang18 已提交
29
        tensor._alloc_int(place)
Y
Yu Yang 已提交
30 31 32 33
        tensor_array = numpy.array(tensor)
        self.assertEqual((1000, 784), tensor_array.shape)
        tensor_array[3, 9] = 1
        tensor_array[19, 11] = 2
Q
qijun 已提交
34
        tensor.set(tensor_array, place)
Y
Yu Yang 已提交
35 36

        tensor_array_2 = numpy.array(tensor)
37 38
        self.assertEqual(1, tensor_array_2[3, 9])
        self.assertEqual(2, tensor_array_2[19, 11])
Y
Yu Yang 已提交
39

40
    def test_float_tensor(self):
Y
Yu Yang 已提交
41
        scope = core.Scope()
D
dongzhihong 已提交
42
        var = scope.var("test_tensor")
Q
qijun 已提交
43
        place = core.CPUPlace()
Q
qijun 已提交
44

Y
Yu Yang 已提交
45 46
        tensor = var.get_tensor()

Y
yuyang18 已提交
47
        tensor._set_dims([1000, 784])
Y
yuyang18 已提交
48
        tensor._alloc_float(place)
Y
Yu Yang 已提交
49 50 51 52 53

        tensor_array = numpy.array(tensor)
        self.assertEqual((1000, 784), tensor_array.shape)
        tensor_array[3, 9] = 1.0
        tensor_array[19, 11] = 2.0
Q
qijun 已提交
54
        tensor.set(tensor_array, place)
Y
Yu Yang 已提交
55 56 57 58 59

        tensor_array_2 = numpy.array(tensor)
        self.assertAlmostEqual(1.0, tensor_array_2[3, 9])
        self.assertAlmostEqual(2.0, tensor_array_2[19, 11])

60
    def test_int_lod_tensor(self):
61
        place = core.CPUPlace()
62
        scope = core.Scope()
D
dongzhihong 已提交
63
        var_lod = scope.var("test_lod_tensor")
64 65
        lod_tensor = var_lod.get_tensor()

Y
yuyang18 已提交
66
        lod_tensor._set_dims([4, 4, 6])
Y
yuyang18 已提交
67
        lod_tensor._alloc_int(place)
68 69 70 71
        array = numpy.array(lod_tensor)
        array[0, 0, 0] = 3
        array[3, 3, 5] = 10
        lod_tensor.set(array, place)
72
        lod_tensor.set_recursive_sequence_lengths([[2, 2]])
73 74 75 76

        lod_v = numpy.array(lod_tensor)
        self.assertTrue(numpy.alltrue(array == lod_v))

77 78
        lod = lod_tensor.recursive_sequence_lengths()
        self.assertEqual(2, lod[0][0])
79 80 81
        self.assertEqual(2, lod[0][1])

    def test_float_lod_tensor(self):
82
        place = core.CPUPlace()
83
        scope = core.Scope()
D
dongzhihong 已提交
84
        var_lod = scope.var("test_lod_tensor")
85 86

        lod_tensor = var_lod.get_tensor()
Y
yuyang18 已提交
87
        lod_tensor._set_dims([5, 2, 3, 4])
Y
yuyang18 已提交
88
        lod_tensor._alloc_float(place)
89 90 91

        tensor_array = numpy.array(lod_tensor)
        self.assertEqual((5, 2, 3, 4), tensor_array.shape)
92 93
        tensor_array[0, 0, 0, 0] = 1.0
        tensor_array[0, 0, 0, 1] = 2.0
94 95 96 97 98
        lod_tensor.set(tensor_array, place)

        lod_v = numpy.array(lod_tensor)
        self.assertAlmostEqual(1.0, lod_v[0, 0, 0, 0])
        self.assertAlmostEqual(2.0, lod_v[0, 0, 0, 1])
99
        self.assertEqual(len(lod_tensor.recursive_sequence_lengths()), 0)
100

101 102 103
        lod_py = [[2, 1], [1, 2, 2]]
        lod_tensor.set_recursive_sequence_lengths(lod_py)
        lod = lod_tensor.recursive_sequence_lengths()
104 105 106 107
        self.assertListEqual(lod_py, lod)

    def test_lod_tensor_init(self):
        place = core.CPUPlace()
108
        lod_py = [[2, 1], [1, 2, 2]]
D
dzhwinter 已提交
109
        lod_tensor = core.LoDTensor()
110

Y
yuyang18 已提交
111
        lod_tensor._set_dims([5, 2, 3, 4])
112
        lod_tensor.set_recursive_sequence_lengths(lod_py)
Y
yuyang18 已提交
113
        lod_tensor._alloc_float(place)
D
dzhwinter 已提交
114 115 116 117 118 119 120 121
        tensor_array = numpy.array(lod_tensor)
        tensor_array[0, 0, 0, 0] = 1.0
        tensor_array[0, 0, 0, 1] = 2.0
        lod_tensor.set(tensor_array, place)

        lod_v = numpy.array(lod_tensor)
        self.assertAlmostEqual(1.0, lod_v[0, 0, 0, 0])
        self.assertAlmostEqual(2.0, lod_v[0, 0, 0, 1])
122
        self.assertListEqual(lod_py, lod_tensor.recursive_sequence_lengths())
D
dzhwinter 已提交
123 124 125 126 127

    def test_lod_tensor_gpu_init(self):
        if not core.is_compiled_with_cuda():
            return
        place = core.CUDAPlace(0)
128
        lod_py = [[2, 1], [1, 2, 2]]
D
dzhwinter 已提交
129 130
        lod_tensor = core.LoDTensor()

Y
yuyang18 已提交
131
        lod_tensor._set_dims([5, 2, 3, 4])
132
        lod_tensor.set_recursive_sequence_lengths(lod_py)
Y
yuyang18 已提交
133
        lod_tensor._alloc_float(place)
134 135 136 137
        tensor_array = numpy.array(lod_tensor)
        tensor_array[0, 0, 0, 0] = 1.0
        tensor_array[0, 0, 0, 1] = 2.0
        lod_tensor.set(tensor_array, place)
138

139
        lod_v = numpy.array(lod_tensor)
140 141
        self.assertAlmostEqual(1.0, lod_v[0, 0, 0, 0])
        self.assertAlmostEqual(2.0, lod_v[0, 0, 0, 1])
142
        self.assertListEqual(lod_py, lod_tensor.recursive_sequence_lengths())
143

Q
Qiao Longfei 已提交
144 145 146 147 148 149 150
    def test_empty_tensor(self):
        place = core.CPUPlace()
        scope = core.Scope()
        var = scope.var("test_tensor")

        tensor = var.get_tensor()

Y
yuyang18 已提交
151
        tensor._set_dims([0, 1])
Y
yuyang18 已提交
152
        tensor._alloc_float(place)
Q
Qiao Longfei 已提交
153 154 155 156 157 158

        tensor_array = numpy.array(tensor)
        self.assertEqual((0, 1), tensor_array.shape)

        if core.is_compiled_with_cuda():
            gpu_place = core.CUDAPlace(0)
Y
yuyang18 已提交
159
            tensor._alloc_float(gpu_place)
Q
Qiao Longfei 已提交
160 161 162
            tensor_array = numpy.array(tensor)
            self.assertEqual((0, 1), tensor_array.shape)

Y
Yu Yang 已提交
163 164 165

if __name__ == '__main__':
    unittest.main()