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_assignment_ops.py 15 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  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. import numpy as np
  16. import mindspore.context as context
  17. import mindspore.nn as nn
  18. from mindspore import Tensor, Parameter
  19. from mindspore.common.initializer import initializer
  20. from mindspore.ops import operations as P
  21. context.set_context(mode=context.GRAPH_MODE)
  22. class Assign(nn.Cell):
  23. def __init__(self, x, y):
  24. super(Assign, self).__init__()
  25. self.x = Parameter(initializer(x, x.shape), name="x")
  26. self.y = Parameter(initializer(y, y.shape), name="y")
  27. self.assign = P.Assign()
  28. def construct(self):
  29. self.assign(self.y, self.x)
  30. return self.y
  31. def test_assign_bool():
  32. x = Tensor(np.ones([3, 3]).astype(np.bool_))
  33. y = Tensor(np.zeros([3, 3]).astype(np.bool_))
  34. assign = Assign(x, y)
  35. output = assign()
  36. output = output.asnumpy()
  37. output_expect = np.ones([3, 3]).astype(np.bool_)
  38. print(output)
  39. assert np.all(output == output_expect)
  40. def test_assign_int8():
  41. x = Tensor(np.ones([3, 3]).astype(np.int8))
  42. y = Tensor(np.zeros([3, 3]).astype(np.int8))
  43. assign = Assign(x, y)
  44. output = assign()
  45. output = output.asnumpy()
  46. output_expect = np.ones([3, 3]).astype(np.int8)
  47. print(output)
  48. assert np.all(output == output_expect)
  49. def test_assign_uint8():
  50. x = Tensor(np.ones([3, 3]).astype(np.uint8))
  51. y = Tensor(np.zeros([3, 3]).astype(np.uint8))
  52. assign = Assign(x, y)
  53. output = assign()
  54. output = output.asnumpy()
  55. output_expect = np.ones([3, 3]).astype(np.uint8)
  56. print(output)
  57. assert np.all(output == output_expect)
  58. def test_assign_int16():
  59. x = Tensor(np.ones([3, 3]).astype(np.int16))
  60. y = Tensor(np.zeros([3, 3]).astype(np.int16))
  61. assign = Assign(x, y)
  62. output = assign()
  63. output = output.asnumpy()
  64. output_expect = np.ones([3, 3]).astype(np.int16)
  65. print(output)
  66. assert np.all(output == output_expect)
  67. def test_assign_uint16():
  68. x = Tensor(np.ones([3, 3]).astype(np.uint16))
  69. y = Tensor(np.zeros([3, 3]).astype(np.uint16))
  70. assign = Assign(x, y)
  71. output = assign()
  72. output = output.asnumpy()
  73. output_expect = np.ones([3, 3]).astype(np.uint16)
  74. print(output)
  75. assert np.all(output == output_expect)
  76. def test_assign_int32():
  77. x = Tensor(np.ones([3, 3]).astype(np.int32))
  78. y = Tensor(np.zeros([3, 3]).astype(np.int32))
  79. assign = Assign(x, y)
  80. output = assign()
  81. output = output.asnumpy()
  82. output_expect = np.ones([3, 3]).astype(np.int32)
  83. print(output)
  84. assert np.all(output == output_expect)
  85. def test_assign_uint32():
  86. x = Tensor(np.ones([3, 3]).astype(np.uint32))
  87. y = Tensor(np.zeros([3, 3]).astype(np.uint32))
  88. assign = Assign(x, y)
  89. output = assign()
  90. output = output.asnumpy()
  91. output_expect = np.ones([3, 3]).astype(np.uint32)
  92. print(output)
  93. assert np.all(output == output_expect)
  94. def test_assign_int64():
  95. x = Tensor(np.ones([3, 3]).astype(np.int64))
  96. y = Tensor(np.zeros([3, 3]).astype(np.int64))
  97. assign = Assign(x, y)
  98. output = assign()
  99. output = output.asnumpy()
  100. output_expect = np.ones([3, 3]).astype(np.int64)
  101. print(output)
  102. assert np.all(output == output_expect)
  103. def test_assign_uint64():
  104. x = Tensor(np.ones([3, 3]).astype(np.uint64))
  105. y = Tensor(np.zeros([3, 3]).astype(np.uint64))
  106. assign = Assign(x, y)
  107. output = assign()
  108. output = output.asnumpy()
  109. output_expect = np.ones([3, 3]).astype(np.uint64)
  110. print(output)
  111. assert np.all(output == output_expect)
  112. def test_assign_float16():
  113. x = Tensor(np.array([[0.1, 0.2, 0.3],
  114. [0.4, 0.5, 0.5],
  115. [0.6, 0.7, 0.8]]).astype(np.float16))
  116. y = Tensor(np.array([[0.4, 0.5, 0.5],
  117. [0.6, 0.7, 0.8],
  118. [0.1, 0.2, 0.3]]).astype(np.float16))
  119. assign = Assign(x, y)
  120. output = assign()
  121. output = output.asnumpy()
  122. output_expect = np.array([[0.1, 0.2, 0.3],
  123. [0.4, 0.5, 0.5],
  124. [0.6, 0.7, 0.8]]).astype(np.float16)
  125. print(output)
  126. assert np.all(output - output_expect < 1e-6)
  127. def test_assign_float32():
  128. x = Tensor(np.array([[0.1, 0.2, 0.3],
  129. [0.4, 0.5, 0.5],
  130. [0.6, 0.7, 0.8]]).astype(np.float32))
  131. y = Tensor(np.array([[0.4, 0.5, 0.5],
  132. [0.6, 0.7, 0.8],
  133. [0.1, 0.2, 0.3]]).astype(np.float32))
  134. assign = Assign(x, y)
  135. output = assign()
  136. output = output.asnumpy()
  137. output_expect = np.array([[0.1, 0.2, 0.3],
  138. [0.4, 0.5, 0.5],
  139. [0.6, 0.7, 0.8]]).astype(np.float32)
  140. print(output)
  141. assert np.all(output - output_expect < 1e-6)
  142. def test_assign_float64():
  143. x = Tensor(np.array([[0.1, 0.2, 0.3],
  144. [0.4, 0.5, 0.5],
  145. [0.6, 0.7, 0.8]]).astype(np.float64))
  146. y = Tensor(np.array([[0.4, 0.5, 0.5],
  147. [0.6, 0.7, 0.8],
  148. [0.1, 0.2, 0.3]]).astype(np.float64))
  149. assign = Assign(x, y)
  150. output = assign()
  151. output = output.asnumpy()
  152. output_expect = np.array([[0.1, 0.2, 0.3],
  153. [0.4, 0.5, 0.5],
  154. [0.6, 0.7, 0.8]]).astype(np.float64)
  155. print(output)
  156. assert np.all(output - output_expect < 1e-6)
  157. class AssignAdd(nn.Cell):
  158. def __init__(self, x, y):
  159. super(AssignAdd, self).__init__()
  160. self.x = Parameter(initializer(x, x.shape), name="x")
  161. self.y = Parameter(initializer(y, y.shape), name="y")
  162. self.assignadd = P.AssignAdd()
  163. def construct(self):
  164. self.assignadd(self.y, self.x)
  165. return self.y
  166. def test_number_assignadd_number():
  167. input_x = 2
  168. result1 = 5
  169. result2 = 5
  170. result1 += input_x
  171. assignadd = AssignAdd(result2, input_x)
  172. result2 = assignadd()
  173. expect = 7
  174. assert np.all(result1 == expect)
  175. assert np.all(result2 == expect)
  176. def test_tensor_assignadd_tensor():
  177. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  178. result1 = Tensor(np.array([[4, -2], [2, 17]]))
  179. result2 = Tensor(np.array([[4, -2], [2, 17]]))
  180. result1 += input_x
  181. result2 = AssignAdd(result2, input_x)()
  182. expect = Tensor(np.array([[6, 0], [5, 20]]))
  183. assert np.all(result1.asnumpy() == expect)
  184. assert np.all(result2.asnumpy() == expect)
  185. def test_tensor_assignadd_number():
  186. input_x = 3
  187. result1 = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  188. result2 = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  189. result1 += input_x
  190. result2 = AssignAdd(result2, input_x)()
  191. expect = Tensor(np.array([[7, 1], [5, 20]]))
  192. assert np.all(result1.asnumpy() == expect)
  193. assert np.all(result2.asnumpy() == expect)
  194. def test_number_assignadd_tensor():
  195. result1 = 3
  196. result2 = 3
  197. input_x = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  198. result1 += input_x
  199. result2 = AssignAdd(result2, input_x)()
  200. expect = Tensor(np.array([[7, 1], [5, 20]]))
  201. assert np.all(result1.asnumpy() == expect)
  202. assert np.all(result2.asnumpy() == expect)
  203. def test_tuple_assignadd_tuple():
  204. result1 = (1, 2, 3, 4)
  205. result2 = (1, 2, 3, 4)
  206. input_x = (2, 3, 4, 5, 6)
  207. result1 += input_x
  208. result2 = AssignAdd(result2, input_x)()
  209. expect = (1, 2, 3, 4, 2, 3, 4, 5, 6)
  210. assert np.all(result1.asnumpy() == expect)
  211. assert np.all(result2.asnumpy() == expect)
  212. def test_string_assignadd_string():
  213. result1 = "string111"
  214. result2 = "string111"
  215. input_x = "string222"
  216. result1 += input_x
  217. result2 = AssignAdd(result2, input_x)()
  218. expect = "string111string222"
  219. assert result1 == expect
  220. assert result2 == expect
  221. class AssignSub(nn.Cell):
  222. def __init__(self, x, y):
  223. super(AssignSub, self).__init__()
  224. self.x = Parameter(initializer(x, x.shape), name="x")
  225. self.y = Parameter(initializer(y, y.shape), name="y")
  226. self.assignsub = P.AssignSub()
  227. def construct(self):
  228. self.assignsub(self.y, self.x)
  229. return self.y
  230. def test_number_assignsub_number():
  231. input_x = 2
  232. result1 = 5
  233. result2 = 5
  234. result1 -= input_x
  235. result2 = AssignSub(result2, input_x)()
  236. expect = 3
  237. assert np.all(result1 == expect)
  238. assert np.all(result2 == expect)
  239. def test_tensor_assignsub_tensor():
  240. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  241. result1 = Tensor(np.array([[4, -2], [2, 17]]))
  242. result2 = Tensor(np.array([[4, -2], [2, 17]]))
  243. result1 -= input_x
  244. result2 = AssignSub(result2, input_x)()
  245. expect = Tensor(np.array([[2, -4], [-1, 14]]))
  246. assert np.all(result1.asnumpy() == expect)
  247. assert np.all(result2.asnumpy() == expect)
  248. def test_tensor_assignsub_number():
  249. input_x = 3
  250. result1 = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  251. result2 = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  252. result1 -= input_x
  253. result2 = AssignSub(result2, input_x)()
  254. expect = Tensor(np.array([[1, -5], [-1, 14]]))
  255. assert np.all(result1.asnumpy() == expect)
  256. assert np.all(result2.asnumpy() == expect)
  257. def test_number_assignsub_tensor():
  258. result1 = 3
  259. result2 = 3
  260. input_x = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  261. result1 -= input_x
  262. result2 = AssignSub(result2, input_x)()
  263. expect = Tensor(np.array([[-1, 5], [1, -14]]))
  264. assert np.all(result1.asnumpy() == expect)
  265. assert np.all(result2.asnumpy() == expect)
  266. def test_number_assignmul_number():
  267. input_x = 2
  268. result = 5
  269. result *= input_x
  270. expect = 10
  271. assert np.all(result == expect)
  272. def test_tensor_assignmul_tensor():
  273. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  274. result = Tensor(np.array([[4, -2], [2, 17]]))
  275. result *= input_x
  276. expect = Tensor(np.array([[8, -4], [6, 51]]))
  277. assert np.all(result.asnumpy() == expect)
  278. def test_tensor_assignmul_number():
  279. input_x = 3
  280. result = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  281. result *= input_x
  282. expect = Tensor(np.array([[12, -6], [6, 51]]))
  283. assert np.all(result.asnumpy() == expect)
  284. def test_number_assignmul_tensor():
  285. result = 3
  286. input_x = Tensor(np.array([[4, -2], [2, 17]])).astype(np.float16)
  287. result *= input_x
  288. expect = Tensor(np.array([[12, -6], [6, 51]]))
  289. assert np.all(result.asnumpy() == expect)
  290. def test_number_assigndiv_number():
  291. input_x = 2
  292. result = 5
  293. result /= input_x
  294. expect = 2.5
  295. assert np.all(result == expect)
  296. def test_tensor_assigndiv_tensor():
  297. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  298. result = Tensor(np.array([[4, -2], [6, 15]]))
  299. result /= input_x
  300. expect = Tensor(np.array([[2, -1], [2, 5]]))
  301. assert np.all(result.asnumpy() == expect)
  302. def test_tensor_assigndiv_number():
  303. input_x = 3
  304. result = Tensor(np.array([[9, -3], [6, 15]])).astype(np.float16)
  305. result /= input_x
  306. expect = Tensor(np.array([[3, -1], [2, 5]]))
  307. assert np.all(result.asnumpy() == expect)
  308. def test_number_assigndiv_tensor():
  309. result = 3
  310. input_x = Tensor(np.array([[2, -2], [2, -2]])).astype(np.float16)
  311. result /= input_x
  312. expect = Tensor(np.array([[1.5, -1.5], [1.5, -1.5]]))
  313. assert np.all(result.asnumpy() == expect)
  314. def test_number_assignmod_number():
  315. input_x = 2
  316. result = 5
  317. result %= input_x
  318. expect = 1
  319. assert np.all(result == expect)
  320. def test_tensor_assignmod_tensor():
  321. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  322. result = Tensor(np.array([[4, -2], [6, 15]]))
  323. result %= input_x
  324. expect = Tensor(np.array([[0, 0], [0, 0]]))
  325. assert np.all(result.asnumpy() == expect)
  326. def test_tensor_assignmod_number():
  327. input_x = 3
  328. result = Tensor(np.array([[9, -3], [7, 15]])).astype(np.float16)
  329. result %= input_x
  330. expect = Tensor(np.array([[0, 0], [1, 0]]))
  331. assert np.all(result.asnumpy() == expect)
  332. def test_number_assignmod_tensor():
  333. result = 3
  334. input_x = Tensor(np.array([[2, -2], [2, -2]])).astype(np.float16)
  335. result %= input_x
  336. expect = Tensor(np.array([[1, -1], [1, -1]]))
  337. assert np.all(result.asnumpy() == expect)
  338. def test_number_assignmulmul_number():
  339. input_x = 2
  340. result = 5
  341. result **= input_x
  342. expect = 25
  343. assert np.all(result == expect)
  344. def test_tensor_assignmulmul_tensor():
  345. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  346. result = Tensor(np.array([[4, -2], [6, 5]]))
  347. result **= input_x
  348. expect = Tensor(np.array([[16, 4], [216, 125]]))
  349. assert np.all(result.asnumpy() == expect)
  350. def test_tensor_assignmulmul_number():
  351. input_x = 3
  352. result = Tensor(np.array([[9, -3], [7, 5]])).astype(np.float16)
  353. result **= input_x
  354. expect = Tensor(np.array([[729, -27], [343, 125]]))
  355. assert np.all(result.asnumpy() == expect)
  356. def test_number_assignmulmul_tensor():
  357. result = 3
  358. input_x = Tensor(np.array([[2, 2], [2, 2]])).astype(np.float16)
  359. result **= input_x
  360. expect = Tensor(np.array([[9, 9], [9, 9]]))
  361. assert np.all(result.asnumpy() == expect)
  362. def test_number_assigndivdiv_number():
  363. input_x = 2
  364. result = 5
  365. result //= input_x
  366. expect = 2
  367. assert np.all(result == expect)
  368. def test_tensor_assigndivdiv_tensor():
  369. input_x = Tensor(np.array([[2, 2], [3, 3]]))
  370. result = Tensor(np.array([[4, -2], [6, 6]]))
  371. result //= input_x
  372. expect = Tensor(np.array([[2, -1], [2, 2]]))
  373. assert np.all(result.asnumpy() == expect)
  374. def test_tensor_assigndivdiv_number():
  375. input_x = 3
  376. result = Tensor(np.array([[9, -3], [15, 9]])).astype(np.float16)
  377. result //= input_x
  378. expect = Tensor(np.array([[3, -1], [5, 3]]))
  379. assert np.all(result.asnumpy() == expect)
  380. def test_number_assigndivdiv_tensor():
  381. result = 3
  382. input_x = Tensor(np.array([[1, 2], [2, 2]])).astype(np.float16)
  383. result //= input_x
  384. expect = Tensor(np.array([[3, 1], [1, 1]]))
  385. assert np.all(result.asnumpy() == expect)