• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2021 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""" test_tensor_setitem """
16import numpy as np
17import pytest
18
19from mindspore import Tensor, context
20from mindspore import dtype as mstype
21
22
23def setup_module():
24    context.set_context(mode=context.PYNATIVE_MODE)
25
26
27# GPU: does not supported op "FloorMod"
28@pytest.mark.level1
29@pytest.mark.platform_arm_ascend_training
30@pytest.mark.platform_x86_ascend_training
31@pytest.mark.env_onecard
32def test_tesnsor_augassign_by_slice():
33    input_np_3d = np.arange(120).reshape(4, 5, 6).astype(np.float32)
34    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
35    index_slice_1 = slice(1, None, None)
36    index_slice_2 = slice(None, 4, None)
37    index_slice_3 = slice(-3, 4, None)
38    index_slice_4 = slice(2, -1, None)
39    index_slice_7 = slice(1, 5, None)
40    index_slice_8 = slice(-5, 3, None)
41
42    value_number = 3
43    value_list_1_ele = [2]
44    value_list_mul_ele = [10, 20, 30, 40, 50, 60]
45    value_list_much_ele = [10, 20, 30, 40, 50, 60, 70]
46
47    input_tensor_3d[index_slice_1] += value_number
48    input_np_3d[index_slice_1] += value_number
49    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
50
51    input_tensor_3d[index_slice_2] -= value_list_1_ele
52    input_np_3d[index_slice_2] -= value_list_1_ele
53    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
54
55    input_tensor_3d[index_slice_3] *= value_list_mul_ele
56    input_np_3d[index_slice_3] *= value_list_mul_ele
57    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
58
59    input_tensor_3d[index_slice_4] /= value_number
60    input_np_3d[index_slice_4] /= value_number
61    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
62
63    input_tensor_3d[index_slice_7] /= value_number
64    input_np_3d[index_slice_7] /= value_number
65    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
66
67    input_tensor_3d[index_slice_8] += value_number
68    input_np_3d[index_slice_8] += value_number
69    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
70
71    with pytest.raises(ValueError):
72        input_tensor_3d[index_slice_8] /= value_list_much_ele
73
74
75# GPU: does not supported op "FloorMod"
76@pytest.mark.level1
77@pytest.mark.platform_arm_ascend_training
78@pytest.mark.platform_x86_ascend_training
79@pytest.mark.env_onecard
80def test_tesnsor_augassign_by_ellipsis():
81    input_np_3d = np.arange(24).reshape(2, 3, 4).astype(np.float32)
82    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
83
84    value_number_1, value_number_2 = 1, 2.0
85
86    value_np_1 = np.array([1])
87    value_np_2 = np.array([1, 2, 3, 4])
88    value_np_3 = np.arange(12).reshape(3, 4)
89    value_tensor_1 = Tensor(value_np_1)
90    value_tensor_2 = Tensor(value_np_2)
91    value_tensor_3 = Tensor(value_np_3)
92
93    value_tuple_1_ele = (0.5,)
94    value_tuple_4_ele = (0.1, 0.2, 0.3, 0.4)
95
96    value_list_1_ele = [1.5]
97    value_list_4_ele = [1.1, 1.2, 1.3, 1.4]
98
99    input_tensor_3d[...] += value_number_1
100    input_np_3d[...] += value_number_1
101    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
102
103    input_tensor_3d[...] -= value_number_2
104    input_np_3d[...] -= value_number_2
105    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
106
107    input_tensor_3d[...] *= value_tensor_1
108    input_np_3d[...] *= value_np_1
109    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
110
111    input_tensor_3d[...] /= value_tensor_2
112    input_np_3d[...] /= value_np_2
113    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
114
115    input_tensor_3d[...] /= value_tensor_3
116    input_np_3d[...] /= value_np_3
117    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
118
119    input_tensor_3d[...] -= value_tuple_1_ele
120    input_np_3d[...] -= value_tuple_1_ele
121    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
122
123    input_tensor_3d[...] *= value_tuple_4_ele
124    input_np_3d[...] *= value_tuple_4_ele
125    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
126
127    input_tensor_3d[...] -= value_list_1_ele
128    input_np_3d[...] -= value_list_1_ele
129    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
130
131    input_tensor_3d[...] *= value_list_4_ele
132    input_np_3d[...] *= value_list_4_ele
133    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
134
135
136# GPU: does not supported op "FloorMod"
137@pytest.mark.level1
138@pytest.mark.platform_arm_ascend_training
139@pytest.mark.platform_x86_ascend_training
140@pytest.mark.env_onecard
141def test_tesnsor_augassign_by_bool():
142    input_np_3d = np.arange(120).reshape(4, 5, 6).astype(np.float32)
143    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
144
145    index_bool_1 = True
146    index_bool_2 = False
147
148    value_number = 1
149
150    value_np_1 = np.array([1], np.float32)
151    value_np_2 = np.array([1, 2, 3, 4, 5, 6], np.float32)
152    value_np_3 = np.arange(1, 31).astype(np.float32).reshape(5, 6)
153    value_np_4 = np.arange(1, 121).astype(np.float32).reshape(4, 5, 6)
154    value_tensor_1 = Tensor(value_np_1, mstype.float32)
155    value_tensor_2 = Tensor(value_np_2, mstype.float32)
156    value_tensor_3 = Tensor(value_np_3, mstype.float32)
157    value_tensor_4 = Tensor(value_np_4, mstype.float32)
158
159    value_tuple_1_ele = (0.5,)
160    value_tuple_6_ele = (0.1, 0.2, 0.3, 0.4, 0.5, 0.6)
161
162    value_list_1_ele = [1.5]
163    value_list_6_ele = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
164
165    input_tensor_3d[index_bool_1] += value_number
166    input_np_3d[index_bool_1] += value_number
167    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
168
169    input_tensor_3d[index_bool_1] -= value_tensor_1
170    input_np_3d[index_bool_1] -= value_np_1
171    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
172
173    input_tensor_3d[index_bool_1] *= value_tensor_2
174    input_np_3d[index_bool_1] *= value_np_2
175    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
176
177    input_tensor_3d[index_bool_1] -= value_tensor_3
178    input_np_3d[index_bool_1] -= value_np_3
179    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
180
181    input_tensor_3d[index_bool_1] //= value_tensor_4
182    input_np_3d[index_bool_1] //= value_np_4
183    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
184
185    input_tensor_3d[index_bool_1] %= value_tuple_1_ele
186    input_np_3d[index_bool_1] %= value_tuple_1_ele
187    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
188
189    input_tensor_3d[index_bool_1] %= value_tuple_6_ele
190    input_np_3d[index_bool_1] %= value_tuple_6_ele
191    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
192
193    input_tensor_3d[index_bool_1] %= value_list_1_ele
194    input_np_3d[index_bool_1] %= value_list_1_ele
195    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
196
197    input_tensor_3d[index_bool_1] -= value_list_6_ele
198    input_np_3d[index_bool_1] -= value_list_6_ele
199    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
200
201    with pytest.raises(IndexError):
202        input_tensor_3d[index_bool_2] *= value_tensor_2
203
204
205# GPU: does not supported op "FloorMod"
206@pytest.mark.level0
207@pytest.mark.platform_arm_ascend_training
208@pytest.mark.platform_x86_ascend_training
209@pytest.mark.env_onecard
210def test_tesnsor_augassign_by_number():
211    input_np_1d = np.arange(4).astype(np.float32)
212    input_tensor_1d = Tensor(input_np_1d, mstype.float32)
213    input_np_3d = np.arange(80).reshape(4, 5, 4).astype(np.float32)
214    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
215
216    number_index_1, number_index_2, number_index_3, number_index_4 = 0, 3, 4, 3.4
217
218    value_number = 2
219
220    value_np_scalar = np.array(5)
221    value_np_1_ele = np.array([1])
222    value_np_1d = np.array([1, 2, 3, 4])
223    value_np_2d = np.arange(20).reshape(5, 4)
224    value_tensor_scalar = Tensor(value_np_scalar, mstype.float32)
225    value_tensor_1_ele = Tensor(value_np_1_ele, mstype.float32)
226    value_tensor_1d = Tensor(value_np_1d, mstype.float32)
227    value_tensor_2d = Tensor(value_np_2d, mstype.float32)
228
229    value_tuple_1_ele = (100,)
230    value_tuple_mul_ele = (10, 20, 30, 40)
231    value_tuple_much_ele = (10, 20, 30, 40, 10)
232    value_tuple_empty = ()
233
234    value_list_1_ele = [101]
235    value_list_mul_ele = [11, 21, 31, 41]
236    value_list_much_ele = [12, 22, 33, 43, 18]
237    value_list_empty = []
238
239    input_tensor_1d[number_index_1] += value_number
240    input_np_1d[number_index_1] += value_number
241    assert np.allclose(input_tensor_1d.asnumpy(), input_np_1d, 0.0001, 0.0001)
242
243    input_tensor_1d[number_index_2] -= value_number
244    input_np_1d[number_index_2] -= value_number
245    assert np.allclose(input_tensor_1d.asnumpy(), input_np_1d, 0.0001, 0.0001)
246
247    input_tensor_3d[number_index_1] *= value_number
248    input_np_3d[number_index_1] *= value_number
249    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
250
251    input_tensor_3d[number_index_2] /= value_number
252    input_np_3d[number_index_2] /= value_number
253    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
254
255    input_tensor_1d[number_index_1] //= value_tensor_scalar
256    input_np_1d[number_index_1] //= value_np_scalar
257    assert np.allclose(input_tensor_1d.asnumpy(), input_np_1d, 0.0001, 0.0001)
258
259    input_tensor_3d[number_index_1] *= value_tensor_scalar
260    input_np_3d[number_index_1] *= value_np_scalar
261    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
262
263    input_tensor_3d[number_index_2] %= value_tensor_1_ele
264    input_np_3d[number_index_2] %= value_np_1_ele
265    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
266
267    input_tensor_3d[number_index_1] += value_tensor_1d
268    input_np_3d[number_index_1] += value_np_1d
269    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
270
271    input_tensor_3d[number_index_2] -= value_tensor_2d
272    input_np_3d[number_index_2] -= value_np_2d
273    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
274
275    input_tensor_1d[number_index_1] += value_tuple_1_ele
276    input_np_1d[number_index_1] += value_tuple_1_ele
277    assert np.allclose(input_tensor_1d.asnumpy(), input_np_1d, 0.0001, 0.0001)
278
279    input_tensor_3d[number_index_1] -= value_tuple_1_ele
280    input_np_3d[number_index_1] -= value_tuple_1_ele
281    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
282
283    input_tensor_3d[number_index_1] *= value_tuple_mul_ele
284    input_np_3d[number_index_1] *= value_tuple_mul_ele
285    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
286
287    input_tensor_1d[number_index_2] += value_list_1_ele
288    input_np_1d[number_index_2] += value_list_1_ele
289    assert np.allclose(input_tensor_1d.asnumpy(), input_np_1d, 0.0001, 0.0001)
290
291    input_tensor_3d[number_index_1] -= value_list_1_ele
292    input_np_3d[number_index_1] -= value_list_1_ele
293    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
294
295    input_tensor_3d[number_index_2] *= value_list_mul_ele
296    input_np_3d[number_index_2] *= value_list_mul_ele
297    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
298
299    with pytest.raises(IndexError):
300        input_tensor_1d[number_index_3] += value_number
301    with pytest.raises(IndexError):
302        input_tensor_3d[number_index_3] -= value_number
303    with pytest.raises(IndexError):
304        input_tensor_1d[number_index_4] *= value_number
305    with pytest.raises(IndexError):
306        input_tensor_3d[number_index_4] /= value_number
307
308    with pytest.raises(ValueError):
309        input_tensor_1d[number_index_1] *= value_tuple_mul_ele
310    with pytest.raises(ValueError):
311        input_tensor_3d[number_index_1] *= value_tuple_much_ele
312    with pytest.raises(RuntimeError):
313        input_tensor_1d[number_index_1] /= value_tuple_empty
314
315    with pytest.raises(ValueError):
316        input_tensor_3d[number_index_2] //= value_list_much_ele
317    with pytest.raises(ValueError):
318        input_tensor_3d[number_index_2] *= value_list_empty
319
320
321# GPU: does not supported op "FloorMod"
322@pytest.mark.level0
323@pytest.mark.platform_arm_ascend_training
324@pytest.mark.platform_x86_ascend_training
325@pytest.mark.env_onecard
326def test_tesnsor_augassign_by_tensor():
327    input_np_3d = np.arange(120).reshape(4, 5, 6).astype(np.float32)
328    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
329
330    index_np_1d_1ele = np.random.randint(4, size=1)
331    index_np_1d = np.random.randint(4, size=6)
332    index_np_2d = np.random.randint(4, size=(5, 6))
333    index_np_3d = np.random.randint(4, size=(4, 5, 6))
334
335    index_tensor_1d_1ele = Tensor(index_np_1d_1ele, mstype.int32)
336    index_tensor_1d = Tensor(index_np_1d, mstype.int32)
337    index_tensor_2d = Tensor(index_np_2d, mstype.int32)
338    index_tensor_3d = Tensor(index_np_3d, mstype.int32)
339
340    value_number = 1
341
342    value_np_1 = np.array([1])
343    value_np_2 = np.array([1, 2, 3, 4, 5, 6])
344    value_np_3 = np.arange(1, 31).reshape(5, 6)
345    value_np_4 = np.arange(1, 181).reshape(6, 5, 6)
346    value_tensor_1 = Tensor(value_np_1)
347    value_tensor_2 = Tensor(value_np_2)
348    value_tensor_3 = Tensor(value_np_3)
349    value_tensor_4 = Tensor(value_np_4)
350
351    value_tuple_1_ele = (0.5,)
352    value_tuple_6_ele = (0.1, 0.2, 0.3, 0.4, 0.5, 0.6)
353
354    value_list_1_ele = [1.5]
355    value_list_6_ele = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
356
357    input_tensor_3d[index_tensor_1d_1ele] += value_number
358    input_np_3d[index_np_1d_1ele] += value_number
359    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
360
361    input_tensor_3d[index_tensor_1d_1ele] -= value_tensor_2
362    input_np_3d[index_np_1d_1ele] -= value_np_2
363    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
364
365    input_tensor_3d[index_tensor_1d_1ele] /= value_tuple_6_ele
366    input_np_3d[index_np_1d_1ele] /= value_tuple_6_ele
367    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
368
369    input_tensor_3d[index_tensor_1d_1ele] *= value_list_1_ele
370    input_np_3d[index_np_1d_1ele] *= value_list_1_ele
371    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
372
373    input_tensor_3d[index_tensor_1d] += value_number
374    input_np_3d[index_np_1d] += value_number
375    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
376
377    input_tensor_3d[index_tensor_1d] -= value_tensor_1
378    input_np_3d[index_np_1d] -= value_np_1
379    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
380
381    input_tensor_3d[index_tensor_1d] /= value_tuple_1_ele
382    input_np_3d[index_np_1d] /= value_tuple_1_ele
383    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
384
385    input_tensor_3d[index_tensor_1d] += value_list_6_ele
386    input_np_3d[index_np_1d] += value_list_6_ele
387    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
388
389    input_tensor_3d[index_tensor_2d] -= value_number
390    input_np_3d[index_np_2d] -= value_number
391    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
392
393    input_tensor_3d[index_tensor_2d] *= value_tensor_2
394    input_np_3d[index_np_2d] *= value_np_2
395    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
396
397    input_tensor_3d[index_tensor_2d] /= value_tensor_4
398    input_np_3d[index_np_2d] /= value_np_4
399    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
400
401    input_tensor_3d[index_tensor_2d] += value_tuple_6_ele
402    input_np_3d[index_np_2d] += value_tuple_6_ele
403    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
404
405    input_tensor_3d[index_tensor_2d] -= value_list_1_ele
406    input_np_3d[index_np_2d] -= value_list_1_ele
407    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
408
409    input_tensor_3d[index_tensor_3d] *= value_number
410    input_np_3d[index_np_3d] *= value_number
411    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
412
413    input_tensor_3d[index_tensor_3d] /= value_tensor_1
414    input_np_3d[index_np_3d] /= value_np_1
415    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
416
417    input_tensor_3d[index_tensor_3d] += value_tensor_3
418    input_np_3d[index_np_3d] += value_np_3
419    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
420
421    input_tensor_3d[index_tensor_3d] /= value_tuple_1_ele
422    input_np_3d[index_np_3d] /= value_tuple_1_ele
423    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
424
425    input_tensor_3d[index_tensor_3d] -= value_list_6_ele
426    input_np_3d[index_np_3d] -= value_list_6_ele
427    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
428
429
430# GPU: does not supported op "FloorMod"
431@pytest.mark.level0
432@pytest.mark.platform_arm_ascend_training
433@pytest.mark.platform_x86_ascend_training
434@pytest.mark.env_onecard
435def test_tesnsor_augassign_by_list():
436    input_np_3d = np.arange(120).reshape(4, 5, 6).astype(np.float32)
437    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
438
439    list_index_empty = []
440    list_index_int_1 = [2]
441    list_index_int_2 = [3, 1]
442    list_index_int_overflow = [4, 2]
443    list_index_bool_1 = [False, False, False, False]
444    list_index_bool_2 = [True, True, True, True]
445    list_index_bool_3 = [True, False, True, False]
446    list_index_mix_1 = [True, 0]
447    list_index_mix_2 = [3, False]
448
449    value_number = 2
450
451    value_np_scalar = np.array(100)
452    value_np_1_ele = np.array([1])
453    value_np_1d = np.array([1, 2, 3, 4, 5, 6])
454    value_np_2d = np.arange(1, 31).reshape(5, 6)
455    value_np_3d = np.arange(1, 61).reshape(2, 5, 6)
456    value_tensor_scalar = Tensor(value_np_scalar, mstype.float32)
457    value_tensor_1_ele = Tensor(value_np_1_ele, mstype.float32)
458    value_tensor_1d = Tensor(value_np_1d, mstype.float32)
459    value_tensor_2d = Tensor(value_np_2d, mstype.float32)
460    value_tensor_3d = Tensor(value_np_3d, mstype.float32)
461
462    input_tensor_3d[list_index_int_1] += value_number
463    input_np_3d[list_index_int_1] += value_number
464    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
465
466    input_tensor_3d[list_index_int_1] += value_tensor_scalar
467    input_np_3d[list_index_int_1] += value_np_scalar
468    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
469
470    input_tensor_3d[list_index_int_1] -= value_tensor_1_ele
471    input_np_3d[list_index_int_1] -= value_np_1_ele
472    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
473
474    input_tensor_3d[list_index_int_1] *= value_tensor_1d
475    input_np_3d[list_index_int_1] *= value_np_1d
476    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
477
478    input_tensor_3d[list_index_int_1] /= value_tensor_2d
479    input_np_3d[list_index_int_1] /= value_np_2d
480    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
481
482    input_tensor_3d[list_index_int_2] += value_number
483    input_np_3d[list_index_int_2] += value_number
484    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
485
486    input_tensor_3d[list_index_int_2] //= value_tensor_scalar
487    input_np_3d[list_index_int_2] //= value_np_scalar
488    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
489
490    input_tensor_3d[list_index_int_2] *= value_tensor_1_ele
491    input_np_3d[list_index_int_2] *= value_np_1_ele
492    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
493
494    input_tensor_3d[list_index_int_2] %= value_tensor_1d
495    input_np_3d[list_index_int_2] %= value_np_1d
496    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
497
498    input_tensor_3d[list_index_int_2] += value_tensor_2d
499    input_np_3d[list_index_int_2] += value_np_2d
500    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
501
502    input_tensor_3d[list_index_int_2] -= value_tensor_3d
503    input_np_3d[list_index_int_2] -= value_np_3d
504    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
505
506    input_tensor_3d[list_index_bool_2] += value_number
507    input_np_3d[list_index_bool_2] += value_number
508    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
509
510    input_tensor_3d[list_index_bool_2] *= value_tensor_scalar
511    input_np_3d[list_index_bool_2] *= value_np_scalar
512    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
513
514    input_tensor_3d[list_index_bool_2] /= value_tensor_1_ele
515    input_np_3d[list_index_bool_2] /= value_np_1_ele
516    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
517
518    input_tensor_3d[list_index_bool_2] //= value_tensor_1d
519    input_np_3d[list_index_bool_2] //= value_np_1d
520    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
521
522    input_tensor_3d[list_index_bool_2] %= value_tensor_2d
523    input_np_3d[list_index_bool_2] %= value_np_2d
524    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
525
526    input_tensor_3d[list_index_bool_3] += value_number
527    input_np_3d[list_index_bool_3] += value_number
528    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
529
530    input_tensor_3d[list_index_bool_3] *= value_tensor_scalar
531    input_np_3d[list_index_bool_3] *= value_np_scalar
532    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
533
534    input_tensor_3d[list_index_bool_3] += value_tensor_1_ele
535    input_np_3d[list_index_bool_3] += value_np_1_ele
536    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
537
538    input_tensor_3d[list_index_bool_3] -= value_tensor_1d
539    input_np_3d[list_index_bool_3] -= value_np_1d
540    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
541
542    input_tensor_3d[list_index_bool_3] *= value_tensor_2d
543    input_np_3d[list_index_bool_3] *= value_np_2d
544    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
545
546    input_tensor_3d[list_index_bool_3] /= value_tensor_3d
547    input_np_3d[list_index_bool_3] /= value_np_3d
548    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
549
550    input_tensor_3d[list_index_mix_1] += value_number
551    input_np_3d[list_index_mix_1] += value_number
552    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
553
554    input_tensor_3d[list_index_mix_1] *= value_tensor_scalar
555    input_np_3d[list_index_mix_1] *= value_np_scalar
556    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
557
558    input_tensor_3d[list_index_mix_1] += value_tensor_1_ele
559    input_np_3d[list_index_mix_1] += value_np_1_ele
560    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
561
562    input_tensor_3d[list_index_mix_1] -= value_tensor_1d
563    input_np_3d[list_index_mix_1] -= value_np_1d
564    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
565
566    input_tensor_3d[list_index_mix_1] *= value_tensor_2d
567    input_np_3d[list_index_mix_1] *= value_np_2d
568    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
569
570    input_tensor_3d[list_index_mix_1] /= value_tensor_3d
571    input_np_3d[list_index_mix_1] /= value_np_3d
572    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
573
574    input_tensor_3d[list_index_mix_2] += value_number
575    input_np_3d[list_index_mix_2] += value_number
576    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
577
578    input_tensor_3d[list_index_mix_2] *= value_tensor_scalar
579    input_np_3d[list_index_mix_2] *= value_np_scalar
580    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
581
582    input_tensor_3d[list_index_mix_2] += value_tensor_1_ele
583    input_np_3d[list_index_mix_2] += value_np_1_ele
584    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
585
586    input_tensor_3d[list_index_mix_2] -= value_tensor_1d
587    input_np_3d[list_index_mix_2] -= value_np_1d
588    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
589
590    input_tensor_3d[list_index_mix_2] *= value_tensor_2d
591    input_np_3d[list_index_mix_2] *= value_np_2d
592    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
593
594    input_tensor_3d[list_index_mix_2] /= value_tensor_3d
595    input_np_3d[list_index_mix_2] /= value_np_3d
596    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
597
598    with pytest.raises(IndexError):
599        input_tensor_3d[list_index_empty] += value_number
600    with pytest.raises(IndexError):
601        input_tensor_3d[list_index_int_overflow] += value_number
602    with pytest.raises(IndexError):
603        input_tensor_3d[list_index_bool_1] += value_number
604
605
606# GPU: does not supported op "FloorMod"
607@pytest.mark.level1
608@pytest.mark.platform_arm_ascend_training
609@pytest.mark.platform_x86_ascend_training
610@pytest.mark.env_onecard
611def test_tesnsor_augassign_by_tuple():
612    input_np_3d = np.arange(120).reshape(4, 5, 6).astype(np.float32)
613    input_tensor_3d = Tensor(input_np_3d, mstype.float32)
614
615    index_tuple_1 = (slice(1, 3, 1), ..., [1, 3, 2])
616    index_tuple_2 = (2, 3, 4)
617    index_tuple_4 = ([2, 3], True)
618    index_tuple_5 = (False, 3)
619    index_tuple_6 = (False, slice(3, 1, -1))
620    index_tuple_7 = (..., slice(None, 6, 2))
621
622    value_number = 2
623
624    value_np_scalar = np.array(100)
625    value_tensor_scalar = Tensor(value_np_scalar, mstype.float32)
626
627    input_tensor_3d[index_tuple_1] += value_number
628    input_np_3d[index_tuple_1] += value_number
629    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
630
631    input_tensor_3d[index_tuple_1] -= Tensor(np.ones((2, 5, 3)), mstype.float32)
632    input_np_3d[index_tuple_1] -= np.ones((2, 5, 3))
633    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
634
635    input_tensor_3d[index_tuple_2] *= value_tensor_scalar
636    input_np_3d[index_tuple_2] *= value_np_scalar
637    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
638
639    input_tensor_3d[index_tuple_4] //= value_number
640    input_np_3d[index_tuple_4] //= value_number
641    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
642
643    input_tensor_3d[index_tuple_7] += value_number
644    input_np_3d[index_tuple_7] += value_number
645    assert np.allclose(input_tensor_3d.asnumpy(), input_np_3d, 0.0001, 0.0001)
646
647    with pytest.raises(IndexError):
648        input_tensor_3d[index_tuple_5] *= value_number
649
650    with pytest.raises(IndexError):
651        input_tensor_3d[index_tuple_6] %= value_number
652