• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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