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 43 kB

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