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_array_ops.py 45 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494
  1. # Copyright 2020-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. """unit tests for numpy array operations"""
  16. import functools
  17. import pytest
  18. import numpy as onp
  19. import mindspore.numpy as mnp
  20. from mindspore.nn import Cell
  21. from .utils import rand_int, run_non_kw_test, check_all_results, match_array, \
  22. rand_bool, match_res, run_multi_test, to_tensor
  23. class Cases():
  24. def __init__(self):
  25. self.all_shapes = [
  26. 0, 1, 2, (), (1,), (2,), (1, 2, 3), [], [1], [2], [1, 2, 3]
  27. ]
  28. self.onp_dtypes = [onp.int32, 'int32', int,
  29. onp.float32, 'float32', float,
  30. onp.uint32, 'uint32',
  31. onp.bool_, 'bool', bool]
  32. self.mnp_dtypes = [mnp.int32, 'int32', int,
  33. mnp.float32, 'float32', float,
  34. mnp.uint32, 'uint32',
  35. mnp.bool_, 'bool', bool]
  36. self.array_sets = [1, 1.1, True, [1, 0, True], [1, 1.0, 2], (1,),
  37. [(1, 2, 3), (4, 5, 6)], onp.random.random( # pylint: disable=no-member
  38. (100, 100)).astype(onp.float32),
  39. onp.random.random((100, 100)).astype(onp.bool)]
  40. self.arrs = [
  41. rand_int(2),
  42. rand_int(2, 3),
  43. rand_int(2, 3, 4),
  44. rand_int(2, 3, 4, 5),
  45. ]
  46. # scalars expanded across the 0th dimension
  47. self.scalars = [
  48. rand_int(),
  49. rand_int(1),
  50. rand_int(1, 1),
  51. rand_int(1, 1, 1),
  52. ]
  53. # arrays of the same size expanded across the 0th dimension
  54. self.expanded_arrs = [
  55. rand_int(2, 3),
  56. rand_int(1, 2, 3),
  57. rand_int(1, 1, 2, 3),
  58. rand_int(1, 1, 1, 2, 3),
  59. ]
  60. # arrays with dimensions of size 1
  61. self.nested_arrs = [
  62. rand_int(1),
  63. rand_int(1, 2),
  64. rand_int(3, 1, 8),
  65. rand_int(1, 3, 9, 1),
  66. ]
  67. # arrays which can be broadcast
  68. self.broadcastables = [
  69. rand_int(5),
  70. rand_int(6, 1),
  71. rand_int(7, 1, 5),
  72. rand_int(8, 1, 6, 1)
  73. ]
  74. # boolean arrays which can be broadcast
  75. self.bool_broadcastables = [
  76. rand_bool(),
  77. rand_bool(1),
  78. rand_bool(5),
  79. rand_bool(6, 1),
  80. rand_bool(7, 1, 5),
  81. rand_bool(8, 1, 6, 1),
  82. ]
  83. self.mnp_prototypes = [
  84. mnp.ones((2, 3, 4)),
  85. mnp.ones((0, 3, 0, 2, 5)),
  86. onp.ones((2, 7, 0)),
  87. onp.ones(()),
  88. [mnp.ones(3), (1, 2, 3), onp.ones(3), [4, 5, 6]],
  89. ([(1, 2), mnp.ones(2)], (onp.ones(2), [3, 4])),
  90. ]
  91. self.onp_prototypes = [
  92. onp.ones((2, 3, 4)),
  93. onp.ones((0, 3, 0, 2, 5)),
  94. onp.ones((2, 7, 0)),
  95. onp.ones(()),
  96. [onp.ones(3), (1, 2, 3), onp.ones(3), [4, 5, 6]],
  97. ([(1, 2), onp.ones(2)], (onp.ones(2), [3, 4])),
  98. ]
  99. # Test np.transpose and np.ndarray.transpose
  100. def mnp_transpose(input_tensor):
  101. a = mnp.transpose(input_tensor, (0, 2, 1))
  102. b = mnp.transpose(input_tensor, [2, 1, 0])
  103. c = mnp.transpose(input_tensor, (1, 0, 2))
  104. d = mnp.transpose(input_tensor)
  105. return a, b, c, d
  106. def onp_transpose(input_array):
  107. a = onp.transpose(input_array, (0, 2, 1))
  108. b = onp.transpose(input_array, [2, 1, 0])
  109. c = onp.transpose(input_array, (1, 0, 2))
  110. d = onp.transpose(input_array)
  111. return a, b, c, d
  112. @pytest.mark.level1
  113. @pytest.mark.platform_arm_ascend_training
  114. @pytest.mark.platform_x86_ascend_training
  115. @pytest.mark.platform_x86_gpu_training
  116. @pytest.mark.platform_x86_cpu
  117. @pytest.mark.env_onecard
  118. def test_transpose():
  119. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  120. mnp_array = to_tensor(onp_array)
  121. o_transposed = onp_transpose(onp_array)
  122. m_transposed = mnp_transpose(mnp_array)
  123. check_all_results(o_transposed, m_transposed)
  124. # Test np.expand_dims
  125. def mnp_expand_dims(input_tensor):
  126. a = mnp.expand_dims(input_tensor, 0)
  127. b = mnp.expand_dims(input_tensor, -1)
  128. c = mnp.expand_dims(input_tensor, axis=2)
  129. d = mnp.expand_dims(input_tensor, axis=-2)
  130. return a, b, c, d
  131. def onp_expand_dims(input_array):
  132. a = onp.expand_dims(input_array, 0)
  133. b = onp.expand_dims(input_array, -1)
  134. c = onp.expand_dims(input_array, axis=2)
  135. d = onp.expand_dims(input_array, axis=-2)
  136. return a, b, c, d
  137. @pytest.mark.level1
  138. @pytest.mark.platform_arm_ascend_training
  139. @pytest.mark.platform_x86_ascend_training
  140. @pytest.mark.platform_x86_gpu_training
  141. @pytest.mark.platform_x86_cpu
  142. @pytest.mark.env_onecard
  143. def test_expand_dims():
  144. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  145. mnp_array = to_tensor(onp_array)
  146. o_expanded = onp_expand_dims(onp_array)
  147. m_expanded = mnp_expand_dims(mnp_array)
  148. check_all_results(o_expanded, m_expanded)
  149. # Test np.squeeze
  150. def mnp_squeeze(input_tensor):
  151. a = mnp.squeeze(input_tensor)
  152. b = mnp.squeeze(input_tensor, 0)
  153. c = mnp.squeeze(input_tensor, axis=None)
  154. d = mnp.squeeze(input_tensor, axis=-3)
  155. e = mnp.squeeze(input_tensor, (2,))
  156. f = mnp.squeeze(input_tensor, (0, 2))
  157. return a, b, c, d, e, f
  158. def onp_squeeze(input_array):
  159. a = onp.squeeze(input_array)
  160. b = onp.squeeze(input_array, 0)
  161. c = onp.squeeze(input_array, axis=None)
  162. d = onp.squeeze(input_array, axis=-3)
  163. e = onp.squeeze(input_array, (2,))
  164. f = onp.squeeze(input_array, (0, 2))
  165. return a, b, c, d, e, f
  166. @pytest.mark.level1
  167. @pytest.mark.platform_arm_ascend_training
  168. @pytest.mark.platform_x86_ascend_training
  169. @pytest.mark.platform_x86_gpu_training
  170. @pytest.mark.platform_x86_cpu
  171. @pytest.mark.env_onecard
  172. def test_squeeze():
  173. onp_array = onp.random.random((1, 3, 1, 4, 2)).astype('float32')
  174. mnp_array = to_tensor(onp_array)
  175. o_squeezed = onp_squeeze(onp_array)
  176. m_squeezed = mnp_squeeze(mnp_array)
  177. check_all_results(o_squeezed, m_squeezed)
  178. onp_array = onp.random.random((1, 1, 1, 1, 1)).astype('float32')
  179. mnp_array = to_tensor(onp_array)
  180. o_squeezed = onp_squeeze(onp_array)
  181. m_squeezed = mnp_squeeze(mnp_array)
  182. check_all_results(o_squeezed, m_squeezed)
  183. # Test np.rollaxis
  184. def mnp_rollaxis(input_tensor):
  185. a = mnp.rollaxis(input_tensor, 0, 1)
  186. b = mnp.rollaxis(input_tensor, 0, 2)
  187. c = mnp.rollaxis(input_tensor, 2, 1)
  188. d = mnp.rollaxis(input_tensor, 2, 2)
  189. e = mnp.rollaxis(input_tensor, 0)
  190. f = mnp.rollaxis(input_tensor, 1)
  191. return a, b, c, d, e, f
  192. def onp_rollaxis(input_array):
  193. a = onp.rollaxis(input_array, 0, 1)
  194. b = onp.rollaxis(input_array, 0, 2)
  195. c = onp.rollaxis(input_array, 2, 1)
  196. d = onp.rollaxis(input_array, 2, 2)
  197. e = onp.rollaxis(input_array, 0)
  198. f = onp.rollaxis(input_array, 1)
  199. return a, b, c, d, e, f
  200. @pytest.mark.level1
  201. @pytest.mark.platform_arm_ascend_training
  202. @pytest.mark.platform_x86_ascend_training
  203. @pytest.mark.platform_x86_gpu_training
  204. @pytest.mark.platform_x86_cpu
  205. @pytest.mark.env_onecard
  206. def test_rollaxis():
  207. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  208. mnp_array = to_tensor(onp_array)
  209. o_rolled = onp_rollaxis(onp_array)
  210. m_rolled = mnp_rollaxis(mnp_array)
  211. check_all_results(o_rolled, m_rolled)
  212. # Test np.swapaxes
  213. def mnp_swapaxes(input_tensor):
  214. a = mnp.swapaxes(input_tensor, 0, 1)
  215. b = mnp.swapaxes(input_tensor, 1, 0)
  216. c = mnp.swapaxes(input_tensor, 1, 1)
  217. d = mnp.swapaxes(input_tensor, 2, 1)
  218. e = mnp.swapaxes(input_tensor, 1, 2)
  219. f = mnp.swapaxes(input_tensor, 2, 2)
  220. return a, b, c, d, e, f
  221. def onp_swapaxes(input_array):
  222. a = onp.swapaxes(input_array, 0, 1)
  223. b = onp.swapaxes(input_array, 1, 0)
  224. c = onp.swapaxes(input_array, 1, 1)
  225. d = onp.swapaxes(input_array, 2, 1)
  226. e = onp.swapaxes(input_array, 1, 2)
  227. f = onp.swapaxes(input_array, 2, 2)
  228. return a, b, c, d, e, f
  229. @pytest.mark.level1
  230. @pytest.mark.platform_arm_ascend_training
  231. @pytest.mark.platform_x86_ascend_training
  232. @pytest.mark.platform_x86_gpu_training
  233. @pytest.mark.platform_x86_cpu
  234. @pytest.mark.env_onecard
  235. def test_swapaxes():
  236. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  237. mnp_array = to_tensor(onp_array)
  238. o_swaped = onp_swapaxes(onp_array)
  239. m_swaped = mnp_swapaxes(mnp_array)
  240. check_all_results(o_swaped, m_swaped)
  241. # Test np.reshape
  242. def mnp_reshape(input_tensor):
  243. a = mnp.reshape(input_tensor, (3, 8))
  244. b = mnp.reshape(input_tensor, [3, -1])
  245. c = mnp.reshape(input_tensor, (-1, 12))
  246. d = mnp.reshape(input_tensor, (-1,))
  247. e = mnp.reshape(input_tensor, 24)
  248. f = mnp.reshape(input_tensor, [2, 4, -1])
  249. g = input_tensor.reshape(3, 8)
  250. h = input_tensor.reshape(3, -1)
  251. i = input_tensor.reshape([-1, 3])
  252. j = input_tensor.reshape(-1)
  253. return a, b, c, d, e, f, g, h, i, j
  254. def onp_reshape(input_array):
  255. a = onp.reshape(input_array, (3, 8))
  256. b = onp.reshape(input_array, [3, -1])
  257. c = onp.reshape(input_array, (-1, 12))
  258. d = onp.reshape(input_array, (-1,))
  259. e = onp.reshape(input_array, 24)
  260. f = onp.reshape(input_array, [2, 4, -1])
  261. g = input_array.reshape(3, 8)
  262. h = input_array.reshape(3, -1)
  263. i = input_array.reshape([-1, 3])
  264. j = input_array.reshape(-1)
  265. return a, b, c, d, e, f, g, h, i, j
  266. @pytest.mark.level1
  267. @pytest.mark.platform_arm_ascend_training
  268. @pytest.mark.platform_x86_ascend_training
  269. @pytest.mark.platform_x86_gpu_training
  270. @pytest.mark.platform_x86_cpu
  271. @pytest.mark.env_onecard
  272. def test_reshape():
  273. onp_array = onp.random.random((2, 3, 4)).astype('float32')
  274. mnp_array = to_tensor(onp_array)
  275. o_reshaped = onp_reshape(onp_array)
  276. m_reshaped = mnp_reshape(mnp_array)
  277. check_all_results(o_reshaped, m_reshaped)
  278. # Test np.ravel
  279. def mnp_ravel(input_tensor):
  280. a = mnp.ravel(input_tensor)
  281. return a
  282. def onp_ravel(input_array):
  283. a = onp.ravel(input_array)
  284. return a
  285. @pytest.mark.level1
  286. @pytest.mark.platform_arm_ascend_training
  287. @pytest.mark.platform_x86_ascend_training
  288. @pytest.mark.platform_x86_gpu_training
  289. @pytest.mark.platform_x86_cpu
  290. @pytest.mark.env_onecard
  291. def test_ravel():
  292. onp_array = onp.random.random((2, 3, 4)).astype('float32')
  293. mnp_array = to_tensor(onp_array)
  294. o_ravel = onp_ravel(onp_array)
  295. m_ravel = mnp_ravel(mnp_array).asnumpy()
  296. match_array(o_ravel, m_ravel)
  297. # Test np.concatenate
  298. def mnp_concatenate(input_tensor):
  299. a = mnp.concatenate(input_tensor, None)
  300. b = mnp.concatenate(input_tensor, 0)
  301. c = mnp.concatenate(input_tensor, 1)
  302. d = mnp.concatenate(input_tensor, 2)
  303. return a, b, c, d
  304. def onp_concatenate(input_array):
  305. a = onp.concatenate(input_array, None)
  306. b = onp.concatenate(input_array, 0)
  307. c = onp.concatenate(input_array, 1)
  308. d = onp.concatenate(input_array, 2)
  309. return a, b, c, d
  310. @pytest.mark.level1
  311. @pytest.mark.platform_arm_ascend_training
  312. @pytest.mark.platform_x86_ascend_training
  313. @pytest.mark.platform_x86_gpu_training
  314. @pytest.mark.platform_x86_cpu
  315. @pytest.mark.env_onecard
  316. def test_concatenate():
  317. onp_array = onp.random.random((5, 4, 3, 2)).astype('float32')
  318. mnp_array = to_tensor(onp_array)
  319. o_concatenate = onp_concatenate(onp_array)
  320. m_concatenate = mnp_concatenate(mnp_array)
  321. check_all_results(o_concatenate, m_concatenate)
  322. def mnp_append(arr1, arr2):
  323. a = mnp.append(arr1, arr2)
  324. b = mnp.append(arr1, arr2, axis=0)
  325. c = mnp.append(arr1, arr2, axis=-1)
  326. return a, b, c
  327. def onp_append(arr1, arr2):
  328. a = onp.append(arr1, arr2)
  329. b = onp.append(arr1, arr2, axis=0)
  330. c = onp.append(arr1, arr2, axis=-1)
  331. return a, b, c
  332. @pytest.mark.level1
  333. @pytest.mark.platform_arm_ascend_training
  334. @pytest.mark.platform_x86_ascend_training
  335. @pytest.mark.platform_x86_gpu_training
  336. @pytest.mark.platform_x86_cpu
  337. @pytest.mark.env_onecard
  338. def test_append():
  339. onp_array = onp.random.random((4, 3, 2)).astype('float32')
  340. onp_value = onp.random.random((4, 3, 2)).astype('float32')
  341. mnp_array = to_tensor(onp_array)
  342. mnp_value = to_tensor(onp_value)
  343. onp_res = onp_append(onp_array, onp_value)
  344. mnp_res = mnp_append(mnp_array, mnp_value)
  345. check_all_results(onp_res, mnp_res)
  346. def construct_arrays(n=1, ndim=1, axis=None, low=1, high=5):
  347. onp_array_lst = []
  348. mnp_array_lst = []
  349. shape = onp.random.randint(low=low, high=high, size=ndim)
  350. new_shape = [sh for sh in shape]
  351. while n > 0:
  352. n -= 1
  353. onp_array1 = onp.random.randint(
  354. low=low, high=high, size=shape).astype(onp.float32)
  355. onp_array_lst.append(onp_array1)
  356. mnp_array_lst.append(to_tensor(onp_array1))
  357. if axis is not None and axis < ndim:
  358. new_shape[axis] += onp.random.randint(2)
  359. onp_array2 = onp.random.randint(
  360. low=low, high=high, size=new_shape).astype(onp.float32)
  361. onp_array_lst.append(onp_array2)
  362. mnp_array_lst.append(to_tensor(onp_array2))
  363. return onp_array_lst, mnp_array_lst
  364. # Test np.xstack
  365. def prepare_array_sequences(n_lst, ndim_lst, axis=None, low=1, high=5):
  366. onp_seq_lst = []
  367. mnp_seq_lst = []
  368. for n in n_lst:
  369. for ndim in ndim_lst:
  370. onp_array_lst, mnp_array_lst = construct_arrays(
  371. n=n, ndim=ndim, axis=axis, low=low, high=high)
  372. onp_seq_lst.append(onp_array_lst)
  373. mnp_seq_lst.append(mnp_array_lst)
  374. return onp_seq_lst, mnp_seq_lst
  375. def mnp_column_stack(input_tensor):
  376. return mnp.column_stack(input_tensor)
  377. def onp_column_stack(input_array):
  378. return onp.column_stack(input_array)
  379. @pytest.mark.level1
  380. @pytest.mark.platform_arm_ascend_training
  381. @pytest.mark.platform_x86_ascend_training
  382. @pytest.mark.platform_x86_gpu_training
  383. @pytest.mark.platform_x86_cpu
  384. @pytest.mark.env_onecard
  385. def test_column_stack():
  386. onp_seq_lst, mnp_seq_lst = prepare_array_sequences(
  387. n_lst=[1, 5], ndim_lst=[1, 2, 3, 4], axis=1)
  388. for i, onp_seq in enumerate(onp_seq_lst):
  389. onp_seq = onp_seq_lst[i]
  390. mnp_seq = mnp_seq_lst[i]
  391. o_column_stack = onp_column_stack(onp_seq)
  392. m_column_stack = mnp_column_stack(mnp_seq)
  393. check_all_results(o_column_stack, m_column_stack)
  394. def mnp_hstack(input_tensor):
  395. return mnp.hstack(input_tensor)
  396. def onp_hstack(input_array):
  397. return onp.hstack(input_array)
  398. @pytest.mark.level1
  399. @pytest.mark.platform_arm_ascend_training
  400. @pytest.mark.platform_x86_ascend_training
  401. @pytest.mark.platform_x86_gpu_training
  402. @pytest.mark.platform_x86_cpu
  403. @pytest.mark.env_onecard
  404. def test_hstack():
  405. onp_seq_lst0, mnp_seq_lst0 = prepare_array_sequences(
  406. n_lst=[1, 5], ndim_lst=[2, 3, 4], axis=1)
  407. onp_seq_lst1, mnp_seq_lst1 = prepare_array_sequences(
  408. n_lst=[1, 5], ndim_lst=[1], axis=0)
  409. onp_seq_lst = onp_seq_lst0 + onp_seq_lst1
  410. mnp_seq_lst = mnp_seq_lst0 + mnp_seq_lst1
  411. for i, onp_seq in enumerate(onp_seq_lst):
  412. mnp_seq = mnp_seq_lst[i]
  413. o_hstack = onp_hstack(onp_seq)
  414. m_hstack = mnp_hstack(mnp_seq)
  415. check_all_results(o_hstack, m_hstack)
  416. def mnp_dstack(input_tensor):
  417. return mnp.dstack(input_tensor)
  418. def onp_dstack(input_array):
  419. return onp.dstack(input_array)
  420. @pytest.mark.level1
  421. @pytest.mark.platform_arm_ascend_training
  422. @pytest.mark.platform_x86_ascend_training
  423. @pytest.mark.platform_x86_gpu_training
  424. @pytest.mark.platform_x86_cpu
  425. @pytest.mark.env_onecard
  426. def test_dstack():
  427. onp_seq_lst, mnp_seq_lst = prepare_array_sequences(
  428. n_lst=[1, 5], ndim_lst=[1, 2, 3, 4], axis=2)
  429. for i, onp_seq in enumerate(onp_seq_lst):
  430. mnp_seq = mnp_seq_lst[i]
  431. o_dstack = onp_dstack(onp_seq)
  432. m_dstack = mnp_dstack(mnp_seq)
  433. check_all_results(o_dstack, m_dstack)
  434. def mnp_vstack(input_tensor):
  435. return mnp.vstack(input_tensor)
  436. def onp_vstack(input_array):
  437. return onp.vstack(input_array)
  438. @pytest.mark.level1
  439. @pytest.mark.platform_arm_ascend_training
  440. @pytest.mark.platform_x86_ascend_training
  441. @pytest.mark.platform_x86_gpu_training
  442. @pytest.mark.platform_x86_cpu
  443. @pytest.mark.env_onecard
  444. def test_vstack():
  445. onp_seq_lst0, mnp_seq_lst0 = prepare_array_sequences(
  446. n_lst=[1, 5], ndim_lst=[2, 3, 4], axis=0)
  447. onp_seq_lst1, mnp_seq_lst1 = prepare_array_sequences(
  448. n_lst=[1, 5], ndim_lst=[1])
  449. onp_seq_lst = onp_seq_lst0 + onp_seq_lst1
  450. mnp_seq_lst = mnp_seq_lst0 + mnp_seq_lst1
  451. for i, onp_seq in enumerate(onp_seq_lst):
  452. mnp_seq = mnp_seq_lst[i]
  453. o_vstack = onp_vstack(onp_seq)
  454. m_vstack = mnp_vstack(mnp_seq)
  455. check_all_results(o_vstack, m_vstack)
  456. # Test np.atleastxd
  457. def mnp_atleast1d(*arys):
  458. return mnp.atleast_1d(*arys)
  459. def onp_atleast1d(*arys):
  460. return onp.atleast_1d(*arys)
  461. def mnp_atleast2d(*arys):
  462. return mnp.atleast_2d(*arys)
  463. def onp_atleast2d(*arys):
  464. return onp.atleast_2d(*arys)
  465. def mnp_atleast3d(*arys):
  466. return mnp.atleast_3d(*arys)
  467. def onp_atleast3d(*arys):
  468. return onp.atleast_3d(*arys)
  469. @pytest.mark.level1
  470. @pytest.mark.platform_arm_ascend_training
  471. @pytest.mark.platform_x86_ascend_training
  472. @pytest.mark.platform_x86_gpu_training
  473. @pytest.mark.platform_x86_cpu
  474. @pytest.mark.env_onecard
  475. def test_atleast1d():
  476. run_non_kw_test(mnp_atleast1d, onp_atleast1d, Cases())
  477. @pytest.mark.level1
  478. @pytest.mark.platform_arm_ascend_training
  479. @pytest.mark.platform_x86_ascend_training
  480. @pytest.mark.platform_x86_gpu_training
  481. @pytest.mark.platform_x86_cpu
  482. @pytest.mark.env_onecard
  483. def test_atleast2d():
  484. run_non_kw_test(mnp_atleast2d, onp_atleast2d, Cases())
  485. @pytest.mark.level1
  486. @pytest.mark.platform_arm_ascend_training
  487. @pytest.mark.platform_x86_ascend_training
  488. @pytest.mark.platform_x86_gpu_training
  489. @pytest.mark.platform_x86_cpu
  490. @pytest.mark.env_onecard
  491. def test_atleast3d():
  492. run_non_kw_test(mnp_atleast3d, onp_atleast3d, Cases())
  493. # Test np.where
  494. def mnp_where(condition, x, y):
  495. return mnp.where(condition, x, y)
  496. def onp_where(condition, x, y):
  497. return onp.where(condition, x, y)
  498. @pytest.mark.level1
  499. @pytest.mark.platform_arm_ascend_training
  500. @pytest.mark.platform_x86_ascend_training
  501. @pytest.mark.platform_x86_gpu_training
  502. @pytest.mark.platform_x86_cpu
  503. @pytest.mark.env_onecard
  504. def test_where():
  505. test_case = Cases()
  506. for condition1 in test_case.bool_broadcastables[:2]:
  507. for x in test_case.broadcastables[:2]:
  508. for y in test_case.broadcastables[:2]:
  509. for condition2 in test_case.broadcastables[:2]:
  510. match_res(mnp_where, onp_where, condition1, x, y)
  511. match_res(mnp_where, onp_where, condition2, x, y)
  512. # Test ndarray.flatten
  513. def mnp_ndarray_flatten(input_tensor):
  514. a = input_tensor.flatten()
  515. b = input_tensor.flatten(order='F')
  516. c = input_tensor.flatten(order='C')
  517. return a, b, c
  518. def onp_ndarray_flatten(input_array):
  519. a = input_array.flatten()
  520. b = input_array.flatten(order='F')
  521. c = input_array.flatten(order='C')
  522. return a, b, c
  523. @pytest.mark.level1
  524. @pytest.mark.platform_arm_ascend_training
  525. @pytest.mark.platform_x86_ascend_training
  526. @pytest.mark.platform_x86_gpu_training
  527. @pytest.mark.platform_x86_cpu
  528. @pytest.mark.env_onecard
  529. def test_ndarray_flatten():
  530. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  531. mnp_array = to_tensor(onp_array)
  532. o_flatten = onp_ndarray_flatten(onp_array)
  533. m_flatten = mnp_ndarray_flatten(mnp_array)
  534. check_all_results(o_flatten, m_flatten)
  535. # Test ndarray.transpose
  536. def mnp_ndarray_transpose(input_tensor):
  537. a = input_tensor.T
  538. b = input_tensor.transpose()
  539. c = input_tensor.transpose((0, 2, 1))
  540. d = input_tensor.transpose([0, 2, 1])
  541. return a, b, c, d
  542. def onp_ndarray_transpose(input_array):
  543. a = input_array.T
  544. b = input_array.transpose()
  545. c = input_array.transpose((0, 2, 1))
  546. d = input_array.transpose([0, 2, 1])
  547. return a, b, c, d
  548. @pytest.mark.level1
  549. @pytest.mark.platform_arm_ascend_training
  550. @pytest.mark.platform_x86_ascend_training
  551. @pytest.mark.platform_x86_gpu_training
  552. @pytest.mark.platform_x86_cpu
  553. @pytest.mark.env_onecard
  554. def test_ndarray_transpose():
  555. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  556. mnp_array = to_tensor(onp_array)
  557. o_transposed = onp_ndarray_transpose(onp_array)
  558. m_transposed = mnp_ndarray_transpose(mnp_array)
  559. check_all_results(o_transposed, m_transposed)
  560. # Test ndarray.astype
  561. def mnp_ndarray_astype(input_tensor):
  562. a = input_tensor.astype("float16")
  563. b = input_tensor.astype(onp.float64)
  564. c = input_tensor.astype(mnp.bool_)
  565. return a, b, c
  566. def onp_ndarray_astype(input_array):
  567. a = input_array.astype("float16")
  568. b = input_array.astype(onp.float64)
  569. c = input_array.astype(onp.bool_)
  570. return a, b, c
  571. @pytest.mark.level1
  572. @pytest.mark.platform_arm_ascend_training
  573. @pytest.mark.platform_x86_ascend_training
  574. @pytest.mark.platform_x86_gpu_training
  575. @pytest.mark.platform_x86_cpu
  576. @pytest.mark.env_onecard
  577. def test_ndarray_astype():
  578. onp_array = onp.random.random((3, 4, 5)).astype('float32')
  579. mnp_array = to_tensor(onp_array)
  580. o_astype = onp_ndarray_astype(onp_array)
  581. m_astype = mnp_ndarray_astype(mnp_array)
  582. for arr1, arr2 in zip(o_astype, m_astype):
  583. assert arr1.dtype == arr2.asnumpy().dtype
  584. def onp_concatenate_type_promotion(onp_array1, onp_array2, onp_array3, onp_array4):
  585. o_concatenate = onp.concatenate((onp_array1,
  586. onp_array2,
  587. onp_array3,
  588. onp_array4), -1)
  589. return o_concatenate
  590. def mnp_concatenate_type_promotion(mnp_array1, mnp_array2, mnp_array3, mnp_array4):
  591. m_concatenate = mnp.concatenate([mnp_array1,
  592. mnp_array2,
  593. mnp_array3,
  594. mnp_array4], -1)
  595. return m_concatenate
  596. @pytest.mark.level1
  597. @pytest.mark.platform_arm_ascend_training
  598. @pytest.mark.platform_x86_ascend_training
  599. @pytest.mark.platform_x86_gpu_training
  600. @pytest.mark.platform_x86_cpu
  601. @pytest.mark.env_onecard
  602. def test_concatenate_type_promotion():
  603. onp_array = onp.random.random((5, 1)).astype('float32')
  604. mnp_array = to_tensor(onp_array)
  605. onp_array1 = onp_array.astype(onp.float16)
  606. onp_array2 = onp_array.astype(onp.bool_)
  607. onp_array3 = onp_array.astype(onp.float32)
  608. onp_array4 = onp_array.astype(onp.int32)
  609. mnp_array1 = mnp_array.astype(onp.float16)
  610. mnp_array2 = mnp_array.astype(onp.bool_)
  611. mnp_array3 = mnp_array.astype(onp.float32)
  612. mnp_array4 = mnp_array.astype(onp.int32)
  613. o_concatenate = onp_concatenate_type_promotion(
  614. onp_array1, onp_array2, onp_array3, onp_array4).astype('float32')
  615. m_concatenate = mnp_concatenate_type_promotion(
  616. mnp_array1, mnp_array2, mnp_array3, mnp_array4)
  617. check_all_results(o_concatenate, m_concatenate, error=1e-7)
  618. def mnp_stack(*arrs):
  619. a = mnp.stack(arrs, axis=-4)
  620. b = mnp.stack(arrs, axis=-3)
  621. c = mnp.stack(arrs, axis=0)
  622. d = mnp.stack(arrs, axis=3)
  623. e = mnp.stack(arrs, axis=2)
  624. return a, b, c, d, e
  625. def onp_stack(*arrs):
  626. a = onp.stack(arrs, axis=-4)
  627. b = onp.stack(arrs, axis=-3)
  628. c = onp.stack(arrs, axis=0)
  629. d = onp.stack(arrs, axis=3)
  630. e = onp.stack(arrs, axis=2)
  631. return a, b, c, d, e
  632. @pytest.mark.level1
  633. @pytest.mark.platform_arm_ascend_training
  634. @pytest.mark.platform_x86_ascend_training
  635. @pytest.mark.platform_x86_gpu_training
  636. @pytest.mark.platform_x86_cpu
  637. @pytest.mark.env_onecard
  638. def test_stack():
  639. arr = rand_int(3, 4, 5, 6)
  640. match_res(mnp.stack, onp.stack, arr)
  641. for i in range(-4, 4):
  642. match_res(mnp.stack, onp.stack, arr, axis=i)
  643. arr = rand_int(7, 4, 0, 3)
  644. match_res(mnp.stack, onp.stack, arr)
  645. for i in range(-4, 4):
  646. match_res(mnp.stack, onp.stack, arr, axis=i)
  647. arrs = [rand_int(3, 4, 5) for i in range(10)]
  648. match_res(mnp.stack, onp.stack, arrs)
  649. match_res(mnp.stack, onp.stack, tuple(arrs))
  650. match_res(mnp_stack, onp_stack, *arrs)
  651. for i in range(-4, 4):
  652. match_res(mnp.stack, onp.stack, arrs, axis=i)
  653. arrs = [rand_int(3, 0, 5, 8, 0) for i in range(5)]
  654. match_res(mnp.stack, onp.stack, arrs)
  655. match_res(mnp.stack, onp.stack, tuple(arrs))
  656. match_res(mnp_stack, onp_stack, *arrs)
  657. for i in range(-6, 6):
  658. match_res(mnp.stack, onp.stack, arrs, axis=i)
  659. def mnp_roll(input_tensor):
  660. a = mnp.roll(input_tensor, -3)
  661. b = mnp.roll(input_tensor, [-2, -3], 1)
  662. c = mnp.roll(input_tensor, (3, 0, -5), (-1, -2, 0))
  663. d = mnp.roll(input_tensor, (4,), [0, 0, 1])
  664. return a, b, c, d
  665. def onp_roll(input_array):
  666. a = onp.roll(input_array, -3)
  667. b = onp.roll(input_array, [-2, -3], 1)
  668. c = onp.roll(input_array, (3, 0, -5), (-1, -2, 0))
  669. d = onp.roll(input_array, (4,), [0, 0, 1])
  670. return a, b, c, d
  671. @pytest.mark.level1
  672. @pytest.mark.platform_arm_ascend_training
  673. @pytest.mark.platform_x86_ascend_training
  674. @pytest.mark.platform_x86_gpu_training
  675. @pytest.mark.platform_x86_cpu
  676. @pytest.mark.env_onecard
  677. def test_roll():
  678. arr = rand_int(3, 4, 5)
  679. match_res(mnp_roll, onp_roll, arr)
  680. arr = rand_int(1, 4, 6).astype("int64")
  681. match_res(mnp_roll, onp_roll, arr)
  682. def mnp_moveaxis(a):
  683. a = mnp.moveaxis(a, 3, 3)
  684. b = mnp.moveaxis(a, -1, 4)
  685. c = mnp.moveaxis(a, (2, 1, 4), (0, 3, 2))
  686. d = mnp.moveaxis(a, [-2, -5], [2, -4])
  687. return a, b, c, d
  688. def onp_moveaxis(a):
  689. a = onp.moveaxis(a, 3, 3)
  690. b = onp.moveaxis(a, -1, 4)
  691. c = onp.moveaxis(a, (2, 1, 4), (0, 3, 2))
  692. d = onp.moveaxis(a, [-2, -5], [2, -4])
  693. return a, b, c, d
  694. @pytest.mark.level1
  695. @pytest.mark.platform_arm_ascend_training
  696. @pytest.mark.platform_x86_ascend_training
  697. @pytest.mark.platform_x86_gpu_training
  698. @pytest.mark.platform_x86_cpu
  699. @pytest.mark.env_onecard
  700. def test_moveaxis():
  701. a = rand_int(2, 4, 5, 9, 6)
  702. match_res(mnp_moveaxis, onp_moveaxis, a)
  703. a = rand_int(2, 4, 5, 0, 6, 7, 1, 3, 8)
  704. match_res(mnp_moveaxis, onp_moveaxis, a)
  705. def mnp_tile(x):
  706. a = mnp.tile(x, 0)
  707. b = mnp.tile(x, 1)
  708. c = mnp.tile(x, 3)
  709. d = mnp.tile(x, [5, 1])
  710. e = mnp.tile(x, (3, 1, 0))
  711. f = mnp.tile(x, [5, 1, 2, 3, 7])
  712. return a, b, c, d, e, f
  713. def onp_tile(x):
  714. a = onp.tile(x, 0)
  715. b = onp.tile(x, 1)
  716. c = onp.tile(x, 3)
  717. d = onp.tile(x, [5, 1])
  718. e = onp.tile(x, (3, 1, 0))
  719. f = onp.tile(x, [5, 1, 2, 3, 7])
  720. return a, b, c, d, e, f
  721. @pytest.mark.level1
  722. @pytest.mark.platform_arm_ascend_training
  723. @pytest.mark.platform_x86_ascend_training
  724. @pytest.mark.platform_x86_gpu_training
  725. @pytest.mark.platform_x86_cpu
  726. @pytest.mark.env_onecard
  727. def test_tile():
  728. a = rand_int(2, 3, 4)
  729. match_res(mnp_tile, onp_tile, a)
  730. b = rand_int(5, 0, 8)
  731. match_res(mnp_tile, onp_tile, b)
  732. def mnp_broadcast_to(x):
  733. a = mnp.broadcast_to(x, (2, 3))
  734. b = mnp.broadcast_to(x, (8, 1, 3))
  735. return a, b
  736. def onp_broadcast_to(x):
  737. a = onp.broadcast_to(x, (2, 3))
  738. b = onp.broadcast_to(x, (8, 1, 3))
  739. return a, b
  740. @pytest.mark.level1
  741. @pytest.mark.platform_arm_ascend_training
  742. @pytest.mark.platform_x86_ascend_training
  743. @pytest.mark.platform_x86_gpu_training
  744. @pytest.mark.platform_x86_cpu
  745. @pytest.mark.env_onecard
  746. def test_broadcast_to():
  747. x = rand_int()
  748. match_res(mnp_broadcast_to, onp_broadcast_to, x)
  749. x = rand_int(3)
  750. match_res(mnp_broadcast_to, onp_broadcast_to, x)
  751. x = rand_int(1, 3)
  752. match_res(mnp_broadcast_to, onp_broadcast_to, x)
  753. def mnp_broadcast_arrays(*args):
  754. return mnp.broadcast_arrays(*args)
  755. def onp_broadcast_arrays(*args):
  756. return onp.broadcast_arrays(*args)
  757. @pytest.mark.level1
  758. @pytest.mark.platform_arm_ascend_training
  759. @pytest.mark.platform_x86_ascend_training
  760. @pytest.mark.platform_x86_gpu_training
  761. @pytest.mark.platform_x86_cpu
  762. @pytest.mark.env_onecard
  763. def test_broadcast_arrays():
  764. test_case = Cases()
  765. broadcastables = test_case.broadcastables
  766. for i in range(len(broadcastables)):
  767. arrs = broadcastables[i:]
  768. match_res(mnp_broadcast_arrays, onp_broadcast_arrays, *arrs)
  769. def mnp_flip(x):
  770. a = mnp.flip(x)
  771. b = mnp.flip(x, 0)
  772. c = mnp.flip(x, 1)
  773. d = mnp.flip(x, (-3, -1))
  774. return a, b, c, d
  775. def onp_flip(x):
  776. a = onp.flip(x)
  777. b = onp.flip(x, 0)
  778. c = onp.flip(x, 1)
  779. d = onp.flip(x, (-3, -1))
  780. return a, b, c, d
  781. @pytest.mark.level2
  782. @pytest.mark.platform_arm_ascend_training
  783. @pytest.mark.platform_x86_ascend_training
  784. @pytest.mark.platform_x86_gpu_training
  785. @pytest.mark.platform_x86_cpu
  786. @pytest.mark.env_onecard
  787. def test_flip():
  788. x = rand_int(2, 3, 4)
  789. run_multi_test(mnp_flip, onp_flip, (x,))
  790. def mnp_flipud(x):
  791. return mnp.flipud(x)
  792. def onp_flipud(x):
  793. return onp.flipud(x)
  794. @pytest.mark.level2
  795. @pytest.mark.platform_arm_ascend_training
  796. @pytest.mark.platform_x86_ascend_training
  797. @pytest.mark.platform_x86_gpu_training
  798. @pytest.mark.platform_x86_cpu
  799. @pytest.mark.env_onecard
  800. def test_flipud():
  801. x = rand_int(2, 3, 4)
  802. run_multi_test(mnp_flipud, onp_flipud, (x,))
  803. def mnp_fliplr(x):
  804. return mnp.fliplr(x)
  805. def onp_fliplr(x):
  806. return onp.fliplr(x)
  807. @pytest.mark.level2
  808. @pytest.mark.platform_arm_ascend_training
  809. @pytest.mark.platform_x86_ascend_training
  810. @pytest.mark.platform_x86_gpu_training
  811. @pytest.mark.platform_x86_cpu
  812. @pytest.mark.env_onecard
  813. def test_fliplr():
  814. x = rand_int(2, 3, 4)
  815. run_multi_test(mnp_fliplr, onp_fliplr, (x,))
  816. def mnp_split(input_tensor):
  817. a = mnp.split(input_tensor, indices_or_sections=1)
  818. b = mnp.split(input_tensor, indices_or_sections=3)
  819. c = mnp.split(input_tensor, indices_or_sections=(-9, -8, 6))
  820. d = mnp.split(input_tensor, indices_or_sections=(3, 2, 1))
  821. e = mnp.split(input_tensor, indices_or_sections=(-10, -4, 5, 10))
  822. f = mnp.split(input_tensor, indices_or_sections=[0, 2], axis=1)
  823. return a, b, c, d, e, f
  824. def onp_split(input_array):
  825. a = onp.split(input_array, indices_or_sections=1)
  826. b = onp.split(input_array, indices_or_sections=3)
  827. c = onp.split(input_array, indices_or_sections=(-9, -8, 6))
  828. d = onp.split(input_array, indices_or_sections=(3, 2, 1))
  829. e = onp.split(input_array, indices_or_sections=(-10, -4, 5, 10))
  830. f = onp.split(input_array, indices_or_sections=[0, 2], axis=1)
  831. return a, b, c, d, e, f
  832. @pytest.mark.level1
  833. @pytest.mark.platform_arm_ascend_training
  834. @pytest.mark.platform_x86_ascend_training
  835. @pytest.mark.platform_x86_gpu_training
  836. @pytest.mark.platform_x86_cpu
  837. @pytest.mark.env_onecard
  838. def test_split():
  839. onp_arrs = [
  840. onp.random.randint(1, 5, size=(9, 4, 5)).astype('float32')
  841. ]
  842. mnp_arrs = [to_tensor(arr) for arr in onp_arrs]
  843. for onp_arr, mnp_arr in zip(onp_arrs, mnp_arrs):
  844. o_split = onp_split(onp_arr)
  845. m_split = mnp_split(mnp_arr)
  846. for expect_lst, actual_lst in zip(o_split, m_split):
  847. for expect, actual in zip(expect_lst, actual_lst):
  848. match_array(expect, actual.asnumpy())
  849. def mnp_array_split(input_tensor):
  850. a = mnp.array_split(input_tensor, indices_or_sections=4, axis=2)
  851. b = mnp.array_split(input_tensor, indices_or_sections=3, axis=1)
  852. c = mnp.array_split(input_tensor, indices_or_sections=6)
  853. return a, b, c
  854. def onp_array_split(input_array):
  855. a = onp.array_split(input_array, indices_or_sections=4, axis=2)
  856. b = onp.array_split(input_array, indices_or_sections=3, axis=1)
  857. c = onp.array_split(input_array, indices_or_sections=6)
  858. return a, b, c
  859. @pytest.mark.level1
  860. @pytest.mark.platform_arm_ascend_training
  861. @pytest.mark.platform_x86_ascend_training
  862. @pytest.mark.platform_x86_gpu_training
  863. @pytest.mark.platform_x86_cpu
  864. @pytest.mark.env_onecard
  865. def test_array_split():
  866. onp_arr = onp.random.randint(1, 5, size=(9, 7, 13)).astype('float32')
  867. mnp_arr = to_tensor(onp_arr)
  868. o_split = onp_split(onp_arr)
  869. m_split = mnp_split(mnp_arr)
  870. for expect_lst, actual_lst in zip(o_split, m_split):
  871. for expect, actual in zip(expect_lst, actual_lst):
  872. match_array(expect, actual.asnumpy())
  873. def mnp_vsplit(input_tensor):
  874. a = mnp.vsplit(input_tensor, indices_or_sections=3)
  875. b = mnp.vsplit(input_tensor, indices_or_sections=(-10, -4, 5, 10))
  876. c = mnp.vsplit(input_tensor, indices_or_sections=[0, 2])
  877. return a, b, c
  878. def onp_vsplit(input_array):
  879. a = onp.vsplit(input_array, indices_or_sections=3)
  880. b = onp.vsplit(input_array, indices_or_sections=(-10, -4, 5, 10))
  881. c = onp.vsplit(input_array, indices_or_sections=[0, 2])
  882. return a, b, c
  883. @pytest.mark.level1
  884. @pytest.mark.platform_arm_ascend_training
  885. @pytest.mark.platform_x86_ascend_training
  886. @pytest.mark.platform_x86_gpu_training
  887. @pytest.mark.platform_x86_cpu
  888. @pytest.mark.env_onecard
  889. def test_vsplit():
  890. onp_arrs = [
  891. onp.random.randint(1, 5, size=(9, 4, 5)).astype('float32')
  892. ]
  893. mnp_arrs = [to_tensor(arr) for arr in onp_arrs]
  894. for onp_arr, mnp_arr in zip(onp_arrs, mnp_arrs):
  895. o_vsplit = onp_vsplit(onp_arr)
  896. m_vsplit = mnp_vsplit(mnp_arr)
  897. for expect_lst, actual_lst in zip(o_vsplit, m_vsplit):
  898. for expect, actual in zip(expect_lst, actual_lst):
  899. match_array(expect, actual.asnumpy())
  900. def mnp_hsplit(input_tensor):
  901. a = mnp.hsplit(input_tensor, indices_or_sections=3)
  902. b = mnp.hsplit(input_tensor, indices_or_sections=(-10, -4, 5, 10))
  903. c = mnp.hsplit(input_tensor, indices_or_sections=[0, 2])
  904. return a, b, c
  905. def onp_hsplit(input_array):
  906. a = onp.hsplit(input_array, indices_or_sections=3)
  907. b = onp.hsplit(input_array, indices_or_sections=(-10, -4, 5, 10))
  908. c = onp.hsplit(input_array, indices_or_sections=[0, 2])
  909. return a, b, c
  910. @pytest.mark.level1
  911. @pytest.mark.platform_arm_ascend_training
  912. @pytest.mark.platform_x86_ascend_training
  913. @pytest.mark.platform_x86_gpu_training
  914. @pytest.mark.platform_x86_cpu
  915. @pytest.mark.env_onecard
  916. def test_hsplit():
  917. onp_arrs = [
  918. onp.random.randint(1, 5, size=(4, 9, 5)).astype('float32')
  919. ]
  920. mnp_arrs = [to_tensor(arr) for arr in onp_arrs]
  921. for onp_arr, mnp_arr in zip(onp_arrs, mnp_arrs):
  922. o_hsplit = onp_hsplit(onp_arr)
  923. m_hsplit = mnp_hsplit(mnp_arr)
  924. for expect_lst, actual_lst in zip(o_hsplit, m_hsplit):
  925. for expect, actual in zip(expect_lst, actual_lst):
  926. match_array(expect, actual.asnumpy())
  927. def mnp_dsplit(input_tensor):
  928. a = mnp.dsplit(input_tensor, indices_or_sections=3)
  929. b = mnp.dsplit(input_tensor, indices_or_sections=(-10, -4, 5, 10))
  930. c = mnp.dsplit(input_tensor, indices_or_sections=[0, 2])
  931. return a, b, c
  932. def onp_dsplit(input_array):
  933. a = onp.dsplit(input_array, indices_or_sections=3)
  934. b = onp.dsplit(input_array, indices_or_sections=(-10, -4, 5, 10))
  935. c = onp.dsplit(input_array, indices_or_sections=[0, 2])
  936. return a, b, c
  937. @pytest.mark.level1
  938. @pytest.mark.platform_arm_ascend_training
  939. @pytest.mark.platform_x86_ascend_training
  940. @pytest.mark.platform_x86_gpu_training
  941. @pytest.mark.platform_x86_cpu
  942. @pytest.mark.env_onecard
  943. def test_dsplit():
  944. onp_arrs = [
  945. onp.random.randint(1, 5, size=(5, 4, 9)).astype('float32')
  946. ]
  947. mnp_arrs = [to_tensor(arr) for arr in onp_arrs]
  948. for onp_arr, mnp_arr in zip(onp_arrs, mnp_arrs):
  949. o_dsplit = onp_dsplit(onp_arr)
  950. m_dsplit = mnp_dsplit(mnp_arr)
  951. for expect_lst, actual_lst in zip(o_dsplit, m_dsplit):
  952. for expect, actual in zip(expect_lst, actual_lst):
  953. match_array(expect, actual.asnumpy())
  954. def mnp_take_along_axis(*arrs):
  955. x = arrs[0]
  956. a = mnp.take_along_axis(x, arrs[1], axis=None)
  957. b = mnp.take_along_axis(x, arrs[2], axis=1)
  958. c = mnp.take_along_axis(x, arrs[3], axis=-1)
  959. d = mnp.take_along_axis(x, arrs[4], axis=0)
  960. return a, b, c, d
  961. def onp_take_along_axis(*arrs):
  962. x = arrs[0]
  963. a = onp.take_along_axis(x, arrs[1], axis=None)
  964. b = onp.take_along_axis(x, arrs[2], axis=1)
  965. c = onp.take_along_axis(x, arrs[3], axis=-1)
  966. d = onp.take_along_axis(x, arrs[4], axis=0)
  967. return a, b, c, d
  968. @pytest.mark.level1
  969. @pytest.mark.platform_arm_ascend_training
  970. @pytest.mark.platform_x86_ascend_training
  971. @pytest.mark.platform_x86_gpu_training
  972. @pytest.mark.platform_x86_cpu
  973. @pytest.mark.env_onecard
  974. def test_take_along_axis():
  975. x = rand_int(6, 7, 8, 9)
  976. indices1 = rand_int(2).astype(onp.int32)
  977. indices2 = rand_int(6, 3, 8, 1).astype(onp.int32)
  978. indices3 = rand_int(6, 1, 8, 5).astype(onp.int32)
  979. indices4 = rand_int(4, 1, 1, 1).astype(onp.int32)
  980. run_multi_test(mnp_take_along_axis, onp_take_along_axis,
  981. (x, indices1, indices2, indices3, indices4))
  982. def mnp_take(x, indices):
  983. a = mnp.take(x, indices)
  984. b = mnp.take(x, indices, axis=-1)
  985. c = mnp.take(x, indices, axis=0, mode='wrap')
  986. d = mnp.take(x, indices, axis=1, mode='clip')
  987. return a, b, c, d
  988. def onp_take(x, indices):
  989. a = onp.take(x, indices)
  990. b = onp.take(x, indices, axis=-1)
  991. c = onp.take(x, indices, axis=0, mode='wrap')
  992. d = onp.take(x, indices, axis=1, mode='clip')
  993. return a, b, c, d
  994. @pytest.mark.level1
  995. @pytest.mark.platform_arm_ascend_training
  996. @pytest.mark.platform_x86_ascend_training
  997. @pytest.mark.platform_x86_gpu_training
  998. @pytest.mark.platform_x86_cpu
  999. @pytest.mark.env_onecard
  1000. def test_take():
  1001. x = rand_int(2, 3, 4, 5)
  1002. indices = rand_int(2, 3).astype(onp.int32)
  1003. run_multi_test(mnp_take, onp_take, (x, indices))
  1004. def mnp_repeat(x):
  1005. a = mnp.repeat(x, 2)
  1006. b = mnp.repeat(x, 3, axis=0)
  1007. c = mnp.repeat(x, (4, 1, 5), axis=1)
  1008. d = mnp.repeat(x, (3, 2, 1, 0, 4), axis=-1)
  1009. e = mnp.repeat(x, 0)
  1010. return a, b, c, d, e
  1011. def onp_repeat(x):
  1012. a = onp.repeat(x, 2)
  1013. b = onp.repeat(x, 3, axis=0)
  1014. c = onp.repeat(x, (4, 1, 5), axis=1)
  1015. d = onp.repeat(x, (3, 2, 1, 0, 4), axis=-1)
  1016. e = onp.repeat(x, 0)
  1017. return a, b, c, d, e
  1018. @pytest.mark.level1
  1019. @pytest.mark.platform_arm_ascend_training
  1020. @pytest.mark.platform_x86_ascend_training
  1021. @pytest.mark.platform_x86_gpu_training
  1022. @pytest.mark.platform_x86_cpu
  1023. @pytest.mark.env_onecard
  1024. def test_repeat():
  1025. x = rand_int(2, 3, 4, 5)
  1026. run_multi_test(mnp_repeat, onp_repeat, (x,))
  1027. @pytest.mark.level1
  1028. @pytest.mark.platform_arm_ascend_training
  1029. @pytest.mark.platform_x86_ascend_training
  1030. @pytest.mark.platform_x86_gpu_training
  1031. @pytest.mark.platform_x86_cpu
  1032. @pytest.mark.env_onecard
  1033. def test_select():
  1034. choicelist = rand_int(2, 3, 4, 5)
  1035. condlist = choicelist > 2
  1036. match_res(mnp.select, onp.select, condlist, choicelist)
  1037. match_res(mnp.select, onp.select, condlist, choicelist, default=10)
  1038. condlist = rand_bool(5, 4, 1, 3)
  1039. choicelist = rand_int(5, 3)
  1040. match_res(mnp.select, onp.select, condlist, choicelist)
  1041. match_res(mnp.select, onp.select, condlist, choicelist, default=10)
  1042. condlist = rand_bool(3, 1, 7)
  1043. choicelist = rand_int(3, 5, 2, 1)
  1044. match_res(mnp.select, onp.select, condlist, choicelist)
  1045. match_res(mnp.select, onp.select, condlist, choicelist, default=10)
  1046. class ReshapeExpandSqueeze(Cell):
  1047. def __init__(self):
  1048. super(ReshapeExpandSqueeze, self).__init__()
  1049. def construct(self, x):
  1050. x = mnp.expand_dims(x, 2)
  1051. x = mnp.reshape(x, (1, 2, 3, 4, 1, 1))
  1052. x = mnp.squeeze(x)
  1053. return x
  1054. class TransposeConcatRavel(Cell):
  1055. def __init__(self):
  1056. super(TransposeConcatRavel, self).__init__()
  1057. def construct(self, x1, x2, x3):
  1058. x1 = mnp.transpose(x1, [0, 2, 1])
  1059. x2 = x2.transpose(0, 2, 1)
  1060. x = mnp.concatenate((x1, x2, x3), -1)
  1061. x = mnp.ravel(x)
  1062. return x
  1063. class RollSwap(Cell):
  1064. def __init__(self):
  1065. super(RollSwap, self).__init__()
  1066. def construct(self, x):
  1067. x = mnp.rollaxis(x, 2)
  1068. x = mnp.swapaxes(x, 0, 1)
  1069. return x
  1070. test_case_array_ops = [
  1071. ('ReshapeExpandSqueeze', {
  1072. 'block': ReshapeExpandSqueeze(),
  1073. 'desc_inputs': [mnp.ones((2, 3, 4))]}),
  1074. ('TransposeConcatRavel', {
  1075. 'block': TransposeConcatRavel(),
  1076. 'desc_inputs': [mnp.ones((2, 3, 4)),
  1077. mnp.ones((2, 3, 4)),
  1078. mnp.ones((2, 4, 1))]}),
  1079. ('RollSwap', {
  1080. 'block': RollSwap(),
  1081. 'desc_inputs': [mnp.ones((2, 3, 4))]})
  1082. ]
  1083. test_case_lists = [test_case_array_ops]
  1084. test_exec_case = functools.reduce(lambda x, y: x + y, test_case_lists)
  1085. # use -k to select certain testcast
  1086. # pytest tests/python/ops/test_ops.py::test_backward -k LayerNorm
  1087. @pytest.mark.level1
  1088. @pytest.mark.platform_arm_ascend_training
  1089. @pytest.mark.platform_x86_ascend_training
  1090. @pytest.mark.platform_x86_gpu_training
  1091. @pytest.mark.platform_x86_cpu
  1092. @pytest.mark.env_onecard
  1093. def test_expand_dims_exception():
  1094. with pytest.raises(TypeError):
  1095. mnp.expand_dims(mnp.ones((3, 3)), 1.2)
  1096. @pytest.mark.level1
  1097. @pytest.mark.platform_arm_ascend_training
  1098. @pytest.mark.platform_x86_ascend_training
  1099. @pytest.mark.platform_x86_gpu_training
  1100. @pytest.mark.platform_x86_cpu
  1101. @pytest.mark.env_onecard
  1102. def test_swapaxes_exception():
  1103. with pytest.raises(ValueError):
  1104. mnp.swapaxes(mnp.ones((3, 3)), 1, 10)
  1105. @pytest.mark.level1
  1106. @pytest.mark.platform_arm_ascend_training
  1107. @pytest.mark.platform_x86_ascend_training
  1108. @pytest.mark.platform_x86_gpu_training
  1109. @pytest.mark.platform_x86_cpu
  1110. @pytest.mark.env_onecard
  1111. def test_tensor_flatten():
  1112. lst = [[1.0, 2.0], [3.0, 4.0]]
  1113. tensor_list = to_tensor(lst)
  1114. assert tensor_list.flatten().asnumpy().tolist() == [1.0, 2.0, 3.0, 4.0]
  1115. assert tensor_list.flatten(order='F').asnumpy().tolist() == [
  1116. 1.0, 3.0, 2.0, 4.0]
  1117. @pytest.mark.level1
  1118. @pytest.mark.platform_arm_ascend_training
  1119. @pytest.mark.platform_x86_ascend_training
  1120. @pytest.mark.platform_x86_gpu_training
  1121. @pytest.mark.platform_x86_cpu
  1122. @pytest.mark.env_onecard
  1123. def test_tensor_reshape():
  1124. lst = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
  1125. tensor_list = to_tensor(lst)
  1126. with pytest.raises(TypeError):
  1127. tensor_list = tensor_list.reshape({0, 1, 2})
  1128. with pytest.raises(ValueError):
  1129. tensor_list = tensor_list.reshape(1, 2, 3)
  1130. assert tensor_list.reshape([-1, 4]).shape == (2, 4)
  1131. assert tensor_list.reshape(1, -1, 4).shape == (1, 2, 4)
  1132. @pytest.mark.level1
  1133. @pytest.mark.platform_arm_ascend_training
  1134. @pytest.mark.platform_x86_ascend_training
  1135. @pytest.mark.platform_x86_gpu_training
  1136. @pytest.mark.platform_x86_cpu
  1137. @pytest.mark.env_onecard
  1138. def test_tensor_squeeze():
  1139. lst = [[[1.0], [2.0], [3.0]]]
  1140. tensor_list = to_tensor(lst)
  1141. with pytest.raises(TypeError):
  1142. tensor_list = tensor_list.squeeze(1.2)
  1143. with pytest.raises(ValueError):
  1144. tensor_list = tensor_list.squeeze(4)
  1145. assert tensor_list.squeeze().shape == (3,)
  1146. assert tensor_list.squeeze(axis=2).shape == (1, 3)
  1147. @pytest.mark.level1
  1148. @pytest.mark.platform_arm_ascend_training
  1149. @pytest.mark.platform_x86_ascend_training
  1150. @pytest.mark.platform_x86_gpu_training
  1151. @pytest.mark.platform_x86_cpu
  1152. @pytest.mark.env_onecard
  1153. def test_tensor_ravel():
  1154. lst = [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0]]
  1155. tensor_list = to_tensor(lst)
  1156. assert tensor_list.ravel().shape == (8,)
  1157. assert tensor_list.ravel().asnumpy().tolist() == [
  1158. 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
  1159. @pytest.mark.level1
  1160. @pytest.mark.platform_arm_ascend_training
  1161. @pytest.mark.platform_x86_ascend_training
  1162. @pytest.mark.platform_x86_gpu_training
  1163. @pytest.mark.platform_x86_cpu
  1164. @pytest.mark.env_onecard
  1165. def test_tensor_swapaxes():
  1166. lst = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
  1167. tensor_list = to_tensor(lst)
  1168. with pytest.raises(TypeError):
  1169. tensor_list = tensor_list.swapaxes(0, (1,))
  1170. with pytest.raises(ValueError):
  1171. tensor_list = tensor_list.swapaxes(0, 3)
  1172. assert tensor_list.swapaxes(0, 1).shape == (3, 2)
  1173. def mnp_rot90(input_tensor):
  1174. a = mnp.rot90(input_tensor)
  1175. b = mnp.rot90(input_tensor, 2)
  1176. c = mnp.rot90(input_tensor, 3)
  1177. d = mnp.rot90(input_tensor, 4)
  1178. e = mnp.rot90(input_tensor, 5, (0, -1))
  1179. f = mnp.rot90(input_tensor, 1, (2, 0))
  1180. g = mnp.rot90(input_tensor, -3, (-1, -2))
  1181. h = mnp.rot90(input_tensor, 3, (2, 1))
  1182. return a, b, c, d, e, f, g, h
  1183. def onp_rot90(input_array):
  1184. a = onp.rot90(input_array)
  1185. b = onp.rot90(input_array, 2)
  1186. c = onp.rot90(input_array, 3)
  1187. d = onp.rot90(input_array, 4)
  1188. e = onp.rot90(input_array, 5, (0, -1))
  1189. f = onp.rot90(input_array, 1, (2, 0))
  1190. g = onp.rot90(input_array, -3, (-1, -2))
  1191. h = onp.rot90(input_array, 3, (2, 1))
  1192. return a, b, c, d, e, f, g, h
  1193. @pytest.mark.level1
  1194. @pytest.mark.platform_arm_ascend_training
  1195. @pytest.mark.platform_x86_ascend_training
  1196. @pytest.mark.platform_x86_gpu_training
  1197. @pytest.mark.platform_x86_cpu
  1198. @pytest.mark.env_onecard
  1199. def test_rot90():
  1200. onp_array = rand_int(3, 4, 5).astype('float32')
  1201. mnp_array = to_tensor(onp_array)
  1202. o_rot = onp_rot90(onp_array)
  1203. m_rot = mnp_rot90(mnp_array)
  1204. check_all_results(o_rot, m_rot)