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 numpy as np 17import pytest 18 19import mindspore.context as context 20from mindspore.common.tensor import Tensor 21from mindspore.ops import operations as P 22 23 24@pytest.mark.level0 25@pytest.mark.platform_x86_gpu_training 26@pytest.mark.env_onecard 27def test_nobroadcast(): 28 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 29 30 np.random.seed(42) 31 x1_np = np.random.rand(10, 20).astype(np.float32) 32 x2_np = np.random.rand(10, 20).astype(np.float32) 33 x1_np_int32 = np.random.randint(0, 100, (10, 20)).astype(np.int32) 34 x2_np_int32 = np.random.randint(0, 100, (10, 20)).astype(np.int32) 35 36 output_ms = P.Minimum()(Tensor(x1_np), Tensor(x2_np)) 37 output_np = np.minimum(x1_np, x2_np) 38 assert np.allclose(output_ms.asnumpy(), output_np) 39 40 output_ms = P.Maximum()(Tensor(x1_np), Tensor(x2_np)) 41 output_np = np.maximum(x1_np, x2_np) 42 assert np.allclose(output_ms.asnumpy(), output_np) 43 44 output_ms = P.Greater()(Tensor(x1_np), Tensor(x2_np)) 45 output_np = x1_np > x2_np 46 assert np.allclose(output_ms.asnumpy(), output_np) 47 output_ms = P.Greater()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 48 output_np = x1_np_int32 > x2_np_int32 49 assert np.allclose(output_ms.asnumpy(), output_np) 50 51 output_ms = P.Less()(Tensor(x1_np), Tensor(x2_np)) 52 output_np = x1_np < x2_np 53 assert np.allclose(output_ms.asnumpy(), output_np) 54 output_ms = P.Less()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 55 output_np = x1_np_int32 < x2_np_int32 56 assert np.allclose(output_ms.asnumpy(), output_np) 57 58 output_ms = P.Pow()(Tensor(x1_np), Tensor(x2_np)) 59 output_np = np.power(x1_np, x2_np) 60 assert np.allclose(output_ms.asnumpy(), output_np) 61 62 output_ms = P.RealDiv()(Tensor(x1_np), Tensor(x2_np)) 63 output_np = x1_np / x2_np 64 assert np.allclose(output_ms.asnumpy(), output_np) 65 66 output_ms = P.Mul()(Tensor(x1_np), Tensor(x2_np)) 67 output_np = x1_np * x2_np 68 assert np.allclose(output_ms.asnumpy(), output_np) 69 70 output_ms = P.Sub()(Tensor(x1_np), Tensor(x2_np)) 71 output_np = x1_np - x2_np 72 assert np.allclose(output_ms.asnumpy(), output_np) 73 74 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np)) 75 output_np = x1_np / x2_np 76 assert np.allclose(output_ms.asnumpy(), output_np) 77 78 x2_np_zero = np.zeros_like(x2_np) 79 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np_zero)) 80 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 81 82 output_ms = P.Mod()(Tensor(x1_np), Tensor(x2_np)) 83 output_np = np.fmod(x1_np, x2_np) 84 assert np.allclose(output_ms.asnumpy(), output_np) 85 86 output_ms = P.FloorMod()(Tensor(x1_np), Tensor(x2_np)) 87 output_np = np.mod(x1_np, x2_np) 88 assert np.allclose(output_ms.asnumpy(), output_np) 89 90 output_ms = P.Atan2()(Tensor(x1_np), Tensor(x2_np)) 91 output_np = np.arctan2(x1_np, x2_np) 92 assert np.allclose(output_ms.asnumpy(), output_np) 93 94 95@pytest.mark.level0 96@pytest.mark.platform_x86_gpu_training 97@pytest.mark.env_onecard 98def test_nobroadcast_fp16(): 99 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 100 101 np.random.seed(42) 102 x1_np = np.random.rand(10, 20).astype(np.float16) 103 x2_np = np.random.rand(10, 20).astype(np.float16) 104 105 output_ms = P.Minimum()(Tensor(x1_np), Tensor(x2_np)) 106 output_np = np.minimum(x1_np, x2_np) 107 assert np.allclose(output_ms.asnumpy(), output_np) 108 109 output_ms = P.Maximum()(Tensor(x1_np), Tensor(x2_np)) 110 output_np = np.maximum(x1_np, x2_np) 111 assert np.allclose(output_ms.asnumpy(), output_np) 112 113 output_ms = P.Greater()(Tensor(x1_np), Tensor(x2_np)) 114 output_np = x1_np > x2_np 115 assert np.allclose(output_ms.asnumpy(), output_np) 116 117 output_ms = P.Less()(Tensor(x1_np), Tensor(x2_np)) 118 output_np = x1_np < x2_np 119 assert np.allclose(output_ms.asnumpy(), output_np) 120 121 output_ms = P.Pow()(Tensor(x1_np), Tensor(x2_np)) 122 output_np = np.power(x1_np, x2_np) 123 assert np.allclose(output_ms.asnumpy(), output_np) 124 125 output_ms = P.RealDiv()(Tensor(x1_np), Tensor(x2_np)) 126 output_np = x1_np / x2_np 127 assert np.allclose(output_ms.asnumpy(), output_np) 128 129 output_ms = P.Mul()(Tensor(x1_np), Tensor(x2_np)) 130 output_np = x1_np * x2_np 131 assert np.allclose(output_ms.asnumpy(), output_np) 132 133 output_ms = P.Sub()(Tensor(x1_np), Tensor(x2_np)) 134 output_np = x1_np - x2_np 135 assert np.allclose(output_ms.asnumpy(), output_np) 136 137 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np)) 138 output_np = x1_np / x2_np 139 assert np.allclose(output_ms.asnumpy(), output_np) 140 141 x2_np_zero = np.zeros_like(x2_np) 142 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np_zero)) 143 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 144 145 output_ms = P.Mod()(Tensor(x1_np), Tensor(x2_np)) 146 output_np = np.fmod(x1_np, x2_np) 147 assert np.allclose(output_ms.asnumpy(), output_np) 148 149 output_ms = P.FloorMod()(Tensor(x1_np), Tensor(x2_np)) 150 output_np = np.mod(x1_np, x2_np) 151 assert np.allclose(output_ms.asnumpy(), output_np) 152 153 output_ms = P.Atan2()(Tensor(x1_np), Tensor(x2_np)) 154 output_np = np.arctan2(x1_np, x2_np) 155 assert np.allclose(output_ms.asnumpy(), output_np) 156 157 158@pytest.mark.level0 159@pytest.mark.platform_x86_gpu_training 160@pytest.mark.env_onecard 161def test_broadcast(): 162 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 163 164 np.random.seed(42) 165 x1_np = np.random.rand(3, 1, 5, 1).astype(np.float32) 166 x2_np = np.random.rand(1, 4, 1, 6).astype(np.float32) 167 x1_np_int32 = np.random.randint(0, 100, (3, 1, 5, 1)).astype(np.int32) 168 x2_np_int32 = np.random.randint(0, 100, (3, 1, 5, 1)).astype(np.int32) 169 170 output_ms = P.Minimum()(Tensor(x1_np), Tensor(x2_np)) 171 output_np = np.minimum(x1_np, x2_np) 172 assert np.allclose(output_ms.asnumpy(), output_np) 173 174 output_ms = P.Maximum()(Tensor(x1_np), Tensor(x2_np)) 175 output_np = np.maximum(x1_np, x2_np) 176 assert np.allclose(output_ms.asnumpy(), output_np) 177 178 output_ms = P.Greater()(Tensor(x1_np), Tensor(x2_np)) 179 output_np = x1_np > x2_np 180 assert np.allclose(output_ms.asnumpy(), output_np) 181 output_ms = P.Greater()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 182 output_np = x1_np_int32 > x2_np_int32 183 assert np.allclose(output_ms.asnumpy(), output_np) 184 185 output_ms = P.Less()(Tensor(x1_np), Tensor(x2_np)) 186 output_np = x1_np < x2_np 187 assert np.allclose(output_ms.asnumpy(), output_np) 188 output_ms = P.Less()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 189 output_np = x1_np_int32 < x2_np_int32 190 assert np.allclose(output_ms.asnumpy(), output_np) 191 192 output_ms = P.Pow()(Tensor(x1_np), Tensor(x2_np)) 193 output_np = np.power(x1_np, x2_np) 194 assert np.allclose(output_ms.asnumpy(), output_np) 195 196 output_ms = P.RealDiv()(Tensor(x1_np), Tensor(x2_np)) 197 output_np = x1_np / x2_np 198 assert np.allclose(output_ms.asnumpy(), output_np) 199 200 output_ms = P.Mul()(Tensor(x1_np), Tensor(x2_np)) 201 output_np = x1_np * x2_np 202 assert np.allclose(output_ms.asnumpy(), output_np) 203 204 output_ms = P.Sub()(Tensor(x1_np), Tensor(x2_np)) 205 output_np = x1_np - x2_np 206 assert np.allclose(output_ms.asnumpy(), output_np) 207 208 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np)) 209 output_np = x1_np / x2_np 210 assert np.allclose(output_ms.asnumpy(), output_np) 211 212 x2_np_zero = np.zeros_like(x2_np) 213 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np_zero)) 214 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 215 216 output_ms = P.Mod()(Tensor(x1_np), Tensor(x2_np)) 217 output_np = np.fmod(x1_np, x2_np) 218 assert np.allclose(output_ms.asnumpy(), output_np) 219 220 output_ms = P.FloorMod()(Tensor(x1_np), Tensor(x2_np)) 221 output_np = np.mod(x1_np, x2_np) 222 assert np.allclose(output_ms.asnumpy(), output_np) 223 224 output_ms = P.Atan2()(Tensor(x1_np), Tensor(x2_np)) 225 output_np = np.arctan2(x1_np, x2_np) 226 assert np.allclose(output_ms.asnumpy(), output_np) 227 228 229@pytest.mark.level0 230@pytest.mark.platform_x86_gpu_training 231@pytest.mark.env_onecard 232def test_broadcast_diff_dims(): 233 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 234 235 np.random.seed(42) 236 x1_np = np.random.rand(2).astype(np.float32) 237 x2_np = np.random.rand(2, 1).astype(np.float32) 238 x1_np_int32 = np.random.randint(0, 100, (2)).astype(np.int32) 239 x2_np_int32 = np.random.randint(0, 100, (2, 1)).astype(np.int32) 240 241 output_ms = P.Minimum()(Tensor(x1_np), Tensor(x2_np)) 242 output_np = np.minimum(x1_np, x2_np) 243 assert np.allclose(output_ms.asnumpy(), output_np) 244 245 output_ms = P.Maximum()(Tensor(x1_np), Tensor(x2_np)) 246 output_np = np.maximum(x1_np, x2_np) 247 assert np.allclose(output_ms.asnumpy(), output_np) 248 output_ms = P.Greater()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 249 output_np = x1_np_int32 > x2_np_int32 250 assert np.allclose(output_ms.asnumpy(), output_np) 251 252 output_ms = P.Greater()(Tensor(x1_np), Tensor(x2_np)) 253 output_np = x1_np > x2_np 254 assert np.allclose(output_ms.asnumpy(), output_np) 255 256 output_ms = P.Less()(Tensor(x1_np), Tensor(x2_np)) 257 output_np = x1_np < x2_np 258 assert np.allclose(output_ms.asnumpy(), output_np) 259 output_ms = P.Less()(Tensor(x1_np_int32), Tensor(x2_np_int32)) 260 output_np = x1_np_int32 < x2_np_int32 261 assert np.allclose(output_ms.asnumpy(), output_np) 262 263 output_ms = P.Pow()(Tensor(x1_np), Tensor(x2_np)) 264 output_np = np.power(x1_np, x2_np) 265 assert np.allclose(output_ms.asnumpy(), output_np) 266 267 output_ms = P.RealDiv()(Tensor(x1_np), Tensor(x2_np)) 268 output_np = x1_np / x2_np 269 assert np.allclose(output_ms.asnumpy(), output_np) 270 271 output_ms = P.Mul()(Tensor(x1_np), Tensor(x2_np)) 272 output_np = x1_np * x2_np 273 assert np.allclose(output_ms.asnumpy(), output_np) 274 275 output_ms = P.Sub()(Tensor(x1_np), Tensor(x2_np)) 276 output_np = x1_np - x2_np 277 assert np.allclose(output_ms.asnumpy(), output_np) 278 279 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np)) 280 output_np = x1_np / x2_np 281 assert np.allclose(output_ms.asnumpy(), output_np) 282 283 x2_np_zero = np.zeros_like(x2_np) 284 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np_zero)) 285 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 286 287 output_ms = P.Mod()(Tensor(x1_np), Tensor(x2_np)) 288 output_np = np.fmod(x1_np, x2_np) 289 assert np.allclose(output_ms.asnumpy(), output_np) 290 291 output_ms = P.FloorMod()(Tensor(x1_np), Tensor(x2_np)) 292 output_np = np.mod(x1_np, x2_np) 293 assert np.allclose(output_ms.asnumpy(), output_np) 294 295 output_ms = P.Atan2()(Tensor(x1_np), Tensor(x2_np)) 296 output_np = np.arctan2(x1_np, x2_np) 297 assert np.allclose(output_ms.asnumpy(), output_np) 298 299 300@pytest.mark.level0 301@pytest.mark.platform_x86_gpu_training 302@pytest.mark.env_onecard 303def test_broadcast_fp16(): 304 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 305 306 np.random.seed(42) 307 x1_np = np.random.rand(3, 1, 5, 1).astype(np.float16) 308 x2_np = np.random.rand(1, 4, 1, 6).astype(np.float16) 309 310 output_ms = P.Minimum()(Tensor(x1_np), Tensor(x2_np)) 311 output_np = np.minimum(x1_np, x2_np) 312 assert np.allclose(output_ms.asnumpy(), output_np) 313 314 output_ms = P.Maximum()(Tensor(x1_np), Tensor(x2_np)) 315 output_np = np.maximum(x1_np, x2_np) 316 assert np.allclose(output_ms.asnumpy(), output_np) 317 318 output_ms = P.Greater()(Tensor(x1_np), Tensor(x2_np)) 319 output_np = x1_np > x2_np 320 assert np.allclose(output_ms.asnumpy(), output_np) 321 322 output_ms = P.Less()(Tensor(x1_np), Tensor(x2_np)) 323 output_np = x1_np < x2_np 324 assert np.allclose(output_ms.asnumpy(), output_np) 325 326 output_ms = P.Pow()(Tensor(x1_np), Tensor(x2_np)) 327 output_np = np.power(x1_np, x2_np) 328 assert np.allclose(output_ms.asnumpy(), output_np) 329 330 output_ms = P.RealDiv()(Tensor(x1_np), Tensor(x2_np)) 331 output_np = x1_np / x2_np 332 assert np.allclose(output_ms.asnumpy(), output_np) 333 334 output_ms = P.Mul()(Tensor(x1_np), Tensor(x2_np)) 335 output_np = x1_np * x2_np 336 assert np.allclose(output_ms.asnumpy(), output_np) 337 338 output_ms = P.Sub()(Tensor(x1_np), Tensor(x2_np)) 339 output_np = x1_np - x2_np 340 assert np.allclose(output_ms.asnumpy(), output_np) 341 342 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np)) 343 output_np = x1_np / x2_np 344 assert np.allclose(output_ms.asnumpy(), output_np) 345 346 x2_np_zero = np.zeros_like(x2_np) 347 output_ms = P.DivNoNan()(Tensor(x1_np), Tensor(x2_np_zero)) 348 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 349 350 output_ms = P.Mod()(Tensor(x1_np), Tensor(x2_np)) 351 output_np = np.fmod(x1_np, x2_np) 352 assert np.allclose(output_ms.asnumpy(), output_np) 353 354 output_ms = P.FloorMod()(Tensor(x1_np), Tensor(x2_np)) 355 output_np = np.mod(x1_np, x2_np) 356 assert np.allclose(output_ms.asnumpy(), output_np) 357 358 output_ms = P.Atan2()(Tensor(x1_np), Tensor(x2_np)) 359 output_np = np.arctan2(x1_np, x2_np) 360 assert np.allclose(output_ms.asnumpy(), output_np) 361 362 363@pytest.mark.level0 364@pytest.mark.platform_x86_gpu_training 365@pytest.mark.env_onecard 366def test_divnonan_int8(): 367 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 368 369 np.random.seed(42) 370 x1_np_int8 = np.random.randint(1, 100, (10, 20)).astype(np.int8) 371 x2_np_int8 = np.random.randint(1, 100, (10, 20)).astype(np.int8) 372 373 output_ms = P.DivNoNan()(Tensor(x1_np_int8), Tensor(x2_np_int8)) 374 output_np = x1_np_int8 // x2_np_int8 375 print(output_ms.asnumpy(), output_np) 376 assert np.allclose(output_ms.asnumpy(), output_np) 377 378 x2_np_zero = np.zeros_like(x2_np_int8) 379 output_ms = P.DivNoNan()(Tensor(x1_np_int8), Tensor(x2_np_zero)) 380 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 381 382 383@pytest.mark.level0 384@pytest.mark.platform_x86_gpu_training 385@pytest.mark.env_onecard 386def test_divnonan_uint8(): 387 context.set_context(mode=context.GRAPH_MODE, device_target='GPU') 388 389 np.random.seed(42) 390 x1_np_uint8 = np.random.randint(1, 100, (10, 20)).astype(np.uint8) 391 x2_np_uint8 = np.random.randint(1, 100, (10, 20)).astype(np.uint8) 392 393 output_ms = P.DivNoNan()(Tensor(x1_np_uint8), Tensor(x2_np_uint8)) 394 output_np = x1_np_uint8 // x2_np_uint8 395 print(output_ms.asnumpy(), output_np) 396 assert np.allclose(output_ms.asnumpy(), output_np) 397 398 x2_np_zero = np.zeros_like(x2_np_uint8) 399 output_ms = P.DivNoNan()(Tensor(x1_np_uint8), Tensor(x2_np_zero)) 400 assert np.allclose(output_ms.asnumpy(), x2_np_zero) 401