You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_tensor_augassign.py 27 kB

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