1# Copyright 2020 Huawei Technologies Co., Ltd 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# ============================================================================ 15 16import pytest 17import numpy as np 18from mindspore import Tensor 19import mindspore.nn as nn 20import mindspore.context as context 21from mindspore.ops import composite as C 22from mindspore.common.initializer import initializer 23 24 25context.set_context(mode=context.GRAPH_MODE, device_target="CPU") 26 27 28class NetDot(nn.Cell): 29 def construct(self, x, y): 30 return C.dot(x, y) 31 32 33@pytest.mark.level0 34@pytest.mark.platform_x86_cpu 35@pytest.mark.env_onecard 36def test_dot_001(): 37 x1_tensor = Tensor(np.array([[1., 2.], [4., 5.]]).astype(np.float32)) 38 x2_tensor = Tensor(np.array([[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]], \ 39 [[9., 10.], [11., 12.]]]).astype(np.float32)) 40 41 network = NetDot() 42 ms_result_np = network(x1_tensor, x2_tensor) 43 expect_result = np.array([[[7., 10.], [19., 22.], [31., 34.]], \ 44 [[19., 28.], [55., 64.], [91., 100.]]]).astype(np.float32) 45 assert (ms_result_np.asnumpy() == expect_result).all() 46 47 48@pytest.mark.level0 49@pytest.mark.platform_x86_cpu 50@pytest.mark.env_onecard 51def test_dot_002(): 52 x1_tensor = Tensor(np.array([[1., 2.], [4., 5.]]).astype(np.float32)) 53 x2_tensor = Tensor(np.array([[[1., 2., 3.], [4., 5., 6.]], [[7., 8., 9.], [10., 11., 12.]]]).astype(np.float32)) 54 55 network = NetDot() 56 ms_result_np = network(x1_tensor, x2_tensor) 57 expect_result = np.array([[[9., 12., 15.], [27., 30., 33.]], [[24., 33., 42.], [78., 87., 96.]]]).astype(np.float32) 58 59 assert (ms_result_np.asnumpy() == expect_result).all() 60 61 62@pytest.mark.level0 63@pytest.mark.platform_x86_cpu 64@pytest.mark.env_onecard 65def test_dot_003(): 66 x1_tensor = initializer(Tensor(np.arange(2 * 3 * 4).reshape(2, 3, 4).astype(np.float32)), [2, 3, 4]) 67 x2_tensor = initializer(Tensor(np.arange(1 * 5 * 4 * 2).reshape(1, 5, 4, 2).astype(np.float32)), [1, 5, 4, 2]) 68 69 network = NetDot() 70 ms_result_np = network(x1_tensor, x2_tensor) 71 expect_result = np.array([[[[[28., 34.], 72 [76., 82.], 73 [124., 130.], 74 [172., 178.], 75 [220., 226.]]], 76 [[[76., 98.], 77 [252., 274.], 78 [428., 450.], 79 [604., 626.], 80 [780., 802.]]], 81 [[[124., 162.], 82 [428., 466.], 83 [732., 770.], 84 [1036., 1074.], 85 [1340., 1378.]]]], 86 [[[[172., 226.], 87 [604., 658.], 88 [1036., 1090.], 89 [1468., 1522.], 90 [1900., 1954.]]], 91 [[[220., 290.], 92 [780., 850.], 93 [1340., 1410.], 94 [1900., 1970.], 95 [2460., 2530.]]], 96 [[[268., 354.], 97 [956., 1042.], 98 [1644., 1730.], 99 [2332., 2418.], 100 [3020., 3106.]]]]]).astype(np.float32) 101 102 assert (ms_result_np.asnumpy() == expect_result).all() 103 104 105@pytest.mark.level0 106@pytest.mark.platform_x86_cpu 107@pytest.mark.env_onecard 108def test_dot_004(): 109 x1_tensor = initializer(Tensor(np.arange(3 * 4).reshape(3, 4).astype(np.float32)), [3, 4]) 110 x2_tensor = initializer(Tensor(np.arange(4 * 5).reshape(4, 5).astype(np.float32)), [4, 5]) 111 112 network = NetDot() 113 ms_result_np = network(x1_tensor, x2_tensor) 114 expect_result = np.array([[70., 76., 82., 88., 94.], 115 [190., 212., 234., 256., 278.], 116 [310., 348., 386., 424., 462.]]).astype(np.float32) 117 118 assert (ms_result_np.asnumpy() == expect_result).all() 119 120 121@pytest.mark.level0 122@pytest.mark.platform_x86_cpu 123@pytest.mark.env_onecard 124def test_dot_005(): 125 x1_tensor = initializer(Tensor(np.arange(2 * 3 * 4).reshape(2, 3, 4).astype(np.float32)), [2, 3, 4]) 126 x2_tensor = initializer(Tensor(np.arange(4 * 5).reshape(4, 5).astype(np.float32)), [4, 5]) 127 128 network = NetDot() 129 ms_result_np = network(x1_tensor, x2_tensor) 130 expect_result = np.array([[[70., 76., 82., 88., 94.], 131 [190., 212., 234., 256., 278.], 132 [310., 348., 386., 424., 462.]], 133 [[430., 484., 538., 592., 646.], 134 [550., 620., 690., 760., 830.], 135 [670., 756., 842., 928., 1014.]]]).astype(np.float32) 136 137 assert (ms_result_np.asnumpy() == expect_result).all() 138 139 140@pytest.mark.level0 141@pytest.mark.platform_x86_cpu 142@pytest.mark.env_onecard 143def test_dot_006(): 144 x1_tensor = initializer(Tensor(np.arange(4).reshape(4).astype(np.float32)), [4]) 145 x2_tensor = initializer(Tensor(np.arange(2 * 4 * 5).reshape(2, 4, 5).astype(np.float32)), [2, 4, 5]) 146 147 network = NetDot() 148 try: 149 network(x1_tensor, x2_tensor) 150 except ValueError as e: 151 assert ValueError == type(e) 152 153 154def test_dot_007(): 155 x1_tensor = initializer(Tensor(np.arange(4).reshape(4).astype(np.float32)), [4]) 156 x2_tensor = initializer(Tensor(np.arange(4 * 4).reshape(4, 4).astype(np.float32)), [4, 4]) 157 158 network = NetDot() 159 try: 160 network(x2_tensor, x1_tensor) 161 except ValueError as e: 162 assert ValueError == type(e) 163 164 165@pytest.mark.level0 166@pytest.mark.platform_x86_cpu 167@pytest.mark.env_onecard 168def test_dot_008(): 169 x1_tensor = Tensor(np.array([]).astype(np.float32)) 170 x2_tensor = Tensor(np.array([[[1., 2.], [3., 4.]], 171 [[5., 6.], [7., 8.]], 172 [[9., 10.], [11., 12.]]]).astype(np.float32)) 173 174 network = NetDot() 175 try: 176 network(x2_tensor, x1_tensor) 177 except ValueError as e: 178 assert ValueError == type(e) 179 180 181@pytest.mark.level0 182@pytest.mark.platform_x86_cpu 183@pytest.mark.env_onecard 184def test_dot_009(): 185 # for document 186 input_x1 = Tensor(np.array(np.ones(shape=[2, 3])).astype(np.float32)) 187 input_x2 = Tensor(np.array(np.ones(shape=[1, 2, 3])).astype(np.float32)) 188 189 network = NetDot() 190 try: 191 network(input_x1, input_x2) 192 except ValueError as e: 193 assert ValueError == type(e) 194 195 196@pytest.mark.level0 197@pytest.mark.platform_x86_cpu 198@pytest.mark.env_onecard 199def test_dot_010(): 200 # for document 201 input_x1 = Tensor(np.array(np.ones(shape=[2, 3])).astype(np.float32)) 202 input_x2 = Tensor(np.array(np.ones(shape=[1, 3, 2])).astype(np.float32)) 203 204 network = NetDot() 205 ms_result_np = network(input_x1, input_x2) 206 expect_result = np.array([[[3., 3.]], 207 [[3., 3.]]]).astype(np.float32) 208 209 assert (ms_result_np.asnumpy() == expect_result).all() 210 211 212@pytest.mark.level0 213@pytest.mark.platform_x86_cpu 214@pytest.mark.env_onecard 215def test_dot_011(): 216 # for document 217 context.set_context(mode=context.PYNATIVE_MODE, device_target="CPU") 218 input_x1 = Tensor(np.array(np.ones(shape=[2, 3])).astype(np.float32)) 219 input_x2 = Tensor(np.array(np.ones(shape=[1, 3, 2])).astype(np.float32)) 220 221 network = NetDot() 222 ms_result_np = network(input_x1, input_x2) 223 expect_result = np.array([[[3., 3.]], 224 [[3., 3.]]]).astype(np.float32) 225 226 assert (ms_result_np.asnumpy() == expect_result).all() 227