mindspore 2.4.10__cp39-cp39-win_amd64.whl → 2.6.0rc1__cp39-cp39-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mindspore might be problematic. Click here for more details.

Files changed (577) hide show
  1. mindspore/.commit_id +1 -1
  2. mindspore/__init__.py +13 -6
  3. mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
  4. mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
  5. mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
  6. mindspore/_check_jit_forbidden_api.py +3 -0
  7. mindspore/_checkparam.py +3 -38
  8. mindspore/_deprecated/__init__.py +17 -0
  9. mindspore/_deprecated/jit.py +198 -0
  10. mindspore/_extends/builtin_operations.py +1 -1
  11. mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
  12. mindspore/_extends/parse/__init__.py +6 -7
  13. mindspore/_extends/parse/compile_config.py +83 -0
  14. mindspore/_extends/parse/deprecated/__init__.py +0 -0
  15. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
  16. mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
  17. mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
  18. mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
  19. mindspore/_extends/parse/parser.py +46 -197
  20. mindspore/_extends/parse/resources.py +1 -5
  21. mindspore/_extends/parse/standard_method.py +217 -98
  22. mindspore/_extends/pijit/__init__.py +2 -2
  23. mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
  24. mindspore/_extends/pijit/tensor_func_list.py +27 -0
  25. mindspore/_extends/utils.py +1 -1
  26. mindspore/amp.py +11 -5
  27. mindspore/avcodec-59.dll +0 -0
  28. mindspore/avdevice-59.dll +0 -0
  29. mindspore/avfilter-8.dll +0 -0
  30. mindspore/avformat-59.dll +0 -0
  31. mindspore/avutil-57.dll +0 -0
  32. mindspore/boost/__init__.py +2 -2
  33. mindspore/boost/base.py +3 -7
  34. mindspore/boost/boost_cell_wrapper.py +138 -43
  35. mindspore/common/__init__.py +6 -3
  36. mindspore/common/_grad_function.py +56 -0
  37. mindspore/common/_pijit_context.py +14 -5
  38. mindspore/common/_register_for_tensor.py +1 -2
  39. mindspore/common/_stub_tensor.py +30 -14
  40. mindspore/common/_tensor_cpp_method.py +17 -0
  41. mindspore/common/_tensor_docs.py +4760 -0
  42. mindspore/common/api.py +435 -371
  43. mindspore/common/auto_dynamic_shape.py +41 -44
  44. mindspore/common/dtype.py +39 -36
  45. mindspore/common/dump.py +9 -6
  46. mindspore/common/file_system.py +9 -1
  47. mindspore/common/generator.py +2 -0
  48. mindspore/common/hook_handle.py +6 -2
  49. mindspore/common/initializer.py +13 -10
  50. mindspore/common/jit_begin_end.py +94 -0
  51. mindspore/common/jit_config.py +6 -1
  52. mindspore/common/jit_context.py +76 -0
  53. mindspore/common/jit_trace.py +378 -0
  54. mindspore/common/lazy_inline.py +9 -3
  55. mindspore/common/mindir_util.py +10 -2
  56. mindspore/common/mutable.py +5 -4
  57. mindspore/common/parameter.py +135 -52
  58. mindspore/common/seed.py +2 -2
  59. mindspore/common/sparse_tensor.py +23 -17
  60. mindspore/common/tensor.py +951 -1992
  61. mindspore/communication/__init__.py +7 -5
  62. mindspore/communication/_comm_helper.py +52 -2
  63. mindspore/communication/comm_func.py +240 -181
  64. mindspore/communication/management.py +95 -26
  65. mindspore/context.py +314 -566
  66. mindspore/dataset/__init__.py +65 -37
  67. mindspore/dataset/audio/__init__.py +2 -8
  68. mindspore/dataset/audio/transforms.py +3 -17
  69. mindspore/dataset/callback/ds_callback.py +2 -1
  70. mindspore/dataset/core/config.py +87 -6
  71. mindspore/dataset/engine/cache_admin.py +3 -3
  72. mindspore/dataset/engine/cache_client.py +6 -5
  73. mindspore/dataset/engine/datasets.py +292 -267
  74. mindspore/dataset/engine/datasets_audio.py +22 -8
  75. mindspore/dataset/engine/datasets_standard_format.py +46 -27
  76. mindspore/dataset/engine/datasets_text.py +78 -48
  77. mindspore/dataset/engine/datasets_user_defined.py +182 -116
  78. mindspore/dataset/engine/datasets_vision.py +120 -44
  79. mindspore/dataset/engine/iterators.py +283 -63
  80. mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
  81. mindspore/dataset/engine/obs/util.py +8 -0
  82. mindspore/dataset/engine/queue.py +40 -0
  83. mindspore/dataset/engine/samplers.py +289 -43
  84. mindspore/dataset/engine/serializer_deserializer.py +3 -2
  85. mindspore/dataset/engine/validators.py +53 -11
  86. mindspore/dataset/text/__init__.py +7 -6
  87. mindspore/dataset/text/transforms.py +6 -5
  88. mindspore/dataset/text/utils.py +3 -3
  89. mindspore/dataset/transforms/__init__.py +0 -9
  90. mindspore/dataset/transforms/py_transforms_util.py +17 -0
  91. mindspore/dataset/transforms/transforms.py +31 -14
  92. mindspore/dataset/utils/browse_dataset.py +1 -1
  93. mindspore/dataset/vision/__init__.py +2 -9
  94. mindspore/dataset/vision/transforms.py +202 -158
  95. mindspore/dataset/vision/utils.py +7 -5
  96. mindspore/dataset/vision/validators.py +1 -2
  97. mindspore/device_context/__init__.py +21 -0
  98. mindspore/device_context/ascend/__init__.py +25 -0
  99. mindspore/device_context/ascend/device.py +72 -0
  100. mindspore/device_context/ascend/op_debug.py +153 -0
  101. mindspore/device_context/ascend/op_precision.py +193 -0
  102. mindspore/device_context/ascend/op_tuning.py +123 -0
  103. mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
  104. mindspore/device_context/cpu/device.py +62 -0
  105. mindspore/device_context/cpu/op_tuning.py +43 -0
  106. mindspore/device_context/gpu/__init__.py +21 -0
  107. mindspore/device_context/gpu/device.py +70 -0
  108. mindspore/device_context/gpu/op_precision.py +67 -0
  109. mindspore/device_context/gpu/op_tuning.py +175 -0
  110. mindspore/device_manager.py +170 -0
  111. mindspore/experimental/es/embedding_service.py +35 -27
  112. mindspore/experimental/llm_boost/__init__.py +1 -0
  113. mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
  114. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
  115. mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
  116. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  117. mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
  118. mindspore/experimental/llm_boost/register.py +1 -0
  119. mindspore/experimental/map_parameter.py +4 -4
  120. mindspore/experimental/optim/adadelta.py +6 -6
  121. mindspore/experimental/optim/adagrad.py +4 -4
  122. mindspore/experimental/optim/adam.py +7 -0
  123. mindspore/experimental/optim/adamax.py +4 -4
  124. mindspore/experimental/optim/adamw.py +4 -0
  125. mindspore/experimental/optim/asgd.py +1 -1
  126. mindspore/experimental/optim/lr_scheduler.py +73 -46
  127. mindspore/experimental/optim/radam.py +34 -31
  128. mindspore/experimental/optim/rprop.py +1 -1
  129. mindspore/experimental/optim/sgd.py +1 -1
  130. mindspore/hal/contiguous_tensors_handle.py +6 -10
  131. mindspore/hal/device.py +55 -53
  132. mindspore/hal/event.py +52 -52
  133. mindspore/hal/memory.py +157 -117
  134. mindspore/hal/stream.py +150 -109
  135. mindspore/include/api/context.h +0 -1
  136. mindspore/include/dataset/constants.h +7 -4
  137. mindspore/include/dataset/execute.h +2 -2
  138. mindspore/jpeg62.dll +0 -0
  139. mindspore/log.py +50 -0
  140. mindspore/mindrecord/__init__.py +21 -8
  141. mindspore/mindrecord/config.py +17 -316
  142. mindspore/mindrecord/filereader.py +1 -9
  143. mindspore/mindrecord/filewriter.py +5 -15
  144. mindspore/mindrecord/mindpage.py +1 -9
  145. mindspore/mindspore_backend_common.dll +0 -0
  146. mindspore/mindspore_backend_manager.dll +0 -0
  147. mindspore/mindspore_common.dll +0 -0
  148. mindspore/mindspore_core.dll +0 -0
  149. mindspore/mindspore_dump.dll +0 -0
  150. mindspore/mindspore_frontend.dll +0 -0
  151. mindspore/mindspore_memory_pool.dll +0 -0
  152. mindspore/mindspore_ms_backend.dll +0 -0
  153. mindspore/mindspore_ops.dll +0 -0
  154. mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
  155. mindspore/mindspore_ops_kernel_common.dll +0 -0
  156. mindspore/mindspore_profiler.dll +0 -0
  157. mindspore/mindspore_pyboost.dll +0 -0
  158. mindspore/mindspore_pynative.dll +0 -0
  159. mindspore/mindspore_res_manager.dll +0 -0
  160. mindspore/mindspore_runtime_pipeline.dll +0 -0
  161. mindspore/mint/__init__.py +796 -759
  162. mindspore/mint/distributed/__init__.py +70 -4
  163. mindspore/mint/distributed/distributed.py +2679 -44
  164. mindspore/mint/linalg/__init__.py +8 -0
  165. mindspore/mint/nn/__init__.py +743 -22
  166. mindspore/mint/nn/functional.py +716 -23
  167. mindspore/mint/nn/layer/__init__.py +21 -4
  168. mindspore/mint/nn/layer/_functions.py +334 -0
  169. mindspore/mint/nn/layer/activation.py +276 -1
  170. mindspore/mint/nn/layer/basic.py +123 -0
  171. mindspore/mint/nn/layer/conv.py +921 -0
  172. mindspore/mint/nn/layer/normalization.py +223 -28
  173. mindspore/mint/nn/layer/padding.py +797 -0
  174. mindspore/mint/nn/layer/pooling.py +235 -0
  175. mindspore/mint/optim/__init__.py +3 -1
  176. mindspore/mint/optim/adam.py +223 -0
  177. mindspore/mint/optim/adamw.py +26 -19
  178. mindspore/mint/optim/sgd.py +171 -0
  179. mindspore/mint/special/__init__.py +2 -1
  180. mindspore/multiprocessing/__init__.py +5 -0
  181. mindspore/nn/__init__.py +4 -1
  182. mindspore/nn/cell.py +1370 -189
  183. mindspore/nn/dynamic_lr.py +2 -1
  184. mindspore/nn/layer/activation.py +29 -27
  185. mindspore/nn/layer/basic.py +51 -35
  186. mindspore/nn/layer/channel_shuffle.py +3 -3
  187. mindspore/nn/layer/container.py +1 -1
  188. mindspore/nn/layer/conv.py +22 -17
  189. mindspore/nn/layer/embedding.py +12 -11
  190. mindspore/nn/layer/normalization.py +56 -49
  191. mindspore/nn/layer/padding.py +4 -3
  192. mindspore/nn/layer/pooling.py +120 -42
  193. mindspore/nn/layer/rnn_cells.py +1 -1
  194. mindspore/nn/layer/rnns.py +2 -1
  195. mindspore/nn/layer/timedistributed.py +5 -5
  196. mindspore/nn/layer/transformer.py +59 -36
  197. mindspore/nn/learning_rate_schedule.py +8 -4
  198. mindspore/nn/loss/loss.py +58 -55
  199. mindspore/nn/optim/ada_grad.py +7 -5
  200. mindspore/nn/optim/adadelta.py +11 -9
  201. mindspore/nn/optim/adafactor.py +1 -1
  202. mindspore/nn/optim/adam.py +17 -13
  203. mindspore/nn/optim/adamax.py +8 -7
  204. mindspore/nn/optim/adasum.py +5 -5
  205. mindspore/nn/optim/asgd.py +1 -1
  206. mindspore/nn/optim/ftrl.py +11 -9
  207. mindspore/nn/optim/lamb.py +1 -1
  208. mindspore/nn/optim/lars.py +1 -4
  209. mindspore/nn/optim/lazyadam.py +12 -10
  210. mindspore/nn/optim/momentum.py +7 -6
  211. mindspore/nn/optim/optimizer.py +3 -3
  212. mindspore/nn/optim/proximal_ada_grad.py +12 -10
  213. mindspore/nn/optim/rmsprop.py +13 -12
  214. mindspore/nn/optim/rprop.py +11 -9
  215. mindspore/nn/optim/sgd.py +9 -6
  216. mindspore/nn/optim/tft_wrapper.py +5 -2
  217. mindspore/nn/optim/thor.py +2 -1
  218. mindspore/nn/probability/bijector/bijector.py +17 -11
  219. mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
  220. mindspore/nn/probability/bijector/invert.py +2 -2
  221. mindspore/nn/probability/bijector/scalar_affine.py +3 -3
  222. mindspore/nn/probability/bijector/softplus.py +3 -2
  223. mindspore/nn/probability/distribution/beta.py +3 -3
  224. mindspore/nn/probability/distribution/categorical.py +1 -1
  225. mindspore/nn/probability/distribution/cauchy.py +4 -2
  226. mindspore/nn/probability/distribution/exponential.py +6 -7
  227. mindspore/nn/probability/distribution/gamma.py +2 -2
  228. mindspore/nn/probability/distribution/gumbel.py +2 -2
  229. mindspore/nn/probability/distribution/half_normal.py +5 -3
  230. mindspore/nn/probability/distribution/logistic.py +5 -3
  231. mindspore/nn/probability/distribution/poisson.py +1 -1
  232. mindspore/nn/probability/distribution/uniform.py +5 -3
  233. mindspore/nn/reinforcement/_tensors_queue.py +1 -1
  234. mindspore/nn/reinforcement/tensor_array.py +1 -1
  235. mindspore/nn/utils/init.py +13 -11
  236. mindspore/nn/wrap/__init__.py +6 -6
  237. mindspore/nn/wrap/cell_wrapper.py +181 -122
  238. mindspore/nn/wrap/grad_reducer.py +45 -36
  239. mindspore/nn/wrap/loss_scale.py +6 -7
  240. mindspore/numpy/array_creations.py +63 -65
  241. mindspore/numpy/array_ops.py +149 -144
  242. mindspore/numpy/logic_ops.py +41 -42
  243. mindspore/numpy/math_ops.py +365 -363
  244. mindspore/numpy/utils.py +17 -18
  245. mindspore/numpy/utils_const.py +5 -6
  246. mindspore/opencv_core452.dll +0 -0
  247. mindspore/opencv_imgcodecs452.dll +0 -0
  248. mindspore/opencv_imgproc452.dll +0 -0
  249. mindspore/ops/__init__.py +5 -3
  250. mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
  251. mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
  252. mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
  253. mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
  254. mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
  255. mindspore/ops/_op_impl/cpu/__init__.py +1 -0
  256. mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
  257. mindspore/ops/_register_for_op.py +0 -11
  258. mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
  259. mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
  260. mindspore/ops/_vmap/vmap_array_ops.py +27 -25
  261. mindspore/ops/_vmap/vmap_base.py +0 -2
  262. mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
  263. mindspore/ops/_vmap/vmap_math_ops.py +15 -16
  264. mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
  265. mindspore/ops/auto_generate/__init__.py +4 -3
  266. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +236 -46
  267. mindspore/ops/auto_generate/gen_extend_func.py +764 -124
  268. mindspore/ops/auto_generate/gen_ops_def.py +4018 -2264
  269. mindspore/ops/auto_generate/gen_ops_prim.py +15463 -5037
  270. mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
  271. mindspore/ops/composite/__init__.py +2 -1
  272. mindspore/ops/composite/base.py +20 -25
  273. mindspore/ops/composite/math_ops.py +6 -16
  274. mindspore/ops/composite/multitype_ops/__init__.py +5 -2
  275. mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
  276. mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
  277. mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
  278. mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
  279. mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
  280. mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
  281. mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
  282. mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
  283. mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
  284. mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
  285. mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
  286. mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
  287. mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
  288. mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
  289. mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
  290. mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
  291. mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
  292. mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
  293. mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
  294. mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
  295. mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
  296. mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
  297. mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
  298. mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
  299. mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
  300. mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
  301. mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
  302. mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
  303. mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
  304. mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
  305. mindspore/ops/function/__init__.py +40 -2
  306. mindspore/ops/function/_add_attr_func.py +58 -0
  307. mindspore/ops/function/array_func.py +2089 -2403
  308. mindspore/ops/function/clip_func.py +80 -23
  309. mindspore/ops/function/debug_func.py +57 -57
  310. mindspore/ops/function/grad/__init__.py +1 -0
  311. mindspore/ops/function/grad/grad_func.py +104 -71
  312. mindspore/ops/function/image_func.py +2 -2
  313. mindspore/ops/function/linalg_func.py +47 -78
  314. mindspore/ops/function/math_func.py +4501 -3802
  315. mindspore/ops/function/nn_func.py +1726 -620
  316. mindspore/ops/function/other_func.py +159 -1
  317. mindspore/ops/function/parameter_func.py +18 -84
  318. mindspore/ops/function/random_func.py +440 -387
  319. mindspore/ops/function/reshard_func.py +4 -70
  320. mindspore/ops/function/sparse_func.py +3 -3
  321. mindspore/ops/function/sparse_unary_func.py +6 -6
  322. mindspore/ops/function/spectral_func.py +25 -58
  323. mindspore/ops/function/vmap_func.py +24 -17
  324. mindspore/ops/functional.py +22 -7
  325. mindspore/ops/functional_overload.py +1440 -0
  326. mindspore/ops/op_info_register.py +32 -244
  327. mindspore/ops/operations/__init__.py +13 -7
  328. mindspore/ops/operations/_custom_ops_utils.py +247 -0
  329. mindspore/ops/operations/_embedding_cache_ops.py +4 -4
  330. mindspore/ops/operations/_grad_ops.py +2 -43
  331. mindspore/ops/operations/_infer_ops.py +2 -1
  332. mindspore/ops/operations/_inner_ops.py +43 -84
  333. mindspore/ops/operations/_ms_kernel.py +4 -10
  334. mindspore/ops/operations/_rl_inner_ops.py +1 -1
  335. mindspore/ops/operations/_scalar_ops.py +3 -2
  336. mindspore/ops/operations/_sequence_ops.py +1 -1
  337. mindspore/ops/operations/_tensor_array.py +1 -1
  338. mindspore/ops/operations/array_ops.py +81 -324
  339. mindspore/ops/operations/comm_ops.py +154 -108
  340. mindspore/ops/operations/custom_ops.py +232 -78
  341. mindspore/ops/operations/debug_ops.py +153 -59
  342. mindspore/ops/operations/inner_ops.py +7 -5
  343. mindspore/ops/operations/linalg_ops.py +1 -57
  344. mindspore/ops/operations/manually_defined/_inner.py +1 -1
  345. mindspore/ops/operations/manually_defined/ops_def.py +928 -180
  346. mindspore/ops/operations/math_ops.py +32 -234
  347. mindspore/ops/operations/nn_ops.py +210 -498
  348. mindspore/ops/operations/other_ops.py +62 -9
  349. mindspore/ops/operations/random_ops.py +13 -7
  350. mindspore/ops/operations/reshard_ops.py +1 -1
  351. mindspore/ops/operations/sparse_ops.py +2 -2
  352. mindspore/ops/primitive.py +66 -53
  353. mindspore/ops/tensor_method.py +1888 -0
  354. mindspore/ops_generate/__init__.py +0 -5
  355. mindspore/ops_generate/aclnn/__init__.py +0 -0
  356. mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
  357. mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
  358. mindspore/ops_generate/api/__init__.py +0 -0
  359. mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
  360. mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
  361. mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
  362. mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
  363. mindspore/ops_generate/api/functions_cc_generator.py +237 -0
  364. mindspore/ops_generate/api/gen_api.py +103 -0
  365. mindspore/ops_generate/api/op_api_proto.py +235 -0
  366. mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
  367. mindspore/ops_generate/common/__init__.py +0 -0
  368. mindspore/ops_generate/common/base_generator.py +11 -0
  369. mindspore/ops_generate/common/gen_constants.py +91 -0
  370. mindspore/ops_generate/common/gen_utils.py +348 -0
  371. mindspore/ops_generate/common/op_proto.py +473 -0
  372. mindspore/ops_generate/common/template.py +523 -0
  373. mindspore/ops_generate/gen_ops.py +22 -1069
  374. mindspore/ops_generate/op_def/__init__.py +0 -0
  375. mindspore/ops_generate/op_def/gen_op_def.py +90 -0
  376. mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
  377. mindspore/ops_generate/op_def/ops_def_cc_generator.py +299 -0
  378. mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
  379. mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
  380. mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
  381. mindspore/ops_generate/op_def_py/__init__.py +0 -0
  382. mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
  383. mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
  384. mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
  385. mindspore/ops_generate/pyboost/__init__.py +0 -0
  386. mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
  387. mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
  388. mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
  389. mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
  390. mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
  391. mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
  392. mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
  393. mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
  394. mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
  395. mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
  396. mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
  397. mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
  398. mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
  399. mindspore/ops_generate/resources/__init__.py +0 -0
  400. mindspore/ops_generate/resources/resource_list.py +30 -0
  401. mindspore/ops_generate/resources/resource_loader.py +36 -0
  402. mindspore/ops_generate/resources/resource_manager.py +64 -0
  403. mindspore/ops_generate/resources/yaml_loader.py +88 -0
  404. mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
  405. mindspore/parallel/__init__.py +7 -3
  406. mindspore/parallel/_auto_parallel_context.py +152 -34
  407. mindspore/parallel/_cell_wrapper.py +130 -15
  408. mindspore/parallel/_parallel_serialization.py +107 -5
  409. mindspore/parallel/_ps_context.py +1 -1
  410. mindspore/parallel/_recovery_context.py +7 -2
  411. mindspore/parallel/_tensor.py +142 -18
  412. mindspore/parallel/_utils.py +199 -23
  413. mindspore/parallel/algo_parameter_config.py +4 -4
  414. mindspore/parallel/auto_parallel.py +732 -0
  415. mindspore/parallel/checkpoint_convert.py +159 -0
  416. mindspore/parallel/checkpoint_transform.py +698 -35
  417. mindspore/parallel/cluster/process_entity/_api.py +276 -50
  418. mindspore/parallel/cluster/process_entity/_utils.py +41 -6
  419. mindspore/parallel/cluster/run.py +21 -4
  420. mindspore/parallel/function/__init__.py +24 -0
  421. mindspore/parallel/function/reshard_func.py +259 -0
  422. mindspore/parallel/nn/__init__.py +25 -0
  423. mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
  424. mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
  425. mindspore/parallel/parameter_broadcast.py +25 -14
  426. mindspore/parallel/shard.py +137 -58
  427. mindspore/parallel/transform_safetensors.py +363 -305
  428. mindspore/profiler/__init__.py +22 -5
  429. mindspore/profiler/analysis/__init__.py +0 -0
  430. mindspore/profiler/analysis/parser/__init__.py +0 -0
  431. mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
  432. mindspore/profiler/analysis/parser/base_parser.py +158 -0
  433. mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
  434. mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
  435. mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
  436. mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
  437. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
  438. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
  439. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +106 -0
  440. mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
  441. mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
  442. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
  443. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
  444. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
  445. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
  446. mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
  447. mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
  448. mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
  449. mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
  450. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
  451. mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
  452. mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
  453. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
  454. mindspore/profiler/analysis/task_manager.py +131 -0
  455. mindspore/profiler/analysis/time_converter.py +84 -0
  456. mindspore/profiler/analysis/viewer/__init__.py +0 -0
  457. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
  458. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
  459. mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
  460. mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
  461. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
  462. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
  463. mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
  464. mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
  465. mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
  466. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
  467. mindspore/profiler/analysis/work_flow.py +73 -0
  468. mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
  469. mindspore/profiler/common/command_executor.py +90 -0
  470. mindspore/profiler/common/constant.py +186 -3
  471. mindspore/profiler/common/file_manager.py +208 -0
  472. mindspore/profiler/common/log.py +130 -0
  473. mindspore/profiler/common/msprof_cmd_tool.py +221 -0
  474. mindspore/profiler/common/path_manager.py +395 -0
  475. mindspore/profiler/common/process_bar.py +168 -0
  476. mindspore/profiler/common/process_pool.py +9 -3
  477. mindspore/profiler/common/profiler_context.py +500 -0
  478. mindspore/profiler/common/profiler_info.py +304 -0
  479. mindspore/profiler/common/profiler_meta_data.py +74 -0
  480. mindspore/profiler/common/profiler_output_path.py +284 -0
  481. mindspore/profiler/common/profiler_parameters.py +251 -0
  482. mindspore/profiler/common/profiler_path_manager.py +179 -0
  483. mindspore/profiler/common/record_function.py +76 -0
  484. mindspore/profiler/common/tlv_decoder.py +76 -0
  485. mindspore/profiler/common/util.py +75 -2
  486. mindspore/profiler/dynamic_profiler.py +341 -75
  487. mindspore/profiler/envprofiler.py +163 -0
  488. mindspore/profiler/experimental_config.py +197 -0
  489. mindspore/profiler/mstx.py +242 -0
  490. mindspore/profiler/platform/__init__.py +21 -0
  491. mindspore/profiler/platform/base_profiler.py +40 -0
  492. mindspore/profiler/platform/cpu_profiler.py +124 -0
  493. mindspore/profiler/platform/gpu_profiler.py +74 -0
  494. mindspore/profiler/platform/npu_profiler.py +335 -0
  495. mindspore/profiler/profiler.py +1073 -90
  496. mindspore/profiler/profiler_action_controller.py +187 -0
  497. mindspore/profiler/profiler_interface.py +118 -0
  498. mindspore/profiler/schedule.py +243 -0
  499. mindspore/rewrite/api/node.py +15 -13
  500. mindspore/rewrite/api/symbol_tree.py +2 -3
  501. mindspore/run_check/_check_version.py +27 -20
  502. mindspore/run_check/run_check.py +1 -1
  503. mindspore/runtime/__init__.py +37 -0
  504. mindspore/runtime/device.py +27 -0
  505. mindspore/runtime/event.py +209 -0
  506. mindspore/runtime/executor.py +177 -0
  507. mindspore/runtime/memory.py +409 -0
  508. mindspore/runtime/stream.py +460 -0
  509. mindspore/runtime/thread_bind_core.py +401 -0
  510. mindspore/safeguard/rewrite_obfuscation.py +12 -9
  511. mindspore/swresample-4.dll +0 -0
  512. mindspore/swscale-6.dll +0 -0
  513. mindspore/tinyxml2.dll +0 -0
  514. mindspore/train/__init__.py +8 -8
  515. mindspore/train/_utils.py +88 -25
  516. mindspore/train/amp.py +9 -5
  517. mindspore/train/callback/__init__.py +2 -2
  518. mindspore/train/callback/_callback.py +2 -16
  519. mindspore/train/callback/_checkpoint.py +53 -55
  520. mindspore/train/callback/_cluster_monitor.py +14 -18
  521. mindspore/train/callback/_early_stop.py +1 -1
  522. mindspore/train/callback/_flops_collector.py +103 -68
  523. mindspore/train/callback/_history.py +8 -5
  524. mindspore/train/callback/_lambda_callback.py +2 -2
  525. mindspore/train/callback/_landscape.py +0 -3
  526. mindspore/train/callback/_loss_monitor.py +2 -1
  527. mindspore/train/callback/_on_request_exit.py +6 -5
  528. mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
  529. mindspore/train/callback/_summary_collector.py +52 -19
  530. mindspore/train/callback/_time_monitor.py +2 -1
  531. mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +204 -107
  532. mindspore/train/data_sink.py +25 -2
  533. mindspore/train/dataset_helper.py +15 -16
  534. mindspore/train/loss_scale_manager.py +8 -7
  535. mindspore/train/metrics/accuracy.py +3 -3
  536. mindspore/train/metrics/confusion_matrix.py +9 -9
  537. mindspore/train/metrics/error.py +3 -3
  538. mindspore/train/metrics/hausdorff_distance.py +4 -4
  539. mindspore/train/metrics/mean_surface_distance.py +3 -3
  540. mindspore/train/metrics/metric.py +0 -12
  541. mindspore/train/metrics/occlusion_sensitivity.py +4 -2
  542. mindspore/train/metrics/precision.py +11 -10
  543. mindspore/train/metrics/recall.py +9 -9
  544. mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
  545. mindspore/train/mind_ir_pb2.py +174 -46
  546. mindspore/train/model.py +184 -113
  547. mindspore/train/serialization.py +622 -978
  548. mindspore/train/summary/_summary_adapter.py +2 -2
  549. mindspore/train/summary/summary_record.py +2 -3
  550. mindspore/train/train_thor/model_thor.py +1 -1
  551. mindspore/turbojpeg.dll +0 -0
  552. mindspore/utils/__init__.py +6 -3
  553. mindspore/utils/dryrun.py +140 -0
  554. mindspore/utils/hooks.py +81 -0
  555. mindspore/utils/runtime_execution_order_check.py +550 -0
  556. mindspore/utils/utils.py +138 -4
  557. mindspore/version.py +1 -1
  558. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +3 -3
  559. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +562 -393
  560. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +1 -1
  561. mindspore/_install_custom.py +0 -43
  562. mindspore/common/_register_for_adapter.py +0 -74
  563. mindspore/common/_tensor_overload.py +0 -139
  564. mindspore/mindspore_np_dtype.dll +0 -0
  565. mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
  566. mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
  567. mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
  568. mindspore/ops_generate/gen_aclnn_implement.py +0 -263
  569. mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
  570. mindspore/ops_generate/gen_pyboost_func.py +0 -1052
  571. mindspore/ops_generate/gen_utils.py +0 -209
  572. mindspore/ops_generate/op_proto.py +0 -145
  573. mindspore/ops_generate/template.py +0 -261
  574. mindspore/profiler/envprofiling.py +0 -254
  575. mindspore/profiler/profiling.py +0 -1926
  576. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
  577. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
@@ -31,14 +31,13 @@ from mindspore.common.hook_handle import _TensorHookHandle
31
31
 
32
32
  from mindspore.common._utils import get_slice_num
33
33
  from mindspore.common._register_for_tensor import tensor_operator_registry
34
- from mindspore.common._tensor_overload import (repeat_interleave_mint, add_mint, item_mint, isnan_mint, flatten_mint,
35
- max_mint, mean_mint, min_mint, split_mint, sub_mint)
36
- from mindspore._c_expression import Tensor as Tensor_
34
+ from mindspore._c_expression import TensorPy as TensorPy_
37
35
  from mindspore import _checkparam as validator
38
- from mindspore._checkparam import check_is_number, is_stub_tensor, check_hook_fn
36
+ from mindspore._checkparam import is_stub_tensor, check_hook_fn
39
37
  from mindspore._check_jit_forbidden_api import jit_forbidden_register
40
38
  from mindspore.common.symbol import Symbol
41
39
 
40
+
42
41
  np_types = (np.int8, np.int16, np.int32, np.int64,
43
42
  np.uint8, np.uint16, np.uint32, np.uint64, np.float16,
44
43
  np.float32, np.float64, np.bool_, np.complex64, np.complex128)
@@ -46,8 +45,8 @@ np_types = (np.int8, np.int16, np.int32, np.int64,
46
45
 
47
46
  def _check_input_data_type(input_data):
48
47
  """Check the type of input_data for Tensor"""
49
- validator.check_value_type('input_data', input_data,
50
- (Tensor_, Tensor, np.ndarray, np.str_, list, tuple, float, int, bool, complex),
48
+ validator.check_value_type('input_data', input_data, (TensorPy_, Tensor, np.ndarray, np.str_, list, tuple, float,
49
+ int, bool, complex, bytes),
51
50
  'Tensor')
52
51
  valid_dtypes = (np.int8, np.int16, np.int32, np.int64, np.uint8, np.uint16, np.uint32, np.uint64,
53
52
  np.float16, np.float32, np.float64, np.bool_, np.str_, np.complex64, np.complex128)
@@ -73,13 +72,116 @@ def _check_input_data_type(input_data):
73
72
  f"For Tensor, the input_data is {input_data} that contain unsupported element.")
74
73
 
75
74
 
76
- class _TensorMeta(type(Tensor_), abc.ABCMeta):
75
+ def _set_symbolic_shape(shape):
76
+ """Set symbolic_shape"""
77
+ symbolic_shape = None
78
+ if shape is None:
79
+ return None, None
80
+ if isinstance(shape, numbers.Number):
81
+ shape = (shape,)
82
+ symbolic_shape = None
83
+ return shape, symbolic_shape
84
+ if isinstance(shape, Symbol):
85
+ symbolic_shape = [shape]
86
+ shape = (None,)
87
+ return shape, symbolic_shape
88
+ if isinstance(shape, (list, tuple)) and any(isinstance(s, Symbol) for s in shape):
89
+ symbolic_shape = [item.to_dict() if isinstance(item, Symbol) else item for item in shape]
90
+ shape_without_symbol = (None if isinstance(item, Symbol) else item for item in shape)
91
+ shape = list(shape_without_symbol) if isinstance(shape, list) else tuple(shape_without_symbol)
92
+ return shape, symbolic_shape
93
+ return shape, symbolic_shape
94
+
95
+
96
+ def _convert_stub_tensor(input_data):
97
+ """Convert input to stub tensor"""
98
+ if not is_stub_tensor(input_data):
99
+ return input_data
100
+ return input_data.stub_sync()
101
+
102
+
103
+ def _convert_numpy_array(input_data):
104
+ """Convert inpyt to numpy array"""
105
+ if not isinstance(input_data, np_types):
106
+ return input_data
107
+ return np.array(input_data)
108
+
109
+
110
+ def _check_device(device):
111
+ """Check device"""
112
+ if device is not None and device != "CPU":
113
+ raise ValueError(f"Only 'CPU' is supported for device, but got {device}.")
114
+
115
+
116
+ def _set_default_dtype(input_data, dtype):
117
+ """Set tensor default dtype"""
118
+ if isinstance(input_data, (float, list, tuple)):
119
+ if np.array(input_data).dtype == np.float64:
120
+ return mstype.float32
121
+ if isinstance(input_data, (int, list, tuple)):
122
+ if np.array(input_data).dtype in (np.int32, np.int64):
123
+ return mstype.int64
124
+ return dtype
125
+
126
+
127
+ def _set_dtype(input_data, dtype):
128
+ """Set and check dtype"""
129
+ if dtype is not None:
130
+ validator.check_type_name('dtype', dtype, mstype.number_type + (mstype.bool_, mstype.string), "Tensor")
131
+ return dtype
132
+ return _set_default_dtype(input_data, dtype)
133
+
134
+
135
+ def _init(input_data=None, dtype=None, shape=None, init=None, const_arg=False, device=None):
77
136
  """
78
- Meta class for Tensor. Used internally.
137
+ Verifying parameters. Will sink to C++
79
138
  """
139
+ validator.check_value_type('const_arg', const_arg, bool, 'Tensor')
140
+ _check_device(device)
141
+
142
+ if isinstance(input_data, (Tensor, TensorPy_)) and dtype is not None:
143
+ logger.info("It is suggested to use 'Tensor.astype()' to convert the dtype of a Tensor.")
144
+ _cast = tensor_operator_registry.get("cast")
145
+ input_data = _cast(input_data, dtype)
146
+
147
+ input_data = _convert_stub_tensor(input_data)
148
+
149
+ if input_data is None and shape is None and init is None and dtype is not None:
150
+ validator.check_type_name('dtype', dtype, mstype.number_type + (mstype.bool_, mstype.string), "Tensor")
151
+ logger.warning(f"For 'Tensor', if 'dtype' is not None, 'input_data', 'shape' or 'init' must not be None.")
152
+ return {"dtype": dtype, "shape": [-2], "init": init, "const_arg": const_arg, "device": device}
153
+
154
+ # If input data is numpy number, convert it to np array
155
+ input_data = _convert_numpy_array(input_data)
156
+ shape, symbolic_shape = _set_symbolic_shape(shape)
157
+ _check_tensor_input(input_data, dtype, shape, init)
158
+
159
+ # If input_data is tuple/list/numpy.ndarray, it's support in check_type method.
160
+ if (isinstance(shape, (list, tuple)) and None in shape) or init is not None:
161
+ shape = _check_tensor_dynamic_shape(dtype, shape, init)
162
+ return {"dtype": dtype, "shape": shape, "init": init, "const_arg": const_arg, "device": device,
163
+ "symbolic_shape": symbolic_shape}
164
+
165
+ if input_data is None and dtype is not None and shape is not None:
166
+ validator.check_type_name('dtype', dtype, mstype.number_type + (mstype.bool_, mstype.string), "Tensor")
167
+ return {"dtype": dtype, "shape": shape, "init": init, "const_arg": const_arg, "device": device,
168
+ "symbolic_shape": symbolic_shape}
169
+
170
+ _check_input_data_type(input_data)
171
+ dtype = _set_dtype(input_data, dtype)
172
+
173
+ if isinstance(input_data, np.ndarray) and (not input_data.flags['FORC']):
174
+ input_data = np.ascontiguousarray(input_data)
80
175
 
176
+ if dtype is not None:
177
+ return {"input_data": input_data, "dtype": dtype, "init": init, "const_arg": const_arg, "device": device,
178
+ "symbolic_shape": symbolic_shape}
81
179
 
82
- def tensor(input_data=None, dtype=None, shape=None, init=None, internal=False, const_arg=False):
180
+ return {"input_data": input_data, "init": init, "const_arg": const_arg, "device": device,
181
+ "symbolic_shape": symbolic_shape}
182
+
183
+
184
+ def tensor(input_data=None, dtype=None, shape=None, init=None, const_arg=False):
83
185
  """
84
186
  Create a new Tensor in Cell.construct() or function decorated by @jit.
85
187
 
@@ -87,11 +189,11 @@ def tensor(input_data=None, dtype=None, shape=None, init=None, internal=False, c
87
189
  based on the `dtype` argument.
88
190
 
89
191
  Please refer to `Creating and Using Tensor
90
- <https://www.mindspore.cn/docs/en/master/model_train/program_form/static_graph.html#mindspore-user-defined-data-types>`_ .
192
+ <https://www.mindspore.cn/tutorials/en/master/compile/static_graph.html#mindspore-user-defined-data-types>`_ .
91
193
 
92
194
  The difference between it and the Tensor class is that it adds
93
195
  `Annotation
94
- <https://www.mindspore.cn/docs/en/master/model_train/program_form/static_graph.html#annotation-type>`_
196
+ <https://www.mindspore.cn/tutorials/en/master/compile/static_graph.html#annotation-type>`_
95
197
  which can prevent the generation of AnyType compared to the Tensor class.
96
198
 
97
199
  The arguments and return values are the same as the Tensor class. Also see: :class:`mindspore.Tensor`.
@@ -111,20 +213,29 @@ def tensor(input_data=None, dtype=None, shape=None, init=None, internal=False, c
111
213
  >>> print(y)
112
214
  [1. 2. 3.]
113
215
  """
114
- return Tensor(input_data, dtype, shape, init, internal, const_arg) # @jit.typing: () -> tensor_type[{dtype}]
216
+ return Tensor(input_data, dtype, shape, init, const_arg) # @jit.typing: () -> tensor_type[{dtype}]
217
+
218
+
219
+ class _TensorMeta(abc.ABCMeta, type(TensorPy_)):
220
+ """
221
+ Meta class for Tensor. Used internally.
222
+ """
115
223
 
116
224
 
117
- class Tensor(Tensor_, metaclass=_TensorMeta):
225
+ class Tensor(TensorPy_, metaclass=_TensorMeta):
118
226
  """
119
227
  Tensor is a data structure that stores an n-dimensional array.
120
228
 
121
229
  Note:
122
- If `init` interface is used to initialize `Tensor`, the `Tensor.init_data` API needs to be called to load the
123
- actual data to `Tensor`.
230
+ - If `init` interface is used to initialize `Tensor`, the `Tensor.init_data` API needs to be called to load the
231
+ actual data to `Tensor`.
232
+ - All modes of CPU and GPU, and Atlas training series with `graph mode (mode=mindspore.GRAPH_MODE)
233
+ <https://www.mindspore.cn/tutorials/en/master/compile/static_graph.html>`_ do not supported
234
+ in-place operations yet.
124
235
 
125
236
  Warning:
126
- To convert dtype of a `Tensor`, it is recommended to use `Tensor.astype()` rather than
127
- `Tensor(sourceTensor, dtype=newDtype)`.
237
+ To convert dtype of a `Tensor`, it is recommended to use `Tensor.astype()` rather than
238
+ `Tensor(sourceTensor, dtype=newDtype)`.
128
239
 
129
240
  Args:
130
241
  input_data (Union[Tensor, float, int, bool, tuple, list, numpy.ndarray]): The data to be stored. It can be
@@ -139,10 +250,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
139
250
  init (Initializer): The information of init data.
140
251
  `init` is used for delayed initialization in parallel mode, when using init, `dtype` and `shape` must be
141
252
  set. Default: ``None`` .
142
- internal (bool): Whether it is created by the framework.
143
- ``'True'`` means that the tensor is created by framework.
144
- ``'False'`` means that the tensor is created by user.
145
- Default: ``False`` .
146
253
  const_arg (bool): Whether the tensor is a constant when it is used for the argument of a network.
147
254
  Default: ``False`` .
148
255
  device(str): This parameter is reserved and does not need to be configured.
@@ -153,8 +260,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
153
260
 
154
261
  Note:
155
262
  The default value ``None`` of `input_data` works as a placeholder,
156
- it does not mean that we can create a NoneType
157
- Tensor.
263
+ it does not mean that we can create a NoneType Tensor.
158
264
  Tensor with `shape` contains 0 is not fully tested and supported.
159
265
 
160
266
  Examples:
@@ -209,89 +315,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
209
315
  """
210
316
  delta_seed = 0
211
317
 
212
- def __init__(self, input_data=None, dtype=None, shape=None, init=None, internal=False, const_arg=False,
213
- device=None):
214
- self.init_finished = False
215
- if isinstance(input_data, (Tensor, Tensor_)) and dtype is not None:
216
- logger.info("It is suggested to use 'Tensor.astype()' to convert the dtype of a Tensor.")
217
- _cast = tensor_operator_registry.get("cast")
218
- input_data = _cast(input_data, dtype)
219
-
220
- if is_stub_tensor(input_data):
221
- input_data = input_data.stub_sync()
222
-
223
- if internal:
224
- if input_data is not None:
225
- Tensor_.__init__(self, input_data)
226
- else:
227
- if input_data is None and shape is None and init is None and dtype is not None:
228
- validator.check_type_name('dtype', dtype, mstype.number_type +
229
- (mstype.bool_, mstype.string), "Tensor")
230
- Tensor_.__init__(self, dtype, [-2])
231
- logger.warning(f"For 'Tensor', if 'dtype' is not None, 'input_data', 'shape' "
232
- f"or 'init' must not be None.")
233
- else:
234
- # If input data is numpy number, convert it to np array
235
- if isinstance(input_data, np_types):
236
- input_data = np.array(input_data)
237
-
238
- if shape is not None:
239
- if isinstance(shape, numbers.Number):
240
- shape = (shape,)
241
- elif isinstance(shape, Symbol):
242
- self.symbolic_shape = [shape]
243
- shape = (None,)
244
- elif isinstance(shape, (list, tuple)) and any(isinstance(s, Symbol) for s in shape):
245
- self.symbolic_shape = [item.to_dict() if isinstance(item, Symbol) else item for item in shape]
246
- shape_without_symbol = (None if isinstance(item, Symbol) else item for item in shape)
247
- shape = list(shape_without_symbol) if isinstance(shape, list) else tuple(shape_without_symbol)
248
-
249
- _check_tensor_input(input_data, dtype, shape, init)
250
-
251
- # If input_data is tuple/list/numpy.ndarray, it's support in check_type method.
252
- if (isinstance(shape, (list, tuple)) and None in shape) or init is not None:
253
- shape = _check_tensor_dynamic_shape(dtype, shape, init)
254
- Tensor_.__init__(self, dtype, shape)
255
- else:
256
- _check_input_data_type(input_data)
257
- if dtype is not None:
258
- validator.check_type_name('dtype', dtype, mstype.number_type +
259
- (mstype.bool_, mstype.string), "Tensor")
260
- else:
261
- dtype = self._set_default_dtype(input_data, dtype)
262
-
263
- if isinstance(input_data, np.ndarray) and (not input_data.flags['FORC']):
264
- input_data = np.ascontiguousarray(input_data)
265
-
266
- if dtype is not None:
267
- Tensor_.__init__(self, input_data, dtype)
268
- else:
269
- Tensor_.__init__(self, input_data)
270
- validator.check_value_type('const_arg', const_arg, bool, 'Tensor')
271
-
272
- if device is not None and device != "CPU":
273
- raise ValueError(f"Only 'CPU' is supported for device, but got {device}.")
274
-
275
- self.const_arg = const_arg
276
- self.virtual_flag = False
277
- self.init = init
278
- self.init_finished = True
279
-
280
- # if cur Tensor is a index value of another Tensor,
281
- # parent_tensor_ set to another Tensor
282
- # index_of_parent_ will set to the index
283
- self.parent_tensor_ = None
284
- self.index_of_parent_ = None
285
-
286
- self.slice_num_of_persistent_data_ = None
287
- self.slice_shape_of_persistent_data_ = None
288
-
289
- # the auto gradient information
290
- self._grad = None
291
- self._grad_fn = None
292
- self._requires_grad = False
293
- self._retain_grad = False
294
-
295
318
  @classmethod
296
319
  def __subclasshook__(cls, sub):
297
320
  """
@@ -302,16 +325,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
302
325
  return True
303
326
  return NotImplemented
304
327
 
305
- @staticmethod
306
- def _set_default_dtype(input_data, dtype):
307
- """Set tensor default dtype"""
308
- if isinstance(input_data, (float, list, tuple)):
309
- if np.array(input_data).dtype == np.float64:
310
- return mstype.float32
311
- if isinstance(input_data, (int, list, tuple)):
312
- if np.array(input_data).dtype in (np.int32, np.int64):
313
- return mstype.int64
314
- return dtype
315
328
 
316
329
  def __deepcopy__(self, memodict):
317
330
  new_obj = Tensor(self)
@@ -322,8 +335,8 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
322
335
 
323
336
  def __repr__(self):
324
337
  if self.init_finished:
325
- Tensor_.data_sync(self, True)
326
- return Tensor_.__repr__(self)
338
+ TensorPy_.data_sync(self, True)
339
+ return TensorPy_.__repr__(self)
327
340
  return ''
328
341
 
329
342
  def __eq__(self, other):
@@ -352,12 +365,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
352
365
  return out
353
366
 
354
367
  def __bool__(self):
355
- data = self.asnumpy()
356
- if data.shape == ():
357
- return bool(data)
358
- if data.shape == (1,):
359
- return bool(data[0])
360
- raise ValueError("The truth value of an array with more than one element is ambiguous.")
368
+ return bool(self._item())
361
369
 
362
370
  @staticmethod
363
371
  def _convert_scalar_(data, func, message):
@@ -368,79 +376,50 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
368
376
  raise ValueError(message)
369
377
 
370
378
  def __int__(self):
371
- data = self.asnumpy()
372
- return self._convert_scalar_(data, int, "Only one element tensors can be converted to Python scalars")
379
+ try:
380
+ data = self._item()
381
+ return int(data)
382
+ except ValueError:
383
+ raise ValueError("Only one element tensors can be converted to Python scalars")
384
+
373
385
 
374
386
  def __float__(self):
375
- data = self.asnumpy()
376
- return self._convert_scalar_(data, float, "Only one element tensors can be converted to Python scalars")
387
+ try:
388
+ data = self._item()
389
+ return float(data)
390
+ except ValueError:
391
+ raise ValueError("Only one element tensors can be converted to Python scalars")
377
392
 
378
393
  def __index__(self):
379
- data = self.asnumpy()
380
- if data.dtype not in ["int8", "int16", "int32", "int64", "bool"]:
394
+ try:
395
+ data = self._item()
396
+ if not isinstance(data, (int, bool)):
397
+ raise ValueError
398
+ return int(data)
399
+ except ValueError:
381
400
  raise ValueError("Only integer tensors of a single element can be converted to an index.")
382
- return self._convert_scalar_(data, int,
383
- "Only integer tensors of a single element can be converted to an index.")
384
401
 
385
402
  def __pos__(self):
386
403
  return self
387
404
 
388
- def __abs__(self):
389
- return tensor_operator_registry.get('abs')(self)
390
-
391
- @add_mint
392
- def __add__(self, other):
393
- return tensor_operator_registry.get('__add__')(self, other)
394
-
395
- def __and__(self, other):
396
- if isinstance(other, (int, bool, float, Tensor)):
397
- return tensor_operator_registry.get('bitwise_and')(self, other)
398
- raise TypeError("Unsupported operand type(s) for &: 'Tensor' and '{}'".format(type(other)))
399
-
400
- def __xor__(self, other):
401
- if isinstance(other, (int, bool, float, Tensor)):
402
- return tensor_operator_registry.get('bitwise_xor')(self, other)
403
- raise TypeError("Unsupported operand type(s) for ^: 'Tensor' and '{}'".format(type(other)))
404
-
405
- def __or__(self, other):
406
- if isinstance(other, (int, bool, float, Tensor)):
407
- return tensor_operator_registry.get('bitwise_or')(self, other)
408
- raise TypeError("Unsupported operand type(s) for |: 'Tensor' and '{}'".format(type(other)))
409
-
410
405
  def __radd__(self, other):
411
406
  return self.__add__(other)
412
407
 
413
- def __iadd__(self, other):
414
- return self.__add__(other)
415
-
416
- @sub_mint
417
- def __sub__(self, other):
418
- return tensor_operator_registry.get('__sub__')(self, other)
419
-
420
408
  def __rsub__(self, other):
421
409
  return tensor_operator_registry.get('__sub__')(other, self)
422
410
 
423
- def __isub__(self, other):
424
- return self.__sub__(other)
425
-
426
411
  def __mul__(self, other):
427
412
  return tensor_operator_registry.get('__mul__')(self, other)
428
413
 
429
414
  def __rmul__(self, other):
430
415
  return self.__mul__(other)
431
416
 
432
- def __imul__(self, other):
433
- return self.__mul__(other)
434
-
435
417
  def __matmul__(self, other):
436
418
  return tensor_operator_registry.get('__matmul__')(self, other)
437
419
 
438
420
  def __rmatmul__(self, other):
439
421
  return tensor_operator_registry.get('__matmul__')(other, self)
440
422
 
441
- def __imatmul__(self, other):
442
- return self.__matmul__(other)
443
-
444
423
  def __truediv__(self, other):
445
424
  return tensor_operator_registry.get('__truediv__')(self, other)
446
425
 
@@ -456,9 +435,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
456
435
  def __imod__(self, other):
457
436
  return self.__mod__(other)
458
437
 
459
- def __pow__(self, other):
460
- return tensor_operator_registry.get('__pow__')(self, other)
461
-
462
438
  def __rpow__(self, other):
463
439
  return tensor_operator_registry.get('__rpow__')(self, other)
464
440
 
@@ -468,9 +444,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
468
444
  def __rfloordiv__(self, other):
469
445
  return tensor_operator_registry.get('__floordiv__')(other, self)
470
446
 
471
- def __ifloordiv__(self, other):
472
- return self.__floordiv__(other)
473
-
474
447
  def __lt__(self, other):
475
448
  out = tensor_operator_registry.get('__lt__')(self, other)
476
449
  return out
@@ -479,25 +452,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
479
452
  out = tensor_operator_registry.get('__le__')(self, other)
480
453
  return out
481
454
 
482
- def __getitem__(self, index):
483
- out = tensor_operator_registry.get('__getitem__')(self, index)
484
- if out is not self:
485
- out.parent_tensor_ = self
486
- out.index_of_parent_ = index
487
- return out
488
-
489
- def __setitem__(self, index, value):
490
- out = tensor_operator_registry.get('__setitem__')(self, index, value)
491
- if isinstance(out, tuple):
492
- if self.parent_tensor_ is not None and self.index_of_parent_ is not None:
493
- self.parent_tensor_.__setitem__(self.index_of_parent_, out[0])
494
- return self
495
- return self
496
- self.assign_value(out)
497
- if self.parent_tensor_ is not None and self.index_of_parent_ is not None:
498
- self.parent_tensor_.__setitem__(self.index_of_parent_, self)
499
- return self
500
-
501
455
  def __gt__(self, other):
502
456
  out = tensor_operator_registry.get('__gt__')(self, other)
503
457
  return out
@@ -519,7 +473,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
519
473
 
520
474
  def __getstate__(self):
521
475
  state = self.__dict__.copy()
522
- state["value"] = Tensor_.__getstate__(self)
476
+ state["value"] = TensorPy_.__getstate__(self)
523
477
  return state
524
478
 
525
479
  def __setstate__(self, state):
@@ -528,12 +482,96 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
528
482
  else:
529
483
  value = state.pop("value")
530
484
  self.__dict__.update(state)
531
- Tensor_.__setstate__(self, value)
485
+ TensorPy_.__setstate__(self, value)
486
+
487
+ def __array__(self, dtype=None):
488
+ """support create numpy array from tensor."""
489
+ if dtype is None:
490
+ return self.asnumpy()
491
+ return self.asnumpy().astype(dtype, copy=False)
492
+
493
+ def __contains__(self, element):
494
+ """support 'in' operator."""
495
+ if isinstance(element, (Tensor, numbers.Number)):
496
+ return (element == self).any().item()
497
+ return False
498
+
499
+ def _getitem_origin(self, index):
500
+ """__getitem__ origin process, called by TensorPy::TensorGetItem"""
501
+ out = tensor_operator_registry.get('_tensor_getitem_origin')(self, index)
502
+ if out is not self:
503
+ out.parent_tensor_ = self
504
+ out.index_of_parent_ = index
505
+ return out
506
+
507
+ def _setitem_origin(self, index, value):
508
+ """__setitem__ origin process, called by TensorPy::TensorSetItem"""
509
+ out = tensor_operator_registry.get('_tensor_setitem_origin')(self, index, value)
510
+ if isinstance(out, tuple):
511
+ if self.parent_tensor_ is not None and self.index_of_parent_ is not None:
512
+ self.parent_tensor_.__setitem__(self.index_of_parent_, out[0])
513
+ return self
514
+ return self
515
+ self.assign_value(out)
516
+ if self.parent_tensor_ is not None and self.index_of_parent_ is not None:
517
+ self.parent_tensor_.__setitem__(self.index_of_parent_, self)
518
+ return self
519
+
520
+ def _getitem(self, index):
521
+ """__getitem__ process, called by TensorPy::TensorGetItem"""
522
+ return tensor_operator_registry.get('_tensor_getitem')(self, index)
523
+
524
+ def _setitem(self, index, value):
525
+ """__setitem__ process, called by TensorPy::TensorSetItem"""
526
+ return tensor_operator_registry.get('_tensor_setitem')(self, index, value)
527
+
528
+ @property
529
+ def _dtensor_info(self):
530
+ """
531
+ Return the distributed tensor information. For details,
532
+ please refer to :class:`mindspore.parallel.DistributedTensorInfo`.
533
+
534
+ Examples:
535
+ >>> from mindspore import Tensor
536
+ >>> import numpy as np
537
+ >>> x = Tensor(np.array([[1, 2], [3, 4]]))
538
+ >>> print(x._dtensor_info)
539
+ None
540
+ """
541
+ if not hasattr(self, '_dist_tensor_info'):
542
+ self._dist_tensor_info = None
543
+ return self._dist_tensor_info
544
+
545
+ @_dtensor_info.setter
546
+ def _dtensor_info(self, input_dtensor_info):
547
+ """
548
+ Set the distributed tensor information to current tensor.
549
+
550
+ Args:
551
+ input_dtensor_info (DistributedTensorInfo): The distributed tensor information.
552
+
553
+ Examples:
554
+ >>> from mindspore import Tensor, Layout, _DistributedTensorInfo
555
+ >>> import numpy as np
556
+ >>> layout = Layout((2, 2), ("dp", "mp"))
557
+ >>> src_layout = layout("dp", "mp")
558
+ >>> distributed_info = _DistributedTensorInfo(src_layout)
559
+ >>> x = Tensor(np.array([[1, 2], [3, 4]]))
560
+ >>> x._dtensor_info = distributed_info
561
+ """
562
+ self._dist_tensor_info = input_dtensor_info
532
563
 
533
564
  @property
534
565
  def shape(self):
535
566
  """
536
567
  For details, please refer to :func:`mindspore.ops.shape`.
568
+
569
+ Examples:
570
+ >>> from mindspore import Tensor
571
+ >>> import numpy as np
572
+ >>> x = Tensor(np.array([[1, 2], [3, 4]]))
573
+ >>> print(x.shape)
574
+ (2, 2)
537
575
  """
538
576
  return self._shape
539
577
 
@@ -546,7 +584,16 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
546
584
 
547
585
  @property
548
586
  def dtype(self):
549
- """Return the dtype of the tensor (:class:`mindspore.dtype`)."""
587
+ """
588
+ Return the dtype of the tensor (:class:`mindspore.dtype`).
589
+
590
+ Examples:
591
+ >>> from mindspore import Tensor
592
+ >>> import numpy as np
593
+ >>> x = Tensor(np.array([1, 2], dtype=np.float32))
594
+ >>> print(x.dtype)
595
+ Float32
596
+ """
550
597
  return self._dtype
551
598
 
552
599
  @property
@@ -579,83 +626,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
579
626
  """
580
627
  return len(self._shape)
581
628
 
582
- @property
583
- def grad(self):
584
- r"""
585
- Get the gradient value.
586
- """
587
- return self._grad
588
-
589
- @grad.setter
590
- def grad(self, grad):
591
- r"""
592
- Set the gradient value.
593
- """
594
- self._grad = grad
595
-
596
- @property
597
- def grad_fn(self):
598
- r"""
599
- The function for backward.
600
- """
601
- return self._grad_fn
602
-
603
- @grad_fn.setter
604
- def grad_fn(self, grad_fn):
605
- r"""
606
- Set the function for backward.
607
- """
608
- self._grad_fn = grad_fn
609
-
610
- @property
611
- def is_leaf(self):
612
- r"""
613
- Whether the stub tensor is leaf.
614
- They will be a leaf if they have requires_grad and requires_grad is False,
615
- Or they were created by user.
616
- """
617
- return self._requires_grad is False or self._grad_fn is None
618
-
619
- @property
620
- def requires_grad(self):
621
- r"""
622
- Whether the stub tensor need requires grad.
623
- """
624
- return self._requires_grad
625
-
626
- @requires_grad.setter
627
- def requires_grad(self, requires_grad):
628
- r"""
629
- Mark the stub tensor whether need requires gradient.
630
- """
631
- self._requires_grad = requires_grad
632
-
633
- def retain_grad(self):
634
- r"""
635
- Enable the stub tensor which is not non-leaf to have the grad during backward().
636
- """
637
- if not self._requires_grad:
638
- RuntimeError("can't retain_grad on Tensor that has requires_grad = False.")
639
- self._retain_grad = self._grad_fn is not None
640
-
641
- @property
642
- def retains_grad(self):
643
- r"""
644
- Is True if the stub tensor is non-leaf and its grad is enabled to be populated during backward().
645
- """
646
- return self._retain_grad
647
-
648
- def backward(self, grad=None):
649
- r"""
650
- Calculate the gradient.
651
- """
652
- if grad is None:
653
- grad = Tensor(np.ones(self.shape), self.dtype)
654
- if self._grad_fn is not None:
655
- self._grad_fn.apply(grad)
656
- elif self._requires_grad:
657
- self._grad = grad
658
-
659
629
  @property
660
630
  def H(self):
661
631
  """
@@ -785,11 +755,11 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
785
755
  if isinstance(array, np.ndarray) and not array.flags['C_CONTIGUOUS']:
786
756
  array = np.ascontiguousarray(array)
787
757
 
788
- return Tensor(Tensor_.from_numpy(array))
758
+ return TensorPy_.from_numpy(array)
789
759
 
790
760
  def ndimension(self):
791
761
  r"""
792
- Alias for :func:`mindspore.Tensor.ndim`.
762
+ Alias for :attr:`mindspore.Tensor.ndim`.
793
763
  """
794
764
  return len(self._shape)
795
765
 
@@ -821,30 +791,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
821
791
  self.const_arg = const_arg
822
792
  return self
823
793
 
824
- def arccosh(self):
825
- r"""
826
- For details, please refer to :func:`mindspore.ops.arccosh`.
827
- """
828
- return tensor_operator_registry.get('acosh')(self)
829
-
830
- def arcsin(self):
831
- r"""
832
- For details, please refer to :func:`mindspore.ops.arcsin`.
833
- """
834
- return tensor_operator_registry.get('asin')(self)
835
-
836
- def arctan(self):
837
- r"""
838
- For details, please refer to :func:`mindspore.ops.arctan`.
839
- """
840
- return tensor_operator_registry.get('atan')(self)
841
-
842
- def arctan2(self, other):
843
- r"""
844
- For details, please refer to :func:`mindspore.ops.arctan2`.
845
- """
846
- return tensor_operator_registry.get('atan2')(self, other)
847
-
848
794
  def cauchy(self, median=0.0, sigma=1.0):
849
795
  r"""
850
796
  Fills the tensor with numbers drawn from the Cauchy distribution. It is
@@ -942,31 +888,17 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
942
888
  self.assign_value_cpp(value)
943
889
  return self
944
890
 
945
- def bincount(self, weights=None, minlength=0):
946
- r"""
947
- For details, please refer to :func:`mindspore.ops.bincount`.
948
- """
949
- return tensor_operator_registry.get('bincount')(self, weights, minlength)
950
-
951
- def chunk(self, chunks, axis=0):
952
- r"""
953
- For details, please refer to :func:`mindspore.ops.chunk`.
954
- """
955
- return tensor_operator_registry.get('chunk')(self, chunks, axis)
956
-
957
- @item_mint
958
- def item(self, index=None):
891
+ def item(self):
959
892
  """
960
- Get the item at the specified index of the tensor.
961
-
962
- Args:
963
- index (Union[None, int, tuple(int)]): The index in Tensor. Default: ``None``.
893
+ Return the value of this tensor as standard Python number.
894
+ This only works for tensors with one element.
964
895
 
965
896
  Returns:
966
897
  A scalar, type is defined by the dtype of the Tensor.
967
898
 
968
899
  Raises:
969
- ValueError: If the length of the `index` is not equal to self.ndim.
900
+ ValueError: If the count of value in tensor is more than one.
901
+ TypeError: The type of element in tensor is not supported.
970
902
 
971
903
  Supported Platforms:
972
904
  ``Ascend`` ``GPU`` ``CPU``
@@ -974,19 +906,11 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
974
906
  Examples:
975
907
  >>> import mindspore as ms
976
908
  >>> from mindspore import Tensor
977
- >>> x = Tensor([[1, 2, 3], [4, 5, 6]], ms.float32)
978
- >>> print(x.item((0, 1)))
979
- 2.0
980
909
  >>> x = Tensor(1.2, ms.float32)
981
910
  >>> print(x.item())
982
911
  1.2
983
912
  """
984
-
985
- if index is not None:
986
- output = self.asnumpy().item(index)
987
- else:
988
- output = self.asnumpy().item()
989
- return output
913
+ return self._item()
990
914
 
991
915
  def itemset(self, *args):
992
916
  r"""
@@ -998,7 +922,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
998
922
  Args:
999
923
  args (Union[(numbers.Number), (int/tuple(int), numbers.Number)]): The arguments that
1000
924
  specify the index and value. If `args` contain one argument (a scalar),
1001
- it is only used in case tensor is of size 1. If `args` contain two
925
+ it is only used in case tensor is of size 1. If `args` contains two
1002
926
  arguments, the last argument is the value to be set and must be a
1003
927
  scalar, the first argument specifies a single tensor element location.
1004
928
  It is either an int or a tuple.
@@ -1044,7 +968,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1044
968
  >>> print(x.get_bytes())
1045
969
  b'\x01\x00\x02\x00\x03\x00'
1046
970
  """
1047
- return Tensor_.get_bytes(self)
971
+ return TensorPy_.get_bytes(self)
1048
972
 
1049
973
  def asnumpy(self):
1050
974
  """
@@ -1067,9 +991,9 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1067
991
  """
1068
992
  if self.has_init:
1069
993
  self.init_data()
1070
- return Tensor_.asnumpy(self)
994
+ return TensorPy_.asnumpy(self)
1071
995
 
1072
- def numpy(self, *, force=False):
996
+ def numpy(self):
1073
997
  """
1074
998
  Alias for :func:`mindspore.Tensor.asnumpy`.
1075
999
  """
@@ -1084,7 +1008,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1084
1008
  Returns:
1085
1009
  True or False
1086
1010
  """
1087
- return Tensor_.is_persistent_data(self)
1011
+ return TensorPy_.is_persistent_data(self)
1088
1012
 
1089
1013
  def asnumpy_of_slice_persistent_data(self, param_key, slice_index):
1090
1014
  """
@@ -1095,7 +1019,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1095
1019
  Returns:
1096
1020
  A numpy ndarray which shares the same underlying storage with the slice of tensor data.
1097
1021
  """
1098
- return Tensor_.asnumpy_of_slice_persistent_data(self, param_key, slice_index)
1022
+ return TensorPy_.asnumpy_of_slice_persistent_data(self, param_key, slice_index)
1099
1023
 
1100
1024
  def slice_num_of_persistent_data(self):
1101
1025
  """
@@ -1118,14 +1042,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1118
1042
  """
1119
1043
  return tensor_operator_registry.get('select_scatter')(self, src, axis, index)
1120
1044
 
1121
- def histc(self, bins=100, min=0., max=0.):
1122
- """
1123
- For details, please refer to :func:`mindspore.ops.histc`.
1124
- """
1125
- validator.check_value_type('min', min, (int, float,), 'Tensor.histc')
1126
- validator.check_value_type('max', max, (int, float,), 'Tensor.histc')
1127
- return tensor_operator_registry.get('histc')(self, bins, float(min), float(max))
1128
-
1129
1045
  def geqrf(self):
1130
1046
  """
1131
1047
  For details, please refer to :func:`mindspore.ops.geqrf`.
@@ -1175,6 +1091,8 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1175
1091
  >>> print(z.is_contiguous())
1176
1092
  True
1177
1093
  """
1094
+ if not self._need_contiguous():
1095
+ return self
1178
1096
  return tensor_operator_registry.get('contiguous')(self)
1179
1097
 
1180
1098
  def is_contiguous(self):
@@ -1193,7 +1111,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1193
1111
  >>> print(y.is_contiguous())
1194
1112
  False
1195
1113
  """
1196
- return Tensor_.is_contiguous(self)
1114
+ return TensorPy_.is_contiguous(self)
1197
1115
 
1198
1116
  def stride(self, dim=None):
1199
1117
  """
@@ -1201,10 +1119,10 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1201
1119
  When no parameters are passed in, a list of stride for all dimensions is returned.
1202
1120
 
1203
1121
  Args:
1204
- dim (int): The dim of stride from one element to the next.
1122
+ dim (int, optional): The dim of stride from one element to the next. Default: ``None``.
1205
1123
 
1206
1124
  Returns:
1207
- Int, the stride of tensor.
1125
+ Int, returns the step size necessary to jump from one element to the next in the specified dimension.
1208
1126
 
1209
1127
  Raises:
1210
1128
  TypeError: `dim` is not an int.
@@ -1215,7 +1133,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1215
1133
  >>> x.stride()
1216
1134
  [5, 1]
1217
1135
  """
1218
- stride = Tensor_.stride(self)
1136
+ stride = TensorPy_.stride(self)
1219
1137
  if dim is None:
1220
1138
  return stride
1221
1139
  return stride[dim]
@@ -1234,28 +1152,35 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1234
1152
  >>> print(ret)
1235
1153
  0
1236
1154
  """
1237
- return Tensor_.storage_offset(self)
1155
+ return TensorPy_.storage_offset(self)
1238
1156
 
1239
- def register_hook(self, hook_fn):
1157
+ def register_hook(self, hook):
1240
1158
  """
1241
1159
  Registers a backward hook for tensor.
1242
1160
 
1243
1161
  Note:
1244
- - The `register_backward_hook(hook_fn)` does not work in graph mode or functions decorated with 'jit'.
1245
- - The 'hook_fn' must be defined as the following code. `grad` is the gradient passed to the tensor,
1162
+ - The `hook` must be defined as the following code. `grad` is the gradient passed to the tensor,
1246
1163
  which may be modified by returning a new output gradient.
1247
- - The 'hook_fn' should have the following signature:
1248
- hook_fn(grad) -> New output gradient, but can not return None or not set return value.
1164
+ - The `hook` should have the following signature:
1165
+ hook(grad) -> New output gradient, but can not return None or not set return value.
1166
+ - Higher-order differentiation does not support tensor `register_hook`.
1167
+ - The following constraints must be met under graph mode:
1168
+
1169
+ - The `hook` must satisfy the syntax constraints of the graph mode.
1170
+ - It is not supported to delete `hook` inside graph.
1171
+ - It is not supported to register `hook` after the `Tensor` is used before.
1172
+ - It is not supported to register multiple `hooks` for a `Tensor` inside graph.
1173
+ - Register `hook` in the graph will return then `Tensor` it self.
1249
1174
 
1250
1175
  Args:
1251
- hook_fn (function): Python function. Tensor backward hook function.
1176
+ hook (function): Python function. Tensor backward hook function.
1252
1177
 
1253
1178
  Returns:
1254
- A handle corresponding to the `hook_fn` . The handle can be used to remove the added `hook_fn` by calling
1179
+ A handle corresponding to the `hook` . The handle can be used to remove the added `hook` by calling
1255
1180
  `handle.remove()` .
1256
1181
 
1257
1182
  Raises:
1258
- TypeError: If the `hook_fn` is not a function of python.
1183
+ TypeError: If the `hook` is not a function of python.
1259
1184
 
1260
1185
  Supported Platforms:
1261
1186
  ``Ascend`` ``GPU`` ``CPU``
@@ -1278,12 +1203,14 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1278
1203
  >>> print(output)
1279
1204
  (Tensor(shape=[], dtype=Float32, value=8), Tensor(shape=[], dtype=Float32, value=6))
1280
1205
  """
1281
- if not check_hook_fn("register_hook", hook_fn):
1282
- return _TensorHookHandle()
1283
- handle = _TensorHookHandle()
1284
- handle.id = Tensor_.register_hook(self, hook_fn)
1206
+ check_hook_fn(hook)
1207
+ handle = _TensorHookHandle(self)
1208
+ handle.id = TensorPy_.register_hook(self, hook)
1285
1209
  return handle
1286
1210
 
1211
+ def _remove_hook(self):
1212
+ pass
1213
+
1287
1214
  def flush_from_cache(self):
1288
1215
  """
1289
1216
  Flush cache data to host if tensor is cache enable.
@@ -1296,13 +1223,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1296
1223
  >>> print(y)
1297
1224
  None
1298
1225
  """
1299
- Tensor_._flush_from_cache(self)
1300
-
1301
- def addcdiv(self, tensor1, tensor2, value=1):
1302
- r"""
1303
- For details, please refer to :func:`mindspore.ops.addcdiv`.
1304
- """
1305
- return tensor_operator_registry.get('addcdiv')(self, tensor1, tensor2, value)
1226
+ TensorPy_._flush_from_cache(self)
1306
1227
 
1307
1228
  def addcmul(self, tensor1, tensor2, value=1):
1308
1229
  r"""
@@ -1310,94 +1231,12 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1310
1231
  """
1311
1232
  return tensor_operator_registry.get('addcmul')(self, tensor1, tensor2, value)
1312
1233
 
1313
- @add_mint
1314
- def add(self, other):
1315
- r"""
1316
- For details, please refer to :func:`mindspore.ops.add`.
1317
- """
1318
- return tensor_operator_registry.get('add')(self, other)
1319
-
1320
- def add_(self, other, *, alpha=1):
1321
- """
1322
- inplace update self by following compute:
1323
- self = self + other * alpha.
1324
-
1325
- .. warning::
1326
- This is an experimental API that is subject to change or deletion.
1327
- The `other` tensor must be broadcastable with the `self` tensor. It may be of a different data type.
1328
-
1329
- Args:
1330
- other (Tensor): the source tensor Add to self Tensor.
1331
- alpha (Number): no effect currently.
1332
-
1333
- Returns:
1334
- Return self Tensor.
1335
-
1336
- Supported Platforms:
1337
- ``Ascend``
1338
-
1339
- Examples:
1340
- >>> import numpy as np
1341
- >>> from mindspore import Tensor
1342
- >>> a = Tensor(np.ones((2,3)).astype("float32"))
1343
- >>> b = Tensor(np.ones((2,3)).astype("float32"))
1344
- >>> a.add_(b)
1345
- >>> print(a)
1346
- [[2. 2. 2.]
1347
- [2. 2. 2.]]
1348
- """
1349
- if isinstance(other, (int, float)):
1350
- ret = tensor_operator_registry.get("adds_")(self, other, alpha)
1351
- else:
1352
- ret = tensor_operator_registry.get("add_")(self, other, alpha)
1353
- return ret
1354
-
1355
- def subtract(self, other, *, alpha=1):
1356
- r"""
1357
- For details, please refer to :func:`mindspore.ops.subtract`.
1358
- """
1359
- return tensor_operator_registry.get('sub')(self, alpha * other)
1360
-
1361
- def true_divide(self, value):
1362
- r"""
1363
- Alias for Tensor.div() with :math:`rounding\_mode=None`.
1364
- For details, please refer to :func:`mindspore.ops.div`.
1365
- """
1366
- return tensor_operator_registry.get('div')(self, value, rounding_mode=None)
1367
-
1368
- def triu(self, diagonal=0):
1369
- r"""
1370
- For details, please refer to :func:`mindspore.ops.triu`.
1371
-
1372
- .. warning::
1373
- This is an experimental API that is subject to change or deletion.
1374
-
1375
- """
1376
- validator.check_value_type('diagonal', diagonal, [int], 'triu')
1377
- return tensor_operator_registry.get('triu')(self, diagonal)
1378
-
1379
- def addbmm(self, batch1, batch2, *, beta=1, alpha=1):
1380
- r"""
1381
- For details, please refer to :func:`mindspore.ops.addbmm`.
1382
- """
1383
- return tensor_operator_registry.get('addbmm')(self, batch1, batch2, beta=beta, alpha=alpha)
1384
-
1385
- def addmm(self, mat1, mat2, *, beta=1, alpha=1):
1386
- r"""
1387
- For details, please refer to :func:`mindspore.ops.addmm`.
1388
- """
1389
- return tensor_operator_registry.get('addmm')(self, mat1, mat2, beta=beta, alpha=alpha)
1390
-
1391
1234
  def addmm_(self, mat1, mat2, *, beta=1, alpha=1):
1392
1235
  r"""
1393
- For details, please refer to :func:`mindspore.ops.addmm`.
1394
-
1395
- .. note::
1396
- The output results are directly updated in the Tensor.
1236
+ In-place version of :func:`mindspore.Tensor.addmm`.
1397
1237
 
1398
1238
  .. warning::
1399
1239
  This is an experimental API that is subject to change or deletion.
1400
-
1401
1240
  """
1402
1241
  return tensor_operator_registry.get('addmm_')(self, mat1, mat2, beta=beta, alpha=alpha)
1403
1242
 
@@ -1413,38 +1252,12 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1413
1252
  """
1414
1253
  return tensor_operator_registry.get('adjoint')(self)
1415
1254
 
1416
- def all(self, axis=None, keep_dims=False):
1417
- r"""
1418
- For details, please refer to :func:`mindspore.ops.all`.
1419
- """
1420
- return tensor_operator_registry.get('all')(self, axis, keep_dims)
1421
-
1422
1255
  def angle(self):
1423
1256
  r"""
1424
1257
  For details, please refer to :func:`mindspore.ops.angle`.
1425
1258
  """
1426
1259
  return tensor_operator_registry.get('angle')(self)
1427
1260
 
1428
- def any(self, axis=None, keep_dims=False):
1429
- r"""
1430
- For details, please refer to :func:`mindspore.ops.any`.
1431
- """
1432
- if axis is None:
1433
- axis = ()
1434
- return tensor_operator_registry.get('any')(self, axis, keep_dims)
1435
-
1436
- def atan2(self, other):
1437
- r"""
1438
- For details, please refer to :func:`mindspore.ops.atan2`.
1439
- """
1440
- return tensor_operator_registry.get('atan2')(self, other)
1441
-
1442
- def baddbmm(self, batch1, batch2, beta=1, alpha=1):
1443
- r"""
1444
- For details, please refer to :func:`mindspore.ops.baddbmm`.
1445
- """
1446
- return tensor_operator_registry.get('baddbmm')(self, batch1, batch2, beta=beta, alpha=alpha)
1447
-
1448
1261
  def view(self, *shape):
1449
1262
  """
1450
1263
  Reshape the tensor according to the input shape. It's the same as :func:`mindspore.Tensor.reshape`,
@@ -1474,64 +1287,11 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1474
1287
  shape = shape[0]
1475
1288
  return tensor_operator_registry.get('reshape')(self, shape)
1476
1289
 
1477
- def view_as(self, other):
1478
- r"""
1479
- View self Tensor as the same shape as `other` .
1480
-
1481
- Args:
1482
- other(Tensor): The returned Tensor has the same shape as `other`.
1483
-
1484
- Returns:
1485
- Tensor, has the same shape as `other`.
1486
-
1487
- Raises:
1488
- TypeError: If `other` is not a Tensor.
1489
-
1490
- Supported Platforms:
1491
- ``Ascend`` ``GPU`` ``CPU``
1492
-
1493
- Examples:
1494
- >>> from mindspore import Tensor
1495
- >>> from mindspore import dtype as mstype
1496
- >>> a = Tensor([[1, 2, 3], [2, 3, 4]], mstype.float32)
1497
- >>> b = Tensor([1, 1, 1, 1, 1, 1], mstype.float32)
1498
- >>> output = a.view_as(b)
1499
- >>> print(output)
1500
- [1. 2. 3. 2. 3. 4.]
1501
- """
1502
- if not isinstance(other, (Tensor, Tensor_)):
1503
- raise TypeError(f"For view_as, the input other must be a Tensor, but got {type(other)}")
1504
- return self.view(other.shape)
1505
-
1506
- def t(self):
1507
- r"""
1508
- For details, please refer to :func:`mindspore.ops.t`.
1509
- """
1510
- return tensor_operator_registry.get("t")(self)
1511
-
1512
- def bitwise_and(self, other):
1513
- """
1514
- For details, please refer to :func:`mindspore.ops.bitwise_and`.
1515
- """
1516
- return tensor_operator_registry.get('bitwise_and')(self, other)
1517
-
1518
- def bitwise_or(self, other):
1519
- """
1520
- For details, please refer to :func:`mindspore.ops.bitwise_or`.
1521
- """
1522
- return tensor_operator_registry.get('bitwise_or')(self, other)
1523
-
1524
- def bitwise_xor(self, other):
1525
- """
1526
- For details, please refer to :func:`mindspore.ops.bitwise_xor`.
1527
- """
1528
- return tensor_operator_registry.get('bitwise_xor')(self, other)
1529
-
1530
- def bitwise_left_shift(self, other):
1531
- """
1532
- For details, please refer to :func:`mindspore.ops.bitwise_left_shift`.
1533
- """
1534
- return tensor_operator_registry.get('bitwise_left_shift')(self, other)
1290
+ def bitwise_left_shift(self, other):
1291
+ """
1292
+ For details, please refer to :func:`mindspore.ops.bitwise_left_shift`.
1293
+ """
1294
+ return tensor_operator_registry.get('bitwise_left_shift')(self, other)
1535
1295
 
1536
1296
  def bitwise_right_shift(self, other):
1537
1297
  """
@@ -1541,12 +1301,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1541
1301
  other = _cast(other, self.dtype)
1542
1302
  return tensor_operator_registry.get('bitwise_right_shift')(self, other)
1543
1303
 
1544
- def scatter(self, axis, index, src):
1545
- """
1546
- For details, please refer to :func:`mindspore.ops.scatter`.
1547
- """
1548
- return tensor_operator_registry.get('scatter')(self, axis, index, src)
1549
-
1550
1304
  def scatter_mul(self, indices, updates):
1551
1305
  """
1552
1306
  For details, please refer to :func:`mindspore.ops.scatter_mul`.
@@ -1565,126 +1319,55 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1565
1319
  """
1566
1320
  return tensor_operator_registry.get('ger')(self, vec2)
1567
1321
 
1568
- def gt(self, x):
1569
- """
1570
- For details, please refer to :func:`mindspore.ops.gt`.
1571
- """
1572
- return tensor_operator_registry.get('gt')(self, x)
1573
-
1574
- def ge(self, x):
1575
- """
1576
- For details, please refer to :func:`mindspore.ops.ge`.
1577
- """
1578
- return tensor_operator_registry.get('ge')(self, x)
1579
-
1580
1322
  def broadcast_to(self, shape):
1581
1323
  """
1582
1324
  For details, please refer to :func:`mindspore.ops.broadcast_to`.
1583
1325
  """
1584
1326
  return tensor_operator_registry.get('broadcast_to')(self, shape)
1585
1327
 
1586
- def expand_as(self, x):
1587
- """
1588
- Expand the dimension of target tensor to the dimension of input tensor.
1589
-
1590
- Args:
1591
- x (Tensor): The input tensor. The shape of the input tensor must obey
1592
- the broadcasting rule.
1593
-
1594
- Returns:
1595
- Tensor, has the same dimension as input tensor.
1596
-
1597
- Examples:
1598
- >>> import numpy as np
1599
- >>> from mindspore import Tensor
1600
- >>> from mindspore import dtype as mstype
1601
- >>> x = Tensor([1, 2, 3], dtype=mstype.float32)
1602
- >>> y = Tensor(np.ones((2, 3)), dtype=mstype.float32)
1603
- >>> output = x.expand_as(y)
1604
- >>> print(output)
1605
- [[1. 2. 3.]
1606
- [1. 2. 3.]]
1607
- """
1608
- return tensor_operator_registry.get('broadcast_to')(self, x.shape)
1609
-
1610
- def exp(self):
1611
- """
1612
- For details, please refer to :func:`mindspore.ops.exp`.
1613
- """
1614
- return tensor_operator_registry.get('exp')(self)
1615
-
1616
1328
  def real(self):
1617
1329
  r"""
1618
1330
  For details, please refer to :func:`mindspore.ops.real`.
1619
1331
  """
1620
1332
  return tensor_operator_registry.get('real')(self)
1621
1333
 
1622
- def rsqrt(self):
1334
+ def tanh_(self):
1623
1335
  r"""
1624
- For details, please refer to :func:`mindspore.ops.rsqrt`.
1625
- """
1626
- return tensor_operator_registry.get('rsqrt')(self)
1336
+ Computes hyperbolic tangent of self inplace element-wise. The Tanh function is defined as:
1627
1337
 
1628
- def reciprocal(self):
1629
- r"""
1630
- For details, please refer to :func:`mindspore.ops.reciprocal`.
1631
- """
1632
- return tensor_operator_registry.get('reciprocal')(self)
1338
+ .. math::
1633
1339
 
1634
- def sqrt(self):
1635
- """
1636
- For details, please refer to :func:`mindspore.ops.sqrt`.
1637
- """
1638
- return tensor_operator_registry.get('sqrt')(self)
1340
+ tanh(x_i) = \frac{\exp(x_i) - \exp(-x_i)}{\exp(x_i) + \exp(-x_i)} = \frac{\exp(2x_i) - 1}{\exp(2x_i) + 1},
1639
1341
 
1640
- def square(self):
1641
- """
1642
- For details, please refer to :func:`mindspore.ops.square`.
1643
- """
1644
- return tensor_operator_registry.get('square')(self)
1342
+ where :math:`x_i` is an element of the input Tensor.
1645
1343
 
1646
- @sub_mint
1647
- def sub(self, y):
1648
- r"""
1649
- For details, please refer to :func:`mindspore.ops.sub`.
1650
- """
1651
- return tensor_operator_registry.get('sub')(self, y)
1344
+ Tanh Activation Function Graph:
1652
1345
 
1653
- def tan(self):
1654
- """
1655
- For details, please refer to :func:`mindspore.ops.tan`.
1656
- """
1657
- return tensor_operator_registry.get('tan')(self)
1346
+ .. image:: ../../images/Tanh.png
1347
+ :align: center
1658
1348
 
1659
- def tanh(self):
1660
- r"""
1661
- For details, please refer to :func:`mindspore.ops.tanh`.
1662
- """
1663
- return tensor_operator_registry.get('tanh')(self)
1349
+ .. warning::
1350
+ - This is an experimental API that is subject ot change or deletion.
1664
1351
 
1665
- def cosh(self):
1666
- r"""
1667
- For details, please refer to :func:`mindspore.ops.cosh`.
1668
- """
1669
- return tensor_operator_registry.get('cosh')(self)
1352
+ Returns:
1353
+ Tensor, with the same type and shape as the `self`.
1670
1354
 
1671
- def acos(self):
1672
- r"""
1673
- For details, please refer to :func:`mindspore.ops.acos`.
1674
- """
1675
- return tensor_operator_registry.get('acos')(self)
1355
+ Raises:
1356
+ TypeError: If `self` is not a Tensor.
1676
1357
 
1677
- def arccos(self):
1678
- r"""
1679
- Alias for :func:`mindspore.Tensor.acos`.
1680
- """
1681
- return self.acos()
1358
+ Supported Platforms:
1359
+ ``Ascend``
1682
1360
 
1683
- def cos(self):
1684
- r"""
1685
- For details, please refer to :func:`mindspore.ops.cos`.
1361
+ Examples:
1362
+ >>> import mindspore
1363
+ >>> import numpy as np
1364
+ >>> from mindspore import Tensor
1365
+ >>> x = Tensor(np.array([1, 2, 3, 4, 5]), mindspore.float32)
1366
+ >>> output = x.tanh_()
1367
+ >>> print(output)
1368
+ [0.7615941 0.9640276 0.9950547 0.9993293 0.9999092]
1686
1369
  """
1687
- return tensor_operator_registry.get('cos')(self)
1370
+ return tensor_operator_registry.get('tanh_')(self)
1688
1371
 
1689
1372
  def cov(self, *, correction=1, fweights=None, aweights=None):
1690
1373
  r"""
@@ -1692,62 +1375,14 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1692
1375
  """
1693
1376
  return tensor_operator_registry.get('cov')(self, correction=correction, fweights=fweights, aweights=aweights)
1694
1377
 
1695
- def acosh(self):
1696
- """
1697
- For details, please refer to :func:`mindspore.ops.acosh`.
1698
- """
1699
- return tensor_operator_registry.get('acosh')(self)
1700
-
1701
- def asin(self):
1378
+ def floor_(self):
1702
1379
  r"""
1703
- For details, please refer to :func:`mindspore.ops.asin`.
1704
- """
1705
- return tensor_operator_registry.get('asin')(self)
1706
-
1707
- def abs(self):
1708
- """
1709
- For details, please refer to :func:`mindspore.ops.abs`.
1710
- """
1711
- return tensor_operator_registry.get('abs')(self)
1712
-
1713
- def absolute(self):
1714
- """
1715
- Alias for :func:`mindspore.Tensor.abs`.
1716
- """
1717
- return self.abs()
1718
-
1719
- def ceil(self):
1720
- """
1721
- For details, please refer to :func:`mindspore.ops.ceil`.
1722
- """
1723
- return tensor_operator_registry.get('ceil')(self)
1724
-
1725
- def floor(self):
1726
- """
1727
- For details, please refer to :func:`mindspore.ops.floor`.
1728
- """
1729
- return tensor_operator_registry.get('floor')(self)
1730
-
1731
- def floor_divide(self, other):
1732
- """
1733
- For details, please refer to :func:`mindspore.ops.floor_divide`.
1380
+ In-place version of :func:`mindspore.Tensor.floor`.
1734
1381
 
1735
1382
  .. warning::
1736
1383
  This is an experimental API that is subject to change or deletion.
1737
1384
  """
1738
- return tensor_operator_registry.get('floor_divide')(self, other)
1739
-
1740
- def lerp(self, end, weight):
1741
- """
1742
- For details, please refer to :func:`mindspore.ops.lerp`.
1743
- """
1744
- return tensor_operator_registry.get('lerp')(self, end, weight)
1745
-
1746
- def negative(self):
1747
- r"""
1748
- For details, please refer to :func:`mindspore.ops.negative`.
1749
- """
1750
- return tensor_operator_registry.get("negative")(self)
1385
+ return tensor_operator_registry.get('floor_')(self)
1751
1386
 
1752
1387
  # pylint: disable=redefined-builtin
1753
1388
  def norm(self, ord=None, dim=None, keepdim=False, *, dtype=None):
@@ -1764,7 +1399,8 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1764
1399
 
1765
1400
  def approximate_equal(self, other, tolerance=1e-5):
1766
1401
  r"""
1767
- For details, please refer to :func:`mindspore.ops.approximate_equal`.
1402
+ For details, please refer to :func:`mindspore.ops.approximate_equal`,
1403
+ The parameter `other` of current interface is the same as the parameter `y` of the reference interface.
1768
1404
  """
1769
1405
  validator.check_isinstance("x", self, Tensor)
1770
1406
  validator.check_isinstance("y", other, Tensor)
@@ -1775,12 +1411,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1775
1411
  tensor_operator_registry.get('__sub__')(input_x, input_y)
1776
1412
  ), tolerance)
1777
1413
 
1778
- def log1p(self):
1779
- r"""
1780
- For details, please refer to :func:`mindspore.ops.log1p`.
1781
- """
1782
- return tensor_operator_registry.get('log1p')(self)
1783
-
1784
1414
  def logit(self, eps=None):
1785
1415
  r"""
1786
1416
  For details, please refer to :func:`mindspore.ops.logit`.
@@ -1790,18 +1420,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1790
1420
  validator.check_value_type('eps', eps, (float,), 'Tensor.logit')
1791
1421
  return tensor_operator_registry.get('logit')(self, eps)
1792
1422
 
1793
- def logaddexp(self, other):
1794
- r"""
1795
- For details, please refer to :func:`mindspore.ops.logaddexp`.
1796
- """
1797
- return tensor_operator_registry.get('logaddexp')(self, other)
1798
-
1799
- def logaddexp2(self, other):
1800
- r"""
1801
- For details, please refer to :func:`mindspore.ops.logaddexp2`.
1802
- """
1803
- return tensor_operator_registry.get('logaddexp2')(self, other)
1804
-
1805
1423
  def logcumsumexp(self, axis):
1806
1424
  r"""
1807
1425
  For details, please refer to :func:`mindspore.ops.logcumsumexp`.
@@ -1811,12 +1429,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1811
1429
  """
1812
1430
  return tensor_operator_registry.get('logcumsumexp')(self, axis)
1813
1431
 
1814
- def logsumexp(self, axis, keepdims=False):
1815
- r"""
1816
- For details, please refer to :func:`mindspore.ops.logsumexp`.
1817
- """
1818
- return tensor_operator_registry.get('logsumexp')(self, axis, keepdims)
1819
-
1820
1432
  def logdet(self):
1821
1433
  r"""
1822
1434
  For details, please refer to :func:`mindspore.ops.logdet`.
@@ -1825,22 +1437,10 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1825
1437
 
1826
1438
  def i0(self):
1827
1439
  r"""
1828
- For details, please refer to :func:`mindspore.ops.i0`.
1440
+ For details, please refer to :func:`mindspore.ops.bessel_i0`.
1829
1441
  """
1830
1442
  return tensor_operator_registry.get('i0')(self)
1831
1443
 
1832
- def isclose(self, x2, rtol=1e-05, atol=1e-08, equal_nan=False):
1833
- """
1834
- For details, please refer to :func:`mindspore.ops.isclose`.
1835
- """
1836
- return tensor_operator_registry.get('isclose')(self, x2, rtol, atol, equal_nan)
1837
-
1838
- def isneginf(self):
1839
- r"""
1840
- For details, please refer to :func:`mindspore.ops.isneginf`.
1841
- """
1842
- return tensor_operator_registry.get('isneginf')(self)
1843
-
1844
1444
  def isposinf(self):
1845
1445
  r"""
1846
1446
  For details, please refer to :func:`mindspore.ops.isposinf`.
@@ -1853,67 +1453,18 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1853
1453
  """
1854
1454
  return tensor_operator_registry.get('isreal')(self)
1855
1455
 
1856
- def isfinite(self):
1857
- r"""
1858
- For details, please refer to :func:`mindspore.ops.isfinite`.
1859
- """
1860
- return tensor_operator_registry.get('isfinite')(self)
1861
-
1862
- def is_complex(self):
1863
- r"""
1864
- For details, please refer to :func:`mindspore.ops.is_complex`.
1865
- """
1866
- return tensor_operator_registry.get('is_complex')(self)
1867
-
1868
1456
  def inv(self):
1869
1457
  r"""
1870
1458
  For details, please refer to :func:`mindspore.ops.inv`.
1871
1459
  """
1872
1460
  return tensor_operator_registry.get('inv')(self)
1873
1461
 
1874
- def inverse(self):
1875
- r"""
1876
- For details, please refer to :func:`mindspore.ops.inverse`.
1877
- """
1878
- return tensor_operator_registry.get('inverse')(self)
1879
-
1880
1462
  def invert(self):
1881
1463
  r"""
1882
1464
  For details, please refer to :func:`mindspore.ops.invert`.
1883
1465
  """
1884
1466
  return tensor_operator_registry.get('invert')(self)
1885
1467
 
1886
- def pow(self, exponent):
1887
- r"""
1888
- For details, please refer to :func:`mindspore.ops.pow`.
1889
- """
1890
- return tensor_operator_registry.get('pow')(self, exponent)
1891
-
1892
- def log(self):
1893
- """
1894
- For details, please refer to :func:`mindspore.ops.log`.
1895
- """
1896
- return tensor_operator_registry.get('log')(self)
1897
-
1898
- def log10(self):
1899
- r"""
1900
- For details, please refer to :func:`mindspore.ops.log10`.
1901
- """
1902
- return tensor_operator_registry.get('log10')(self)
1903
-
1904
- def log2(self):
1905
- r"""
1906
- For details, please refer to :func:`mindspore.ops.log2`.
1907
- """
1908
- return tensor_operator_registry.get('log2')(self)
1909
-
1910
- @mean_mint
1911
- def mean(self, axis=None, keep_dims=False):
1912
- """
1913
- For details, please refer to :func:`mindspore.ops.mean`.
1914
- """
1915
- return tensor_operator_registry.get('mean')(self, axis, keep_dims)
1916
-
1917
1468
  def amin(self, axis=None, keepdims=False, *, initial=None, where=None):
1918
1469
  """
1919
1470
  For details, please refer to :func:`mindspore.ops.amin`.
@@ -1925,6 +1476,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1925
1476
  def reverse(self, axis):
1926
1477
  """
1927
1478
  For details, please refer to :func:`mindspore.ops.flip`.
1479
+ The `axis` parameter in `Tensor.reverse` is equivalent to the `dims` parameter in :func:`mindspore.ops.flip`.
1928
1480
  """
1929
1481
  return tensor_operator_registry.get('flip')(self, axis)
1930
1482
 
@@ -1948,84 +1500,12 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
1948
1500
  """
1949
1501
  return tensor_operator_registry.get("reverse_sequence")(self, seq_lengths, seq_dim, batch_dim)
1950
1502
 
1951
- def prod(self, axis=None, keep_dims=False, dtype=None):
1952
- """
1953
- For details, please refer to :func:`mindspore.ops.prod`.
1954
- """
1955
- return tensor_operator_registry.get('prod')(self, axis, keep_dims, dtype)
1956
-
1957
- def select(self, condition, y):
1958
- r"""
1959
- For details, please refer to :func:`mindspore.ops.select`.
1960
- """
1961
- if not isinstance(condition, Tensor):
1962
- raise TypeError(f"For 'Tensor.select', the argument 'condition' should be Tensor,"
1963
- f" but got {type(condition)}.")
1964
- if not isinstance(y, (Tensor, int, float)):
1965
- raise TypeError(f"For 'Tensor.select', the argument 'y' should be Tensor, int or float,"
1966
- f" but got {type(y)}.")
1967
- if isinstance(y, int) and self.dtype != mstype.int32:
1968
- raise TypeError(f"For 'Tensor.select', if the argument 'y' is int,"
1969
- f" then the tensor type should be int32 but got {self.dtype}")
1970
- if isinstance(y, float) and self.dtype != mstype.float32:
1971
- raise TypeError(f"For 'Tensor.select', if the argument 'y' is float,"
1972
- f" then the tensor type should be float32 but got {self.dtype}")
1973
- input_y = y
1974
- if isinstance(y, (int, float)):
1975
- input_y = tensor_operator_registry.get('zeros_like')(self) + y
1976
- if isinstance(y, int):
1977
- input_y = tensor_operator_registry.get('cast')(input_y, mstype.int32)
1978
- else:
1979
- input_y = tensor_operator_registry.get('cast')(input_y, mstype.float32)
1980
- return tensor_operator_registry.get('select')(condition, self, input_y)
1981
-
1982
- def transpose(self, *axes):
1983
- r"""
1984
- For details, please refer to :func:`mindspore.ops.transpose`.
1985
- """
1986
- perm = validator.check_transpose_axis(axes, self.ndim)
1987
- return tensor_operator_registry.get('transpose')(self, perm)
1988
-
1989
1503
  def col2im(self, output_size, kernel_size, dilation, padding_value, stride):
1990
1504
  """
1991
1505
  For details, please refer to :func:`mindspore.ops.col2im`.
1992
1506
  """
1993
1507
  return tensor_operator_registry.get('col2im')(self, output_size, kernel_size, dilation, padding_value, stride)
1994
1508
 
1995
- def reshape(self, *shape):
1996
- r"""
1997
- Rearranges the input Tensor based on the given `shape` .
1998
-
1999
- The `shape` can only have one -1 at most, in which case it's inferred from the remaining dimensions and
2000
- the number of elements in the input.
2001
-
2002
- Args:
2003
- shape (Union[int, tuple[int], list[int]]): If `shape` is a tuple or list, its elements should be
2004
- integers, and only constant value is allowed. i.e., :math:`(y_1, y_2, ..., y_S)`.
2005
-
2006
- Returns:
2007
- Tensor, If the given `shape` does not contain -1, the `shape` of tensor is :math:`(y_1, y_2, ..., y_S)`.
2008
- If the k-th position in the given `shape` is -1, the `shape` of tensor is :math:`(y_1, ..., y_{k-1},
2009
- \frac{\prod_{i=1}^{R}x_{i}}{y_1\times ...\times y_{k-1}\times y_{k+1}\times...\times y_S} , y_{k+1},
2010
- ..., y_S)`, in where the shape of input tensor is :math:`(x_1, x_2, ..., x_R)`.
2011
-
2012
- Supported Platforms:
2013
- ``Ascend`` ``GPU`` ``CPU``
2014
-
2015
- Examples:
2016
- >>> import mindspore
2017
- >>> import numpy as np
2018
- >>> from mindspore import Tensor, ops
2019
- >>> input = Tensor(np.array([[-0.1, 0.3, 3.6], [0.4, 0.5, -3.2]]), mindspore.float32)
2020
- >>> output = input.reshape(3, 2)
2021
- >>> print(output)
2022
- [[-0.1 0.3]
2023
- [ 3.6 0.4]
2024
- [ 0.5 -3.2]]
2025
- """
2026
- new_shape = validator.check_reshape_shp(shape)
2027
- return tensor_operator_registry.get('reshape')(self, new_shape)
2028
-
2029
1509
  def reshape_as(self, other):
2030
1510
  """
2031
1511
  Change the shape of the Tensor to the shape of `other` without changing the data.
@@ -2078,18 +1558,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2078
1558
  reshape_op = tensor_operator_registry.get('reshape')
2079
1559
  return reshape_op(self, (-1,))
2080
1560
 
2081
- def round(self, decimals=0):
2082
- """
2083
- For details, please refer to :func:`mindspore.ops.round`.
2084
- """
2085
- return tensor_operator_registry.get('round')(self, decimals=decimals)
2086
-
2087
- def roll(self, shifts, dims):
2088
- """
2089
- For details, please refer to :func:`mindspore.ops.roll`.
2090
- """
2091
- return tensor_operator_registry.get('roll')(shifts, dims)(self)
2092
-
2093
1561
  def rot90(self, k, dims):
2094
1562
  r"""
2095
1563
  For details, please refer to :func:`mindspore.ops.rot90`.
@@ -2102,18 +1570,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2102
1570
  """
2103
1571
  return tensor_operator_registry.get('deg2rad')(self)
2104
1572
 
2105
- def dot(self, other):
2106
- r"""
2107
- For details, please refer to :func:`mindspore.ops.dot`.
2108
- """
2109
- return tensor_operator_registry.get('dot')(self, other)
2110
-
2111
- def outer(self, vec2):
2112
- r"""
2113
- For details, please refer to :func:`mindspore.ops.outer`.
2114
- """
2115
- return tensor_operator_registry.get('outer')(self, vec2)
2116
-
2117
1573
  def rad2deg(self):
2118
1574
  r"""
2119
1575
  For details, please refer to :func:`mindspore.ops.rad2deg`.
@@ -2130,16 +1586,18 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2130
1586
  r"""
2131
1587
  Alias for :func:`mindspore.Tensor.numel`.
2132
1588
  """
2133
- return tensor_operator_registry.get('nelement')(self)
1589
+ return self.size
2134
1590
 
2135
1591
  def numel(self):
2136
1592
  r"""
2137
1593
  For details, please refer to :func:`mindspore.ops.numel`.
2138
1594
  """
2139
- return tensor_operator_registry.get('numel')(self)
1595
+ return self._size
2140
1596
 
2141
1597
  def permute(self, *axis):
2142
1598
  """
1599
+ Tensor.permute supports unpacking the `axis` argument automatically when it is passed as an indefinite number of
1600
+ positional arguments, which has a slight difference from the input parameter of :func:`mindspore.ops.permute`.
2143
1601
  For details, please refer to :func:`mindspore.ops.permute`.
2144
1602
  """
2145
1603
  perm = validator.check_transpose_axis(axis, self.ndim)
@@ -2151,19 +1609,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2151
1609
  """
2152
1610
  return tensor_operator_registry.get("positive")(self)
2153
1611
 
2154
- def remainder(self, divisor):
2155
- r"""
2156
- For details, please refer to :func:`mindspore.ops.remainder`.
2157
- """
2158
- return tensor_operator_registry.get('remainder')(self, divisor)
2159
-
2160
- @flatten_mint
2161
- def flatten(self, order='C', *, start_dim=0, end_dim=-1):
2162
- r"""
2163
- For details, please refer to :func:`mindspore.ops.flatten`.
2164
- """
2165
- return tensor_operator_registry.get('flatten')(self, order, start_dim=start_dim, end_dim=end_dim)
2166
-
2167
1612
  def float_power(self, other):
2168
1613
  r"""
2169
1614
  For details, please refer to :func:`mindspore.ops.float_power`.
@@ -2178,22 +1623,10 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2178
1623
 
2179
1624
  def fmin(self, other):
2180
1625
  r"""
2181
- For details, please refer to :func:`mindspore.ops.fmin`.
1626
+ This interface is deprecated from version 2.4 and will be removed in a future version.
2182
1627
  """
2183
1628
  return tensor_operator_registry.get('fmin')(self, other)
2184
1629
 
2185
- def fmod(self, other):
2186
- r"""
2187
- For details, please refer to :func:`mindspore.ops.fmod`.
2188
- """
2189
- return tensor_operator_registry.get('fmod')(self, other)
2190
-
2191
- def narrow(self, axis, start, length):
2192
- """
2193
- For details, please refer to :func:`mindspore.ops.narrow`.
2194
- """
2195
- return tensor_operator_registry.get('narrow')(self, axis, start, length)
2196
-
2197
1630
  def swapaxes(self, axis0, axis1):
2198
1631
  """
2199
1632
  For details, please refer to :func:`mindspore.ops.swapaxes`.
@@ -2218,20 +1651,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2218
1651
  """
2219
1652
  return tensor_operator_registry.get('slogdet')(self)
2220
1653
 
2221
- def tril(self, diagonal=0):
2222
- """
2223
- For details, please refer to :func:`mindspore.ops.tril`.
2224
- """
2225
- return tensor_operator_registry.get('tril')(self, diagonal)
2226
-
2227
- def unsqueeze(self, dim):
2228
- """
2229
- For details, please refer to :func:`mindspore.ops.unsqueeze`.
2230
- """
2231
- validator.check_is_int(dim, 'dim')
2232
- validator.check_int_range(dim, -self.ndim - 1, self.ndim + 1, validator.INC_LEFT, 'dim')
2233
- return tensor_operator_registry.get('unsqueeze')(self, dim)
2234
-
2235
1654
  def expand_dims(self, axis):
2236
1655
  """
2237
1656
  For details, please refer to :func:`mindspore.ops.expand_dims`.
@@ -2271,66 +1690,53 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2271
1690
  dtype = _check_astype_and_convert(dtype)
2272
1691
  if not copy and dtype == self.dtype:
2273
1692
  return self
2274
- return tensor_operator_registry.get('cast')(self, dtype)
2275
-
2276
- def argmax(self, axis=None, keepdims=False):
2277
- """
2278
- For details, please refer to :func:`mindspore.ops.argmax`.
2279
- """
2280
- out = tensor_operator_registry.get('argmax')(self, axis, keepdims)
2281
- return out
2282
-
2283
- def argmin(self, axis=None, keepdims=False):
2284
- """
2285
- For details, please refer to :func:`mindspore.ops.argmin`.
2286
- """
2287
- out = tensor_operator_registry.get('argmin')(self, axis, keepdims)
2288
- return out
1693
+ return self.to(dtype)
2289
1694
 
2290
1695
  def argmax_with_value(self, axis=0, keep_dims=False):
2291
1696
  """
2292
- Returns the maximum value with corresponding index.
2293
-
2294
- Compute the max value of input Tensor on the specified axis, and return the max value and index.
2295
-
2296
- Note:
2297
- - In auto_parallel and semi_auto_parallel mode, the first output index can not be used.
2298
- - If there are multiple maximum values, the index of the first maximum value is used.
2299
- - The value range of `axis` is [-dims, dims - 1]. `dims` is the dimension length of this tensor.
1697
+ Return the maximum values and their indices along the given axis of the tensor.
2300
1698
 
2301
1699
  Args:
2302
- axis (int): The dimension to reduce. Default: ``0`` .
2303
- keep_dims (bool): Whether to reduce dimension, if ``true`` the output will keep the same dimension as the
2304
- input, the output will reduce dimension if ``false`` . Default: ``False`` .
1700
+ axis (Union[int, None], optional): Specify the axis for computation. If ``None`` , compute all elements in
1701
+ the tensor. Default ``0`` .
1702
+ keep_dims (bool, optional): Whether the output tensor has dim retained. Default ``False`` .
2305
1703
 
2306
1704
  Returns:
2307
- tuple (Tensor), tuple of 2 tensors, containing the corresponding index and the maximum value of the input
2308
- tensor.
2309
-
2310
- - **index** (Tensor) - The index for the maximum value of the input tensor.
2311
- If `keep_dims` is ``true`` , the shape of
2312
- output tensors is :math:`(x_1, x_2, ..., x_{axis-1}, 1, x_{axis+1}, ..., x_N)`. Otherwise, the shape is
2313
- :math:`(x_1, x_2, ..., x_{axis-1}, x_{axis+1}, ..., x_N)` .
2314
- - **value** (Tensor) - The maximum value of input tensor, with the same shape as index.
2315
-
2316
- Raises:
2317
- TypeError: If `keep_dims` is not a bool.
2318
- TypeError: If `axis` is not an int.
1705
+ Tuple(max, max_indices) of 2 tensors.
2319
1706
 
2320
1707
  Supported Platforms:
2321
1708
  ``Ascend`` ``GPU`` ``CPU``
2322
1709
 
2323
1710
  Examples:
2324
- >>> import numpy as np
2325
1711
  >>> import mindspore
2326
- >>> from mindspore import Tensor
2327
- >>> x = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), mindspore.float32)
2328
- >>> output, index = x.argmax_with_value()
2329
- >>> print(output, index)
2330
- 0.7 3
2331
- >>> output, index = x.argmax_with_value(keep_dims=True)
2332
- >>> print(output, index)
2333
- [0.7] [3]
1712
+ >>> x = mindspore.tensor([[9, 3, 4, 5],
1713
+ ... [5, 2, 7, 4],
1714
+ ... [8, 1, 3, 6]])
1715
+ >>> # case 1: By default, compute the maximum along axis 0.
1716
+ >>> x.argmax_with_value()
1717
+ (Tensor(shape=[4], dtype=Int64, value= [9, 3, 7, 6]),
1718
+ Tensor(shape=[4], dtype=Int64, value= [0, 0, 1, 2]))
1719
+ >>>
1720
+ >>> # case 2: Compute the maximum along axis 1.
1721
+ >>> x.argmax_with_value(axis=1)
1722
+ (Tensor(shape=[3], dtype=Int64, value= [9, 7, 8]),
1723
+ Tensor(shape=[3], dtype=Int64, value= [0, 2, 0]))
1724
+ >>>
1725
+ >>> # case 3: If keep_dims=True, the output shape will be same of that of the input.
1726
+ >>> x.argmax_with_value(axis=1, keep_dims=True)
1727
+ (Tensor(shape=[3, 1], dtype=Int64, value=
1728
+ [[9],
1729
+ [7],
1730
+ [8]]),
1731
+ Tensor(shape=[3, 1], dtype=Int64, value=
1732
+ [[0],
1733
+ [2],
1734
+ [0]]))
1735
+ >>>
1736
+ >>> # case 4: If axis=None, compute the maximum of all elements.
1737
+ >>> x.argmax_with_value(axis=None, keep_dims=True)
1738
+ (Tensor(shape=[], dtype=Int64, value= 9),
1739
+ Tensor(shape=[], dtype=Int64, value= 0))
2334
1740
  """
2335
1741
  if self.shape == ():
2336
1742
  return (self, Tensor(0))
@@ -2338,68 +1744,54 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2338
1744
 
2339
1745
  def argmin_with_value(self, axis=0, keep_dims=False):
2340
1746
  """
2341
- Returns the minimum value with corresponding index.
2342
-
2343
- Note:
2344
- - In auto_parallel and semi_auto_parallel mode, the first output index can not be used.
2345
- - If there are multiple minimum values, the index of the first minimum value is used.
2346
- - The value range of `axis` is [-dims, dims - 1]. `dims` is the dimension length of this tensor.
1747
+ Return the minimum values and their indices along the given axis of the tensor.
2347
1748
 
2348
1749
  Args:
2349
- axis (int): The dimension to reduce. Default: 0.
2350
- keep_dims (bool): Whether to reduce dimension, if true the output will keep the same dimension as the input,
2351
- the output will reduce dimension if false. Default: ``False``.
1750
+ axis (Union[int, None], optional): Specify the axis for computation. If ``None`` , compute all elements in
1751
+ the tensor. Default ``0`` .
1752
+ keep_dims (bool, optional): Whether the output tensor has dim retained. Default ``False`` .
2352
1753
 
2353
1754
  Returns:
2354
- tuple (Tensor), tuple of 2 tensors, containing the corresponding index and the minimum value of the input
2355
- tensor.
2356
-
2357
- - **index** (Tensor) - The index for the minimum value of the input tensor.
2358
- If `keep_dims` is true, the shape of
2359
- output tensors is :math:`(x_1, x_2, ..., x_{axis-1}, 1, x_{axis+1}, ..., x_N)`. Otherwise, the shape is
2360
- :math:`(x_1, x_2, ..., x_{axis-1}, x_{axis+1}, ..., x_N)` .
2361
- - **value** (Tensor) - The minimum value of input tensor, with the same shape as index.
2362
-
2363
- Raises:
2364
- TypeError: If `keep_dims` is not a bool.
2365
- TypeError: If `axis` is not an int.
1755
+ Tuple(min, min_indices) of 2 tensors.
2366
1756
 
2367
1757
  Supported Platforms:
2368
1758
  ``Ascend`` ``GPU`` ``CPU``
2369
1759
 
2370
1760
  Examples:
2371
- >>> import numpy as np
2372
1761
  >>> import mindspore
2373
- >>> from mindspore import Tensor
2374
- >>> x = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), mindspore.float32)
2375
- >>> output, index = x.argmin_with_value()
2376
- >>> print(output, index)
2377
- 0.0 0
2378
- >>> output, index = x.argmin_with_value(keep_dims=True)
2379
- >>> print(output, index)
2380
- [0.0] [0]
1762
+ >>> x = mindspore.tensor([[2, 5, 1, 6],
1763
+ ... [3, -7, -2, 4],
1764
+ ... [8, -4, 1, -3]])
1765
+ >>> # case 1: By default, compute the minimum along axis 0.
1766
+ >>> x.argmin_with_value()
1767
+ (Tensor(shape=[4], dtype=Int64, value= [ 2, -7, -2, -3]),
1768
+ Tensor(shape=[4], dtype=Int64, value= [0, 1, 1, 2]))
1769
+ >>>
1770
+ >>> # case 2: Compute the minimum along axis 1.
1771
+ >>> x.argmin_with_value(axis=1)
1772
+ (Tensor(shape=[3], dtype=Int64, value= [ 1, -7, -4]),
1773
+ Tensor(shape=[3], dtype=Int64, value= [2, 1, 1]))
1774
+ >>>
1775
+ >>> # case 3: If keep_dims=True, the output shape will be same of that of the input.
1776
+ >>> x.argmin_with_value(axis=1, keep_dims=True)
1777
+ (Tensor(shape=[3, 1], dtype=Int64, value=
1778
+ [[ 1],
1779
+ [-7],
1780
+ [-4]]),
1781
+ Tensor(shape=[3, 1], dtype=Int64, value=
1782
+ [[2],
1783
+ [1],
1784
+ [1]]))
1785
+ >>>
1786
+ >>> # case 4: If axis=None, compute the minimum of all elements.
1787
+ >>> x.argmin_with_value(axis=None, keep_dims=True)
1788
+ (Tensor(shape=[], dtype=Int64, value= -7),
1789
+ Tensor(shape=[], dtype=Int64, value= 0))
2381
1790
  """
2382
1791
  if self.shape == ():
2383
1792
  return (self, Tensor(0))
2384
1793
  return tensor_operator_registry.get('argmin_with_value')(self, axis, keep_dims)
2385
1794
 
2386
- def cumsum(self, axis=None, dtype=None):
2387
- """
2388
- For details, please refer to :func:`mindspore.ops.cumsum`.
2389
- """
2390
- x = self
2391
- original_dtype = x.dtype
2392
- # If original tensor is int, and has precision less then int32, convert to int32
2393
- if x.dtype in (mstype.bool_, mstype.int8, mstype.int16, mstype.uint8, mstype.int16):
2394
- x = x.astype(mstype.int32)
2395
- if axis is None:
2396
- x = x.ravel()
2397
- axis = 0
2398
- validator.check_axis_in_range(axis, x.ndim)
2399
- if dtype is not None and original_dtype != dtype:
2400
- return tensor_operator_registry.get('cumsum')()(x, axis).astype(dtype, copy=False)
2401
- return tensor_operator_registry.get('cumsum')()(x, axis)
2402
-
2403
1795
  def cummin(self, axis):
2404
1796
  r"""
2405
1797
  For details, please refer to :func:`mindspore.ops.cummin`.
@@ -2418,12 +1810,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2418
1810
  """
2419
1811
  return tensor_operator_registry.get('index_fill')(self, axis, index, value)
2420
1812
 
2421
- def index_select(self, axis, index):
2422
- """
2423
- For details, please refer to :func:`mindspore.ops.index_select`.
2424
- """
2425
- return tensor_operator_registry.get('index_select')(self, axis, index)
2426
-
2427
1813
  def inplace_update(self, v, indices):
2428
1814
  """
2429
1815
  For details, please refer to :func:`mindspore.ops.inplace_update`.
@@ -2466,234 +1852,81 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2466
1852
  x = x.astype(origin_dtype)
2467
1853
  return x
2468
1854
 
2469
- def copy_(self, src, non_blocking=False):
1855
+ def scatter_add_(self, dim, index, src):
2470
1856
  """
2471
- Copies the elements from src into self tensor and returns self.
1857
+ Add all elements in `src` to the index specified by `index` to `self` along dimension specified by `dim`,
1858
+ `scatter_add` is an in-place operation.
1859
+ The ranks of `self`, `index` and `src` must be greater or equal to 1.
2472
1860
 
2473
- .. warning::
2474
- This is an experimental API that is subject to change or deletion.
2475
- The `src` tensor must be broadcastable with the `self` tensor. It may be of a different data type.
1861
+ For a 3-D tensor, the operation updates `self` as follows:
2476
1862
 
2477
- Args:
2478
- src (Tensor): the source tensor to copy from.
2479
- non_blocking (bool): no effect currently.
1863
+ .. code-block::
2480
1864
 
2481
- Returns:
2482
- Return self Tensor.
1865
+ self[index[i][j][k]][j][k] += src[i][j][k] # if dim == 0
2483
1866
 
2484
- Supported Platforms:
2485
- ``Ascend``
1867
+ self[i][index[i][j][k]][k] += src[i][j][k] # if dim == 1
2486
1868
 
2487
- Examples:
2488
- >>> import numpy as np
2489
- >>> from mindspore import Tensor
2490
- >>> a = Tensor(np.ones((3,3)).astype("float32"))
2491
- >>> b = Tensor(np.zeros((3,3)).astype("float32"))
2492
- >>> a.copy_(b)
2493
- >>> print(a)
2494
- [[0. 0. 0.]
2495
- [0. 0. 0.]
2496
- [0. 0. 0.]]
2497
- """
2498
- return tensor_operator_registry.get("copy_")(self, src)
2499
-
2500
- @max_mint
2501
- def max(self, axis=None, keepdims=False, *, initial=None, where=True, return_indices=False):
2502
- """
2503
- Return the maximum of a tensor or maximum along an axis.
2504
-
2505
- Note:
2506
- When `axis` is ``None``, `keepdims` and subsequent parameters
2507
- have no effect. At the same time, the index is fixed to return 0.
1869
+ self[i][j][index[i][j][k]] += src[i][j][k] # if dim == 2
2508
1870
 
2509
1871
  Args:
2510
- axis (Union[None, int, list, tuple of ints], optional): Axis or
2511
- axes along which to operate. By default, flattened input is used. If
2512
- this is a tuple of ints, the maximum is selected over multiple axes,
2513
- instead of a single axis or all the axes as before. Default: ``None`` .
2514
- keepdims (bool, optional):
2515
- If this is set to ``True`` , the axes which are reduced are left in the
2516
- result as dimensions with size one. With this option, the result will
2517
- broadcast correctly against the input array. Default: ``False`` .
2518
-
2519
- Keyword Args:
2520
- initial (scalar, optional):
2521
- The minimum value of an output element. Must be present to allow
2522
- computation on empty slice. Default: ``None`` .
2523
- where (bool Tensor, optional):
2524
- A boolean tensor which is broadcasted to match the dimensions of array,
2525
- and selects elements to include in the reduction. If non-default value
2526
- is passed, initial must also be provided. Default: ``True`` .
2527
- return_indices (bool, optional): Whether to return the index of the maximum value.
2528
- Default: ``False`` . If `axis` is a list or tuple of ints, it must be ``False`` .
2529
-
2530
- Returns:
2531
- Tensor or scalar, maximum of input tensor. If `axis` is ``None`` , the result is a scalar
2532
- value. If `axis` is given, the result is a tensor of dimension ``self.ndim - 1``.
2533
-
2534
- Raises:
2535
- TypeError: If arguments have types not specified above.
2536
-
2537
- See also:
2538
- - :func:`mindspore.Tensor.argmin`: Return the indices of the minimum values along an axis.
2539
- - :func:`mindspore.Tensor.argmax`: Return the indices of the maximum values along an axis.
2540
- - :func:`mindspore.Tensor.min`: Return the minimum of a tensor or minimum along an axis.
2541
-
2542
- Supported Platforms:
2543
- ``Ascend`` ``GPU`` ``CPU``
2544
-
2545
- Examples:
2546
- >>> import numpy as np
2547
- >>> from mindspore import Tensor
2548
- >>> a = Tensor(np.arange(4).reshape((2, 2)).astype('float32'))
2549
- >>> output = a.max()
2550
- >>> print(output)
2551
- 3.0
2552
- >>> value, indices = a.max(axis=0, return_indices=True)
2553
- >>> print(value)
2554
- [2. 3.]
2555
- >>> print(indices)
2556
- [1 1]
2557
- """
2558
- if isinstance(axis, (list, tuple)):
2559
- reduce_ = tensor_operator_registry.get("reduce")
2560
- reduce_max = tensor_operator_registry.get("reduce_max")
2561
- maximum = tensor_operator_registry.get("maximum")
2562
- return reduce_(self, reduce_max(keepdims), cmp_fn=maximum, axis=axis, keepdims=keepdims,
2563
- initial=initial, where=where)
2564
- values, indices = tensor_operator_registry.get("max")(self, axis, keepdims, initial=initial, where=where)
2565
- if not return_indices:
2566
- return values
2567
- return values, indices
2568
-
2569
- @min_mint
2570
- def min(self, axis=None, keepdims=False, *, initial=None, where=True, return_indices=False):
2571
- """
2572
- Return the minimum of a tensor or minimum along an axis.
2573
-
2574
- Note:
2575
- When `axis` is ``None``, `keepdims` and subsequent parameters
2576
- have no effect. At the same time, the index is fixed to return 0.
2577
-
2578
- Args:
2579
- axis (Union[None, int, list, tuple of ints], optional): An axis or
2580
- axes along which to operate. By default, flattened input is used. If
2581
- `axis` is a tuple of ints, the minimum is selected over multiple axes,
2582
- instead of a single axis or all the axes as before. Default: ``None`` .
2583
- keepdims (bool, optional):
2584
- If ``True`` , the axes which are reduced are left in the
2585
- result as dimensions with size one. With this option, the result will
2586
- broadcast correctly against the input array. Default: ``False`` .
2587
-
2588
- Keyword Args:
2589
- initial (scalar, optional):
2590
- The minimum value of an output element. Must be present to allow
2591
- computation on empty slice. Default: ``None`` .
2592
- where (Tensor[bool], optional):
2593
- A boolean tensor which is broadcasted to match the dimensions of array,
2594
- and selects elements to include in the reduction. If non-default value
2595
- is passed, initial must also be provided. Default: ``True`` .
2596
- return_indices (bool, optional): Whether to return the index of the minimum value. Default: ``False`` .
2597
- If `axis` is a list or tuple of ints, it must be ``False`` .
1872
+ dim (int): Which dim to scatter. Accepted range is [-r, r) where r = rank(`self`).
1873
+ index (Tensor): The index of `self` to do scatter operation whose data type must
1874
+ be int32 or int64. Same rank as `self`. Except for the dimension
1875
+ specified by `dim`, size of each dimension of `index` must be less than or equal to the size of
1876
+ the corresponding dimension of `self`.
1877
+ src (Tensor): The tensor doing the scatter operation with `self`, has the same type as `self` and
1878
+ the size of each dimension must be greater than or equal to that of `index`.
2598
1879
 
2599
1880
  Returns:
2600
- Tensor or scalar, minimum of input tensor. If `axis` is ``None`` , the result is a scalar
2601
- value. If `axis` is given, the result is a tensor of dimension ``self.ndim - 1``.
1881
+ Tensor, has the same shape and type as `self`.
2602
1882
 
2603
1883
  Raises:
2604
- TypeError: If arguments have types not specified above.
2605
-
2606
- See also:
2607
- - :func:`mindspore.Tensor.argmin`: Return the indices of the minimum values along an axis.
2608
- - :func:`mindspore.Tensor.argmax`: Return the indices of the maximum values along an axis.
2609
- - :func:`mindspore.Tensor.max`: Return the minimum of a tensor or minimum along an axis.
1884
+ TypeError: If `index` is neither int32 nor int64.
1885
+ ValueError: If anyone of the rank among `self`, `index` and `src` is less than 1.
1886
+ ValueError: If the ranks of `self`, `index` and `src` are not the same.
1887
+ ValueError: The size of any dimension of `index` except the dimension specified by `dim` is
1888
+ greater than the size of the corresponding dimension of `self`.
1889
+ ValueError: If the size of any dimension of `src` is less than that of `index`.
2610
1890
 
2611
1891
  Supported Platforms:
2612
- ``Ascend`` ``GPU`` ``CPU``
1892
+ ``Ascend``
2613
1893
 
2614
1894
  Examples:
2615
1895
  >>> import numpy as np
1896
+ >>> import mindspore as ms
2616
1897
  >>> from mindspore import Tensor
2617
- >>> a = Tensor(np.arange(4).reshape((2, 2)).astype('float32'))
2618
- >>> output = a.min()
2619
- >>> print(output)
2620
- 0.0
2621
- >>> output = a.min(axis=0)
2622
- >>> print(output)
2623
- [0. 1.]
2624
- >>> output = a.min(axis=0, initial=9, where=Tensor([False]))
2625
- >>> print(output)
2626
- [9. 9.]
2627
- >>> output = a.min(axis=0, initial=9, where=Tensor([False, True]))
2628
- >>> print(output)
2629
- [9. 1.]
2630
- >>> value, indices = a.min(axis=0, return_indices=True)
2631
- >>> print(value)
2632
- [0. 1.]
2633
- >>> print(indices)
2634
- [0 0]
2635
- """
2636
- if isinstance(axis, (list, tuple)):
2637
- reduce_ = tensor_operator_registry.get("reduce")
2638
- reduce_min = tensor_operator_registry.get("reduce_min")
2639
- minimum = tensor_operator_registry.get("minimum")
2640
- return reduce_(self, reduce_min(keepdims), cmp_fn=minimum, axis=axis, keepdims=keepdims,
2641
- initial=initial, where=where)
2642
- values, indices = tensor_operator_registry.get("min")(self, axis, keepdims, initial=initial, where=where)
2643
- if not return_indices:
2644
- return values
2645
- return values, indices
2646
-
2647
- def scatter_add(self, indices, updates):
2648
- """
2649
- For details, please refer to :func:`mindspore.ops.scatter_add`.
1898
+ >>> input = Tensor(np.array([[1, 2, 3, 4, 5]]), dtype=ms.float32)
1899
+ >>> src = Tensor(np.array([[8, 8]]), dtype=ms.float32)
1900
+ >>> index = Tensor(np.array([[2, 4]]), dtype=ms.int64)
1901
+ >>> out = input.scatter_add_(1, index, src)
1902
+ >>> print(out)
1903
+ [[1. 2. 11. 4. 13.]]
1904
+ >>> input = Tensor(np.zeros((5, 5)), dtype=ms.float32)
1905
+ >>> src = Tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), dtype=ms.float32)
1906
+ >>> index = Tensor(np.array([[0, 0, 0], [2, 2, 2], [4, 4, 4]]), dtype=ms.int64)
1907
+ >>> out = input.scatter_add_(0, index, src)
1908
+ >>> print(out)
1909
+ [[1. 2. 3. 0. 0.]
1910
+ [0. 0. 0. 0. 0.]
1911
+ [4. 5. 6. 0. 0.]
1912
+ [0. 0. 0. 0. 0.]
1913
+ [7. 8. 9. 0. 0.]]
1914
+ >>> input = Tensor(np.zeros((5, 5)), dtype=ms.float32)
1915
+ >>> src = Tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), dtype=ms.float32)
1916
+ >>> index = Tensor(np.array([[0, 2, 4], [0, 2, 4], [0, 2, 4]]), dtype=ms.int64)
1917
+ >>> out = input.scatter_add_(1, index, src)
1918
+ >>> print(out)
1919
+ [[1. 0. 2. 0. 3.]
1920
+ [4. 0. 5. 0. 6.]
1921
+ [7. 0. 8. 0. 9.]
1922
+ [0. 0. 0. 0. 0.]
1923
+ [0. 0. 0. 0. 0.]]
2650
1924
  """
2651
- return tensor_operator_registry.get("tensor_scatter_add")(self, indices, updates)
1925
+ return tensor_operator_registry.get("inplace_scatter_add")(self, dim, index, src)
2652
1926
 
2653
1927
  def scatter_sub(self, indices, updates):
2654
1928
  """
2655
- Creates a new tensor by subtracting the values from the positions in self tensor indicated by
2656
- `indices`, with values from `updates`. When multiple values are provided for the same
2657
- index, the result of the update will be to subtract these values respectively. This operation is almost
2658
- equivalent to using :class:`mindspore.ops.ScatterNdSub` , except that the updates are applied on output `Tensor`
2659
- instead of input `Parameter`.
2660
-
2661
- The last axis of `indices` is the depth of each index vectors. For each index vector,
2662
- there must be a corresponding value in `updates`. The shape of `updates` should be
2663
- equal to the shape of `self[indices]`. For more details, see Examples.
2664
-
2665
- Note:
2666
- On GPU, if some values of the `indices` are out of bound, instead of raising an index error,
2667
- the corresponding `updates` will not be updated to self tensor. On CPU, if some values of
2668
- the `indices` are out of bound, raising an index error. On Ascend, out of bound checking is
2669
- not supported, if some values of the `indices` are out of bound, unknown errors may be caused.
2670
-
2671
- Args:
2672
- indices (Tensor): The index of input tensor whose data type is int32 or int64.
2673
- The rank must be at least 2.
2674
- updates (Tensor): The tensor to update the input tensor, has the same type as input,
2675
- and updates.shape should be equal to indices.shape[:-1] + self.shape[indices.shape[-1]:].
2676
-
2677
- Returns:
2678
- Tensor, has the same shape and type as self tensor.
2679
-
2680
- Raises:
2681
- TypeError: If dtype of `indices` is neither int32 nor int64.
2682
- ValueError: If length of shape of self tensor is less than the last dimension of shape of `indices`.
2683
-
2684
- Supported Platforms:
2685
- ``Ascend`` ``GPU`` ``CPU``
2686
-
2687
- Examples:
2688
- >>> import numpy as np
2689
- >>> from mindspore import Tensor
2690
- >>> x = Tensor(np.array([[-0.1, 0.3, 3.6], [0.4, 0.5, -3.2]]).astype('float32'))
2691
- >>> indices = Tensor(np.array([[0, 0], [0, 0]]).astype('int32'))
2692
- >>> updates = Tensor(np.array([1.0, 2.2]).astype('float32'))
2693
- >>> output = x.scatter_sub(indices, updates)
2694
- >>> print(output)
2695
- [[-3.3000002 0.3 3.6 ]
2696
- [ 0.4 0.5 -3.2 ]]
1929
+ For details, please refer to :func:`mindspore.ops.tensor_scatter_sub`.
2697
1930
  """
2698
1931
  return tensor_operator_registry.get('tensor_scatter_sub')(self, indices, updates)
2699
1932
 
@@ -2774,18 +2007,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2774
2007
  """
2775
2008
  return tensor_operator_registry.get('fill_diagonal')(fill_value, wrap)(self)
2776
2009
 
2777
- def masked_fill(self, mask, value):
2778
- """
2779
- For details, please refer to :func:`mindspore.ops.masked_fill`.
2780
- """
2781
- if isinstance(value, (float, int)):
2782
- value = tensor_operator_registry.get("scalar_to_tensor")(value, self.dtype)
2783
- if not isinstance(mask, Tensor):
2784
- raise TypeError("For 'Tensor.masked_fill', the type of the argument 'mask' must be Tensor, but "
2785
- "got {}.".format(type(mask)))
2786
- validator.check_type_name('mask', mask.dtype, [mstype.bool_], "Tensor")
2787
- return tensor_operator_registry.get("masked_fill")(self, mask, value)
2788
-
2789
2010
  def ptp(self, axis=None, keepdims=False):
2790
2011
  """
2791
2012
  The name of the function comes from the acronym for "peak to peak". Calculate the difference between the
@@ -2827,25 +2048,16 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2827
2048
  validator.check_axis_type(axis, True, True, False)
2828
2049
  axis = validator.check_axis_valid(axis, self.ndim)
2829
2050
 
2830
- return self.max(axis, keepdims) - self.min(axis, keepdims)
2831
-
2832
- def minimum(self, other):
2833
- r"""
2834
- For details, please refer to :func:`mindspore.ops.minimum`.
2835
- """
2836
- return tensor_operator_registry.get('minimum')(self, other)
2051
+ return self.max(axis, keepdims) - self.min(axis, keepdims)
2837
2052
 
2838
- def clamp(self, min=None, max=None):
2053
+ def clamp_(self, min=None, max=None):
2839
2054
  r"""
2840
- For details, please refer to :func:`mindspore.ops.clamp`.
2841
- """
2842
- return tensor_operator_registry.get('clamp')(self, min, max)
2055
+ In-place version of :func:`mindspore.Tensor.clamp`.
2843
2056
 
2844
- def clip(self, min=None, max=None):
2845
- r"""
2846
- Alias for :func:`mindspore.Tensor.clamp`.
2057
+ .. warning::
2058
+ This is an experimental API that is subject to change or deletion.
2847
2059
  """
2848
- return self.clamp(min, max)
2060
+ return tensor_operator_registry.get('clamp_')(self, min, max)
2849
2061
 
2850
2062
  def init_data(self, slice_index=None, shape=None, opt_shard_group=None):
2851
2063
  """
@@ -2863,7 +2075,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2863
2075
  opt_shard_group(str): Optimizer shard group which is used in auto or semi auto parallel mode
2864
2076
  to get one shard of a parameter's slice. For more information about optimizer parallel, please refer to:
2865
2077
  `Optimizer Parallel
2866
- <https://www.mindspore.cn/docs/en/master/model_train/parallel/optimizer_parallel.html>`_.
2078
+ <https://www.mindspore.cn/tutorials/en/master/parallel/optimizer_parallel.html>`_.
2867
2079
  Default: ``None``.
2868
2080
 
2869
2081
  Returns:
@@ -2944,9 +2156,9 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
2944
2156
 
2945
2157
  # At embedding cache scenes. When size of tensor is out of range, we store data to persistent storage
2946
2158
  if slice_num_of_persistent_data > 1:
2947
- self.assign_value(Tensor_.persistent_data_from_numpy(data, slice_num_of_persistent_data))
2159
+ self.assign_value(TensorPy_.persistent_data_from_numpy(data, slice_num_of_persistent_data))
2948
2160
  else:
2949
- self.assign_value(Tensor_.from_numpy(data))
2161
+ self.assign_value(TensorPy_.from_numpy(data))
2950
2162
  return self
2951
2163
 
2952
2164
  def resize(self, *new_shape):
@@ -3007,7 +2219,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3007
2219
 
3008
2220
  def det(self):
3009
2221
  r"""
3010
- For details, please refer to :func:`mindspore.ops.det`.
2222
+ This interface is deprecated from version 2.4 and will be removed in a future version.
3011
2223
  """
3012
2224
  return tensor_operator_registry.get('det')(self)
3013
2225
 
@@ -3017,12 +2229,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3017
2229
  """
3018
2230
  return tensor_operator_registry.get('diff')(self, n, axis, prepend, append)
3019
2231
 
3020
- def frac(self):
3021
- r"""
3022
- For details, please refer to :func:`mindspore.ops.frac`.
3023
- """
3024
- return tensor_operator_registry.get('frac')(self)
3025
-
3026
2232
  def argwhere(self):
3027
2233
  r"""
3028
2234
  For details, please refer to :func:`mindspore.ops.argwhere`.
@@ -3049,13 +2255,15 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3049
2255
 
3050
2256
  def lgamma(self):
3051
2257
  r"""
3052
- For details, please refer to :func:`mindspore.ops.lgamma`.
2258
+ This interface is deprecated from version 2.4 and will be removed in a future version.
3053
2259
  """
3054
2260
  return tensor_operator_registry.get('lgamma')(self)
3055
2261
 
3056
2262
  def diagonal(self, offset=0, axis1=0, axis2=1):
3057
2263
  """
3058
2264
  For details, please refer to :func:`mindspore.ops.diagonal`.
2265
+ The parameter `axis1` of the current interface is the same as the parameter `dim1` of the reference interface,
2266
+ the parameter `axis2` of the current interface is the same as the parameter `dim2` of the reference interface.
3059
2267
  """
3060
2268
  return tensor_operator_registry.get('diagonal')(self, offset, axis1, axis2)
3061
2269
 
@@ -3102,73 +2310,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3102
2310
  """
3103
2311
  return tensor_operator_registry.get('tracev2')(self, offset, axis1, axis2, dtype)
3104
2312
 
3105
- def take(self, indices, axis=None, mode='clip'):
3106
- """
3107
- Takes elements from a tensor along an axis.
3108
-
3109
- Args:
3110
- indices (Tensor): The indices with shape :math:`(Nj...)` of the values to extract.
3111
- axis (int, optional): The axis over which to select values. By default,
3112
- the flattened input tensor is used. Default: ``None`` .
3113
- mode (str, optional): Support ``'raise'``, ``'wrap'``, ``'clip'``.
3114
-
3115
- - ``raise``: Raises an error;
3116
-
3117
- - ``wrap``: Wraps around;
3118
-
3119
- - ``clip``: Clips to the range. ``'clip'`` mode means that all indices that are
3120
- too large are replaced by the index that addresses the last element
3121
- along that axis. Note that this disables indexing with negative numbers.
3122
-
3123
- Default: ``'clip'`` .
3124
-
3125
- Returns:
3126
- Tensor, the indexed result.
3127
-
3128
- Raises:
3129
- ValueError: If `axis` is out of range, or `mode` has values other than ('raise', 'wrap', 'clip')
3130
-
3131
- Supported Platforms:
3132
- ``Ascend`` ``GPU`` ``CPU``
3133
-
3134
- Examples:
3135
- >>> import numpy as np
3136
- >>> from mindspore import Tensor
3137
- >>> a = Tensor(np.array([4, 3, 5, 7, 6, 8]))
3138
- >>> indices = Tensor(np.array([0, 1, 4]))
3139
- >>> output = a.take(indices)
3140
- >>> print(output)
3141
- [4 3 6]
3142
- """
3143
- if mode not in ('raise', 'wrap', 'clip'):
3144
- raise ValueError(f"For 'Tensor.take', the argument 'mode' should be one of in ['raise', 'wrap', 'clip'],"
3145
- f" but got {mode}.")
3146
- if axis is None:
3147
- a = self.ravel()
3148
- axis = 0
3149
- else:
3150
- a = self
3151
- ndim = a.ndim
3152
- validator.check_axis_in_range(axis, ndim)
3153
- axis = axis + ndim if axis < 0 else axis
3154
-
3155
- shape_a = a.shape
3156
- shape_indices = indices.shape
3157
- size_indices = indices.size
3158
- indices = tensor_operator_registry.get('check_indices')(shape_a[axis], indices, mode)
3159
-
3160
- # reshapes indices to shape (Ni..., Nj..., Nk)
3161
- shape_ni = shape_a[:axis]
3162
- shape_nk = shape_a[axis + 1:]
3163
- shape_out = shape_ni + shape_indices + shape_nk
3164
- shape_indices = tuple(size_indices if i == axis else 1 for i in range(ndim))
3165
- indices = indices.reshape(shape_indices)
3166
- shape_indices = shape_ni + (indices.size,) + shape_nk
3167
- indices = tensor_operator_registry.get('broadcast_to')(indices, shape_indices)
3168
-
3169
- res = tensor_operator_registry.get('gather_d')(a, axis, indices)
3170
- return res.reshape(shape_out)
3171
-
3172
2313
  def choose(self, choices, mode='clip'):
3173
2314
  """
3174
2315
  Construct a tensor from an index tensor and a list of tensors to choose from.
@@ -3249,34 +2390,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3249
2390
 
3250
2391
  def searchsorted(self, v, side='left', sorter=None):
3251
2392
  """
3252
- Finds indices where elements should be inserted to maintain order.
3253
-
3254
- Args:
3255
- v (Union[int, float, bool, list, tuple, Tensor]): Values to insert into the tensor.
3256
- side (str, optional): If 'left', the index of the first suitable
3257
- location found is given. If 'right', return the last such index. If there is
3258
- no suitable index, return either 0 or N (where N is the length of the tensor).
3259
- Default: ``left`` .
3260
- sorter (Union[int, list, tuple, Tensor]): optional tensor of
3261
- integer indices that sort the tensor into ascending order on the innermost dimension
3262
- and the type must be int64. They are typically the result of argsort. Default: ``None`` .
3263
- CPU and GPU can only use default values
3264
-
3265
- Returns:
3266
- Tensor, array of insertion points with the same shape as `v`.
3267
-
3268
- Raises:
3269
- ValueError: If argument for `side` or `sorter` is invalid.
3270
-
3271
- Supported Platforms:
3272
- ``Ascend`` ``GPU`` ``CPU``
3273
-
3274
- Examples:
3275
- >>> import numpy as np
3276
- >>> from mindspore import Tensor
3277
- >>> x = Tensor(np.array([1, 2, 3, 4, 5]))
3278
- >>> print(x.searchsorted(3))
3279
- 2
2393
+ For details, please refer to :func:`mindspore.ops.searchsorted`.
3280
2394
  """
3281
2395
  if side not in ('left', 'right'):
3282
2396
  raise ValueError(f"For 'Tensor.searchsorted', the argument 'side' should be one of in "
@@ -3301,20 +2415,15 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3301
2415
  r"""
3302
2416
  For details, please refer to :func:`mindspore.ops.gather_nd`.
3303
2417
  """
3304
- validator.check_value_type('indices', indices, (Tensor, Tensor_,), 'Tensor.gather_nd')
2418
+ validator.check_value_type('indices', indices, (Tensor, TensorPy_,), 'Tensor.gather_nd')
3305
2419
  return tensor_operator_registry.get('gather_nd')(self, indices)
3306
2420
 
3307
- def gather(self, input_indices, axis, batch_dims=0):
3308
- r"""
3309
- For details, please refer to :func:`mindspore.ops.gather`.
3310
- """
3311
- validator.check_is_int(axis, 'axis')
3312
- validator.check_is_int(batch_dims, "batch_dims")
3313
- return tensor_operator_registry.get('gather')(self, input_indices, axis, batch_dims)
3314
-
3315
2421
  def uniform(self, from_=0., to=1., generator=None):
3316
2422
  r"""
3317
- Generates random numbers in the half-open interval [from\_, to).
2423
+ Generates random numbers that follows a uniform distribution within the half-open interval :math:`[from\_, to)`.
2424
+
2425
+ .. math::
2426
+ P(x)= \frac{1}{to - from\_}
3318
2427
 
3319
2428
  Args:
3320
2429
  from\_ (number): The lower bound of the interval.
@@ -3341,132 +2450,50 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3341
2450
  """
3342
2451
  return tensor_operator_registry.get('uniform')(self, from_, to, generator)
3343
2452
 
3344
- def var(self, axis=None, ddof=0, keepdims=False):
3345
- """
3346
- Compute the variance along the specified axis.
3347
-
3348
- The variance is the average of the squared deviations from the mean, i.e.,
3349
- :math:`var = mean(abs(x - x.mean())**2)`.
2453
+ def uniform_(self, from_=0, to=1, *, generator=None):
2454
+ r"""
2455
+ Update the `self` Tensor in place by generating random numbers sampled from uniform distribution in the
2456
+ half-open interval :math:`[from\_, to)`.
3350
2457
 
3351
- Return the variance, which is computed for the flattened array by default,
3352
- otherwise over the specified axis.
2458
+ .. math::
2459
+ P(x)= \frac{1}{to - from\_}
3353
2460
 
3354
- Note:
3355
- Numpy arguments `dtype`, `out` and `where` are not supported.
2461
+ .. warning::
2462
+ This is an experimental API that is subject to change or deletion.
3356
2463
 
3357
2464
  Args:
3358
- axis (Union[None, int, tuple(int)]): Axis or axes along which the variance is computed.
3359
- The default is to compute the variance of the flattened array. Default: ``None`` .
3360
- ddof (int): Means Delta Degrees of Freedom. Default: ``0`` .
3361
- The divisor used in calculations is :math:`N - ddof`, where :math:`N` represents the number of elements.
3362
- keepdims (bool): Default: ``False`` .
3363
-
3364
- Returns:
3365
- Variance tensor.
3366
-
3367
- See also:
3368
- - :func:`mindspore.Tensor.mean`: Reduce a dimension of a tensor by averaging all elements in the dimension.
3369
- - :func:`mindspore.Tensor.std`: Compute the standard deviation along the specified axis.
2465
+ from\_ (Union[number.Number, Tensor], optional): The lower bound of the uniform distribution, it can be a
2466
+ scalar value or a tensor of any dimension with a single element. Default: ``0``.
2467
+ to (Union[number.Number, Tensor], optional): The upper bound of the uniform distribution, it can be a
2468
+ scalar value or a tensor of any dimension with a single element. Default: ``1``.
3370
2469
 
3371
- Supported Platforms:
3372
- ``Ascend`` ``GPU`` ``CPU``
3373
-
3374
- Examples:
3375
- >>> import numpy as np
3376
- >>> from mindspore import Tensor
3377
- >>> input_x = Tensor(np.array([1., 2., 3., 4.], np.float32))
3378
- >>> output = input_x.var()
3379
- >>> print(output)
3380
- 1.25
3381
- """
3382
- if 0 in self.shape:
3383
- return Tensor(float('nan'), self.dtype)
3384
- if not isinstance(ddof, int):
3385
- raise TypeError("For 'Tensor.var', the type of the argument 'ddof' must be int, but got "
3386
- "{}.".format(type(ddof)))
3387
- if not isinstance(keepdims, bool):
3388
- raise TypeError("For 'Tensor.var', the type of the argument 'keepdims' must be bool, but "
3389
- "got {}.".format(type(keepdims)))
3390
-
3391
- if axis is None:
3392
- axis = ()
3393
- else:
3394
- axis = validator.check_and_canonicalize_axes(axis, self.ndim)
3395
- x_mean = tensor_operator_registry.get('mean')(self, axis, True)
3396
- x_sub = tensor_operator_registry.get('__sub__')(self, x_mean)
3397
- x_pow = tensor_operator_registry.get('__pow__')(x_sub, 2)
3398
- x_sum = tensor_operator_registry.get('reducesum')(bool(keepdims))(x_pow, axis)
3399
- nums = 1
3400
- if axis == ():
3401
- nums = self.size
3402
- else:
3403
- for ax in axis:
3404
- nums *= self.shape[ax]
3405
- return tensor_operator_registry.get('__truediv__')(x_sum, nums - ddof)
3406
-
3407
- def std(self, axis=None, ddof=0, keepdims=False):
3408
- """
3409
- For details, please refer to :func:`mindspore.ops.std`.
3410
- """
3411
- x_var = self.var(axis, ddof, keepdims)
3412
- return tensor_operator_registry.get('__pow__')(x_var, 0.5)
3413
-
3414
- def sum(self, axis=None, dtype=None, keepdims=False, initial=None):
3415
- """
3416
- Return sum of tensor elements over a given axis.
3417
-
3418
- Note:
3419
- Numpy arguments `out`, `where`, `casting`, `order`, `subok`, `signature`, and `extobj` are not supported.
3420
- The `axis` with tensor type is only used for compatibility with older versions and is not recommended.
3421
-
3422
- Args:
3423
- axis (Union[None, int, tuple(int), list(int), Tensor]): Axis or axes along which a sum is performed.
3424
- Default: ``None`` .
3425
- If ``None`` , sum all the elements of the input tensor.
3426
- If the `axis` is negative, it counts from the last to the first `axis`.
3427
- If the `axis` is a tuple or list of ints, a sum is performed on all the axes specified in the tuple
3428
- or list instead of a single `axis` or all the axes as before.
3429
- dtype (:class:`mindspore.dtype`, optional): defaults to ``None`` . Overrides the dtype of the
3430
- output Tensor.
3431
- keepdims (bool): If this is set to ``True`` , the axes which are reduced are left in the result as
3432
- dimensions with size one. With this option, the result will broadcast correctly against the input
3433
- array. If the default value is passed, then `keepdims` will not be passed through to the sum method
3434
- of sub-classes of ndarray, however any non-default value will be. If the sub-class method does not
3435
- implement `keepdims` any exceptions will be raised. Default: ``False`` .
3436
- initial (scalar): Starting value for the sum. Default: ``None`` .
2470
+ Keyword Args:
2471
+ generator (:class:`mindspore.Generator`, optional): a pseudorandom number generator.
2472
+ Default: ``None``, uses the default pseudorandom number generator.
3437
2473
 
3438
2474
  Returns:
3439
- Tensor. A tensor with the same shape as input, with the specified `axis` removed.
3440
- If the input tensor is a 0-d array, or if the `axis` is ``None`` , a scalar is returned.
2475
+ Return `self` Tensor.
3441
2476
 
3442
2477
  Raises:
3443
- TypeError: If input is not array_like, or `axis` is not int, tuple of ints, list of ints or Tensor,
3444
- or `keepdims` is not integer, or `initial` is not scalar.
3445
- ValueError: If any `axis` is out of range or duplicate axes exist.
3446
-
3447
- See also:
3448
- - :func:`mindspore.Tensor.cumsum`: Return the cumulative sum of the elements along a given `axis`.
2478
+ TypeError: If `from_` or `to` is neither a number nor a Tensor.
2479
+ TypeError: If dtype of `from` or `to` is not one of: bool, int8, int16, int32, int64, uint8, float32,
2480
+ float64.
2481
+ ValueError: If `from_` or `to` is Tensor but contains multiple elements.
2482
+ RuntimeError: If `from_` is larger than `to`.
3449
2483
 
3450
2484
  Supported Platforms:
3451
- ``Ascend`` ``GPU`` ``CPU``
2485
+ ``Ascend``
3452
2486
 
3453
2487
  Examples:
3454
- >>> import numpy as np
3455
- >>> from mindspore import Tensor
3456
- >>> input_x = Tensor(np.array([-1, 0, 1]).astype(np.float32))
3457
- >>> print(input_x.sum())
3458
- 0.0
3459
- >>> input_x = Tensor(np.arange(10).reshape(2, 5).astype(np.float32))
3460
- >>> print(input_x.sum(axis=1))
3461
- [10. 35.]
3462
- """
3463
- if initial is None:
3464
- res = tensor_operator_registry.get("sum")(self, axis, keepdims, dtype=dtype)
3465
- else:
3466
- res = tensor_operator_registry.get("sum")(self, axis, keepdims, dtype=dtype) + initial
3467
- if dtype is not None and (dtype == mstype.bool_):
3468
- res = res.astype(mstype.bool_)
3469
- return res
2488
+ >>> import mindspore
2489
+ >>> x = mindspore.ops.ones((4, 2))
2490
+ >>> generator = mindspore.Generator()
2491
+ >>> generator.manual_seed(100)
2492
+ >>> output = x.uniform_(1., 2., generator=generator)
2493
+ >>> print(output.shape)
2494
+ (4, 2)
2495
+ """
2496
+ return tensor_operator_registry.get('uniform_')(self, from_=from_, to=to, generator=generator)
3470
2497
 
3471
2498
  def sum_to_size(self, *size):
3472
2499
  r"""
@@ -3512,12 +2539,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3512
2539
  return x.sum(tuple(axes), keepdims=True)
3513
2540
  return x
3514
2541
 
3515
- def nansum(self, axis=None, keepdims=False, dtype=None):
3516
- """
3517
- For details, please refer to :func:`mindspore.ops.nansum`.
3518
- """
3519
- return tensor_operator_registry.get('nansum')(self, axis=axis, keepdims=keepdims, dtype=dtype)
3520
-
3521
2542
  def nanmean(self, axis=None, keepdims=False, *, dtype=None):
3522
2543
  r"""
3523
2544
  For details, please refer to :func:`mindspore.ops.nanmean`.
@@ -3530,91 +2551,51 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3530
2551
  """
3531
2552
  return tensor_operator_registry.get('nanmedian')(self, axis, keepdims)
3532
2553
 
3533
- def repeat(self, repeats, axis=None):
2554
+ def bernoulli(self, *, generator=None):
2555
+ r"""
2556
+ For details, please refer to :func:`mindspore.mint.bernoulli`.
3534
2557
  """
3535
- Repeat elements of a tensor.
2558
+ return tensor_operator_registry.get('bernoulli')(self, generator=generator)
2559
+
2560
+ def random_(self, from_=0, to=None, *, generator=None):
2561
+ r"""
2562
+ Fill the tensor with numbers sampled from a discrete uniform distribution over an
2563
+ interval :math:`[from\_, to-1]`.
2564
+
2565
+ .. warning::
2566
+ This is an experimental API that is subject to change or deletion.
3536
2567
 
3537
2568
  Args:
3538
- repeats (Union[int, tuple, list]): The number of repetitions for each element.
3539
- `repeats` is broadcasted to fit the shape of the given axis.
3540
- axis (int, optional): The axis along which to repeat values. By default,
3541
- use the flattened input tensor, and return a flat output tensor. Default: ``None``.
2569
+ from\_ (Union[number.Number, Tensor], optional): the lower bound of the generated random number.
2570
+ It can be a scalar value or a Tensor of any dimension with only a single element. Default: 0.
2571
+ to (Union[number.Number, Tensor], optional): the upper bound of the generated random number.
2572
+ By default it's the upper limit of the input data type.
2573
+ It can be a scalar value or a Tensor of any dimension with only a single element.
2574
+ Default: ``None``.
2575
+
2576
+ Keyword Args:
2577
+ generator (:class:`mindspore.Generator`, optional): a pseudorandom number generator.
2578
+ Default: ``None``, uses the default pseudorandom number generator.
3542
2579
 
3543
2580
  Returns:
3544
- Tensor, has the same shape as input tensor except along the given axis.
2581
+ The input tensor.
3545
2582
 
3546
2583
  Raises:
3547
- ValueError: If the axis is out of range.
3548
- TypeError: If arguments have types not specified above.
3549
-
3550
- See also:
3551
- - :func:`mindspore.Tensor.reshape`: Give a new shape to a tensor without changing its data.
3552
- - :func:`mindspore.Tensor.resize`: Changes shape and size of tensor in-place.
2584
+ TypeError: If `from_` or `to` is not integer.
2585
+ RuntimeError: If `from_` >= `to`.
3553
2586
 
3554
2587
  Supported Platforms:
3555
- ``Ascend`` ``GPU`` ``CPU``
2588
+ ``Ascend``
3556
2589
 
3557
2590
  Examples:
3558
- >>> import numpy as np
3559
2591
  >>> from mindspore import Tensor
3560
- >>> x = Tensor(np.array(3))
3561
- >>> print(x.repeat(4))
3562
- [3 3 3 3]
3563
- >>> x = Tensor(np.array([[1, 2],[3, 4]]))
3564
- >>> print(x.repeat(2))
3565
- [1 1 2 2 3 3 4 4]
3566
- >>> print(x.repeat(3, axis=1))
3567
- [[1 1 1 2 2 2]
3568
- [3 3 3 4 4 4]]
3569
- >>> print(x.repeat([1,2], axis=0))
3570
- [[1 2]
3571
- [3 4]
3572
- [3 4]]
2592
+ >>> a = Tensor([[2, 3, 4], [1, 2, 3]])
2593
+ >>> from_ = 0
2594
+ >>> to = 5
2595
+ >>> print(a.random_(from_, to).shape)
2596
+ (2, 3)
3573
2597
  """
3574
- if not isinstance(repeats, (tuple, list)):
3575
- repeats = (repeats,)
3576
- for index, element in enumerate(repeats):
3577
- if not isinstance(element, int):
3578
- raise TypeError(f"For 'Tensor.repeat', each element in {repeats} should be int, but got "
3579
- f"{type(element)} at index {index}.")
3580
- input_x = self
3581
- if axis is None:
3582
- input_x = self.ravel()
3583
- axis = 0
3584
- if axis is not None and not isinstance(axis, int):
3585
- raise TypeError(f"For 'Tensor.repeat', the argument 'axis' should be int, but got {type(axis)}.")
3586
- validator.check_axis_in_range(axis, input_x.ndim)
3587
- axis = axis + input_x.ndim if axis < 0 else axis
3588
-
3589
- if len(repeats) == 1:
3590
- repeats = repeats[0]
3591
- if repeats == 0:
3592
- return Tensor_(input_x.dtype, (0,))
3593
- return tensor_operator_registry.get('repeat_elements')(input_x, repeats, axis)
3594
- size = input_x.shape[axis]
3595
- if len(repeats) != size:
3596
- raise ValueError(f"For 'Tensor.repeat', the length of 'repeats' must be the same as the shape of the "
3597
- f"original tensor in the 'axis' dimension, but got the length of 'repeats' "
3598
- f"{len(repeats)}, the shape of the original tensor in the 'axis' dimension {size}.")
3599
- subs = tensor_operator_registry.get('tensor_split')(input_x, size, axis)
3600
- repeated_subs = []
3601
- for sub, rep in zip(subs, repeats):
3602
- if rep != 0:
3603
- repeated_subs.append(tensor_operator_registry.get('repeat_elements')(sub, rep, axis))
3604
- return tensor_operator_registry.get('concatenate')(repeated_subs, axis)
3605
-
3606
- @repeat_interleave_mint
3607
- def repeat_interleave(self, repeats, dim=None):
3608
- """
3609
- For details, please refer to :func:`mindspore.ops.repeat_interleave`.
3610
- """
3611
- return tensor_operator_registry.get('repeat_interleave')(self, repeats, dim)
3612
-
3613
- def bernoulli(self, p=0.5, seed=None):
3614
- r"""
3615
- For details, please refer to :func:`mindspore.ops.bernoulli`.
3616
- """
3617
- return tensor_operator_registry.get('bernoulli')(self, p, seed)
2598
+ return tensor_operator_registry.get('random_')(self, from_=from_, to=to, generator=generator)
3618
2599
 
3619
2600
  def random_categorical(self, num_sample, seed=0, dtype=mstype.int64):
3620
2601
  r"""
@@ -3624,24 +2605,71 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3624
2605
  validator.check_is_int(seed, 'seed')
3625
2606
  return tensor_operator_registry.get('random_categorical')(self, num_sample, seed, dtype)
3626
2607
 
3627
- def masked_select(self, mask):
3628
- """
3629
- For details, please refer to :func:`mindspore.ops.masked_select`.
3630
- """
3631
- return tensor_operator_registry.get('masked_select')(self, mask)
3632
-
3633
2608
  def gather_elements(self, dim, index):
3634
2609
  """
3635
2610
  For details, please refer to :func:`mindspore.ops.gather_elements`.
3636
2611
  """
3637
- validator.check_value_type('index', index, (Tensor, Tensor_,), 'Tensor.gather_elements')
2612
+ validator.check_value_type('index', index, (Tensor, TensorPy_,), 'Tensor.gather_elements')
3638
2613
  return tensor_operator_registry.get('gather_elements')(self, dim, index)
3639
2614
 
3640
- def nonzero(self, as_tuple=False):
3641
- """
3642
- For details, please refer to :func:`mindspore.ops.nonzero`.
2615
+ def nonzero(self, *, as_tuple=False):
2616
+ r"""
2617
+ Return the positions of all non-zero values.
2618
+
2619
+ Note:
2620
+ The rank of `self`.
2621
+
2622
+ - Ascend: its rank can be equal to 0 except O2 mode.
2623
+ - CPU/GPU: its rank should be greater than or eaqual to 1.
2624
+
2625
+ Keyword Args:
2626
+ as_tuple (bool, optional): Whether the output is tuple.
2627
+ If ``False`` , return Tensor. Default: ``False`` .
2628
+ If ``True`` , return Tuple of Tensor, only support ``Ascend`` .
2629
+
2630
+ Returns:
2631
+ - If `as_tuple` is ``False``, return the Tensor, a 2-D Tensor whose data type is int64,
2632
+ containing the positions of all non-zero values of the `self` .
2633
+ - If `as_tuple` is ``True``, return the Tuple of Tensor and data type is int64.
2634
+ The Tuple length is the dimension of the `self` tensor,
2635
+ and each element is the 1D tensor of the subscript of all non-zero elements of
2636
+ the `self` tensor in that dimension.
2637
+
2638
+ Raises:
2639
+ TypeError: If `self` is not Tensor.
2640
+ TypeError: If `as_tuple` is not bool.
2641
+ RuntimeError: On GPU or CPU or Ascend O2 mode, if dim of `input` equals to 0.
2642
+
2643
+ Supported Platforms:
2644
+ ``Ascend`` ``GPU`` ``CPU``
2645
+
2646
+ Examples:
2647
+ >>> import mindspore
2648
+ >>> import numpy as np
2649
+ >>> from mindspore import Tensor
2650
+ >>> x = Tensor(np.array([[[1, 0], [-5, 0]]]), mindspore.int32)
2651
+ >>> output = x.nonzero()
2652
+ >>> print(output)
2653
+ [[0 0 0]
2654
+ [0 1 0]]
2655
+ >>> x = Tensor(np.array([1, 0, 2, 0, 3]), mindspore.int32)
2656
+ >>> output = x.nonzero(as_tuple=False)
2657
+ >>> print(output)
2658
+ [[0]
2659
+ [2]
2660
+ [4]]
2661
+ >>> x = Tensor(np.array([[[1, 0], [-5, 0]]]), mindspore.int32)
2662
+ >>> output = x.nonzero(as_tuple=True)
2663
+ >>> print(output)
2664
+ (Tensor(shape=[2], dtype=Int64, value=[0, 0]),
2665
+ Tensor(shape=[2], dtype=Int64, value=[0, 1]),
2666
+ Tensor(shape=[2], dtype=Int64, value=[0, 0]))
2667
+ >>> x = Tensor(np.array([1, 0, 2, 0, 3]), mindspore.int32)
2668
+ >>> output = x.nonzero(as_tuple=True)
2669
+ >>> print(output)
2670
+ (Tensor(shape=[3], dtype=Int64, value=[0, 2, 4]), )
3643
2671
  """
3644
- return tensor_operator_registry.get('nonzero')(self, as_tuple)
2672
+ return tensor_operator_registry.get('nonzero')(self, as_tuple=as_tuple)
3645
2673
 
3646
2674
  def svd(self, full_matrices=False, compute_uv=True):
3647
2675
  """
@@ -3654,12 +2682,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3654
2682
  s, _, _ = svd_op(full_matrices, compute_uv)(self)
3655
2683
  return s
3656
2684
 
3657
- def hardshrink(self, lambd=0.5):
3658
- r"""
3659
- For details, please refer to :func:`mindspore.ops.hardshrink`.
3660
- """
3661
- return tensor_operator_registry.get('hardshrink')(self, lambd)
3662
-
3663
2685
  def heaviside(self, values):
3664
2686
  r"""
3665
2687
  For details, please refer to :func:`mindspore.ops.heaviside`.
@@ -3775,13 +2797,10 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3775
2797
  >>> print(out2)
3776
2798
  1
3777
2799
  """
3778
- return self.asnumpy().tolist()
2800
+ if self.ndim == 1 and self.size == 0:
2801
+ return []
2802
+ return self._tolist()
3779
2803
 
3780
- def unbind(self, dim=0):
3781
- r"""
3782
- For details, please refer to :func:`mindspore.ops.unbind`.
3783
- """
3784
- return tensor_operator_registry.get('unbind')(self, dim)
3785
2804
 
3786
2805
  def unsorted_segment_min(self, segment_ids, num_segments):
3787
2806
  r"""
@@ -3801,14 +2820,15 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3801
2820
  """
3802
2821
  return tensor_operator_registry.get('unsorted_segment_prod')(self, segment_ids, num_segments)
3803
2822
 
3804
- def unique_consecutive(self, return_idx=False, return_counts=False, axis=None):
2823
+ def unique_consecutive(self, return_inverse=False, return_counts=False, dim=None):
3805
2824
  """
3806
2825
  For details, please refer to :func:`mindspore.ops.unique_consecutive`.
3807
2826
  """
3808
- output, idx, counts = tensor_operator_registry.get("unique_consecutive")(return_idx, return_counts, axis)(self)
3809
- if return_idx and return_counts:
2827
+ output, idx, counts =\
2828
+ tensor_operator_registry.get("unique_consecutive")(return_inverse, return_counts, dim)(self)
2829
+ if return_inverse and return_counts:
3810
2830
  return output, idx, counts
3811
- if return_idx:
2831
+ if return_inverse:
3812
2832
  return output, idx
3813
2833
  if return_counts:
3814
2834
  return output, counts
@@ -3820,12 +2840,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3820
2840
  """
3821
2841
  return tensor_operator_registry.get("unique_with_pad")(self, pad_num)
3822
2842
 
3823
- def diag(self):
3824
- r"""
3825
- For details, please refer to :func:`mindspore.ops.diag`.
3826
- """
3827
- return tensor_operator_registry.get('diag')(self)
3828
-
3829
2843
  def diagflat(self, offset=0):
3830
2844
  r"""
3831
2845
  For details, please refer to :func:`mindspore.ops.diagflat`.
@@ -3838,13 +2852,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3838
2852
  """
3839
2853
  return tensor_operator_registry.get("xdivy")(self, y)
3840
2854
 
3841
- @split_mint
3842
- def split(self, split_size_or_sections, axis=0):
3843
- """
3844
- For details, please refer to :func:`mindspore.ops.split`.
3845
- """
3846
- return tensor_operator_registry.get('split')(self, split_size_or_sections, axis)
3847
-
3848
2855
  def tensor_split(self, indices_or_sections, axis=0):
3849
2856
  """
3850
2857
  For details, please refer to :func:`mindspore.ops.tensor_split`.
@@ -3870,12 +2877,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3870
2877
  """
3871
2878
  return tensor_operator_registry.get('dsplit')(self, indices_or_sections)
3872
2879
 
3873
- def xlogy(self, y):
3874
- r"""
3875
- For details, please refer to :func:`mindspore.ops.xlogy`.
3876
- """
3877
- return tensor_operator_registry.get("xlogy")(self, y)
3878
-
3879
2880
  def eigvals(self):
3880
2881
  r"""
3881
2882
  For details, please refer to :func:`mindspore.ops.eigvals`.
@@ -3885,30 +2886,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3885
2886
  """
3886
2887
  return tensor_operator_registry.get("eigvals")()(self)
3887
2888
 
3888
- def erf(self):
3889
- r"""
3890
- For details, please refer to :func:`mindspore.ops.erf`.
3891
- """
3892
- return tensor_operator_registry.get("erf")(self)
3893
-
3894
- def erfc(self):
3895
- r"""
3896
- For details, please refer to :func:`mindspore.ops.erfc`.
3897
- """
3898
- return tensor_operator_registry.get("erfc")(self)
3899
-
3900
- def tile(self, reps):
3901
- r"""
3902
- For details, please refer to :func:`mindspore.ops.tile`.
3903
- """
3904
- return tensor_operator_registry.get('tile')(self, reps)
3905
-
3906
- def topk(self, k, dim=None, largest=True, sorted=True):
3907
- r"""
3908
- For details, please refer to :func:`mindspore.ops.topk`.
3909
- """
3910
- return tensor_operator_registry.get("topk")(self, k, dim, largest, sorted)
3911
-
3912
2889
  def top_k(self, k, sorted=True):
3913
2890
  r"""
3914
2891
  `Tensor.top_k` is deprecated, please use `Tensor.topk` instead.
@@ -3917,55 +2894,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3917
2894
  validator.check_bool(sorted, 'sorted')
3918
2895
  return tensor_operator_registry.get("top_k")(self, k, sorted)
3919
2896
 
3920
- def sigmoid(self):
3921
- r"""
3922
- For details, please refer to :func:`mindspore.ops.sigmoid`.
3923
- """
3924
- return tensor_operator_registry.get("sigmoid")(self)
3925
-
3926
- def median(self, axis=-1, keepdims=False):
3927
- r"""
3928
- For details, please refer to :func:`mindspore.ops.median`.
3929
- """
3930
- validator.check_axis_in_range(axis, self.ndim)
3931
- return tensor_operator_registry.get('median')(False, axis, keepdims)(self)
3932
-
3933
- def addmv(self, mat, vec, beta=1, alpha=1):
3934
- r"""
3935
- For details, please refer to :func:`mindspore.ops.addmv`.
3936
- """
3937
- return tensor_operator_registry.get('addmv')(self, mat, vec, beta=beta, alpha=alpha)
3938
-
3939
- def asinh(self):
3940
- r"""
3941
- For details, please refer to :func:`mindspore.ops.asinh`.
3942
- """
3943
- return tensor_operator_registry.get('asinh')(self)
3944
-
3945
- def arcsinh(self):
3946
- r"""
3947
- Alias for :func:`mindspore.Tensor.asinh`.
3948
- """
3949
- return tensor_operator_registry.get('arcsinh')(self)
3950
-
3951
- def atan(self):
3952
- r"""
3953
- For details, please refer to :func:`mindspore.ops.atan`.
3954
- """
3955
- return tensor_operator_registry.get('atan')(self)
3956
-
3957
- def atanh(self):
3958
- r"""
3959
- For details, please refer to :func:`mindspore.ops.atanh`.
3960
- """
3961
- return tensor_operator_registry.get('atanh')(self)
3962
-
3963
- def arctanh(self):
3964
- r"""
3965
- Alias for :func:`mindspore.Tensor.atanh`.
3966
- """
3967
- return tensor_operator_registry.get('arctanh')(self)
3968
-
3969
2897
  def bmm(self, mat2):
3970
2898
  r"""
3971
2899
  For details, please refer to :func:`mindspore.ops.bmm`.
@@ -3976,8 +2904,14 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3976
2904
  r"""
3977
2905
  Performs tensor dtype conversion.
3978
2906
 
2907
+ Note:
2908
+ - If the `self` Tensor already has the correct `mindspore.dtype`, then self is returned.
2909
+ Otherwise, the returned tensor is a copy of `self` with the desired mindspore.dtype.
2910
+ - When converting complex numbers to boolean type, the imaginary part of the complex number is not
2911
+ taken into account. As long as the real part is non-zero, it returns True; otherwise, it returns False.
2912
+
3979
2913
  Args:
3980
- dtype (Number): The valid data type of the output tensor. Only constant value is allowed.
2914
+ dtype (dtype.Number): The valid data type of the output tensor. Only constant value is allowed.
3981
2915
 
3982
2916
  Returns:
3983
2917
  Tensor, converted to the specified `dtype`.
@@ -3999,7 +2933,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
3999
2933
  >>> print(output.dtype)
4000
2934
  Int32
4001
2935
  """
4002
- return tensor_operator_registry.get('to')(self, dtype)
2936
+ return self if self.dtype == dtype else self._to(dtype)
4003
2937
 
4004
2938
  def type(self, dtype=None):
4005
2939
  r"""
@@ -4029,29 +2963,49 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4029
2963
  return str(self.dtype)
4030
2964
  return self.astype(dtype)
4031
2965
 
2966
+
4032
2967
  def type_as(self, other):
4033
2968
  r"""
4034
- Change the dtype of the Tensor to the dtype of `other`.
2969
+ Returns self tensor cast to the type of the with the input other tensor.
2970
+
2971
+ .. warning::
2972
+ This is an experimental API that is subject to change or deletion.
2973
+
2974
+ Note:
2975
+ When converting complex numbers to boolean type, the imaginary part of the complex number is not
2976
+ taken into account. As long as the real part is non-zero, it returns True; otherwise, it returns False.
4035
2977
 
4036
2978
  Args:
4037
- other (Tensor): The return tensor has the same dtype as `other`.
2979
+ other (Tensor): The tensor whose data type is specified.
2980
+ The shape of tensor is :math:`(x_0, x_1, ..., x_R)`.
4038
2981
 
4039
2982
  Returns:
4040
- Tensor, has the same dtype as `other`.
2983
+ Tensor, the shape of tensor is the same as `self`, :math:`(x_0, x_1, ..., x_R)`.
2984
+
2985
+ Raises:
2986
+ TypeError: If `other` is not a Tensor.
4041
2987
 
4042
2988
  Supported Platforms:
4043
2989
  ``Ascend`` ``GPU`` ``CPU``
4044
2990
 
4045
2991
  Examples:
4046
2992
  >>> import mindspore
2993
+ >>> import numpy as np
4047
2994
  >>> from mindspore import Tensor
4048
- >>> x = Tensor([[1, 2], [3, 4]], dtype=mindspore.float32)
4049
- >>> y = Tensor([[1, 2], [3, 4]], dtype=mindspore.int32)
4050
- >>> x = x.type_as(y)
4051
- >>> print(x.dtype)
2995
+ >>> input_np = np.random.randn(2, 3, 4, 5).astype(np.float32)
2996
+ >>> self = Tensor(input_np)
2997
+ >>> other_np = np.random.randn(2, 3, 4).astype(np.int32)
2998
+ >>> other = Tensor(other_np)
2999
+ >>> output = self.type_as(other)
3000
+ >>> print(output.dtype)
4052
3001
  Int32
3002
+ >>> print(output.shape)
3003
+ (2, 3, 4, 5)
4053
3004
  """
4054
- return self.astype(other.dtype)
3005
+ if self.dtype == other.dtype:
3006
+ return self
3007
+ return TensorPy_.type_as(self, other)
3008
+
4055
3009
 
4056
3010
  def bool(self):
4057
3011
  r"""
@@ -4073,14 +3027,56 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4073
3027
  >>> print(output.dtype)
4074
3028
  Bool
4075
3029
  """
4076
- return tensor_operator_registry.get('bool')(self, mstype.bool_)
3030
+ return self.to(mstype.bool_)
3031
+
3032
+ def float(self):
3033
+ r"""
3034
+ Converts input tensor dtype to `float32`.
3035
+
3036
+ Returns:
3037
+ Tensor, converted to the `float32` dtype.
3038
+
3039
+ Supported Platforms:
3040
+ ``Ascend`` ``GPU`` ``CPU``
3041
+
3042
+ Examples:
3043
+ >>> import numpy as np
3044
+ >>> import mindspore
3045
+ >>> from mindspore import Tensor
3046
+ >>> input_x = Tensor(np.ones([2,2]), mindspore.int32)
3047
+ >>> output = input_x.float()
3048
+ >>> print(output.dtype)
3049
+ Float32
3050
+ """
3051
+ return self.to(mstype.float32)
3052
+
3053
+ def bfloat16(self):
3054
+ r"""
3055
+ Converts input tensor dtype to `bfloat16`.
3056
+
3057
+ Returns:
3058
+ Tensor, converted to the `bfloat16` dtype.
3059
+
3060
+ Supported Platforms:
3061
+ ``Ascend`` ``GPU`` ``CPU``
3062
+
3063
+ Examples:
3064
+ >>> import numpy as np
3065
+ >>> import mindspore
3066
+ >>> from mindspore import Tensor
3067
+ >>> input_x = Tensor(np.ones([2,2]), mindspore.int32)
3068
+ >>> output = input_x.bfloat16()
3069
+ >>> print(output.dtype)
3070
+ BFloat16
3071
+ """
3072
+ return self.to(mstype.bfloat16)
4077
3073
 
4078
- def float(self):
3074
+ def double(self):
4079
3075
  r"""
4080
- Converts input tensor dtype to `float32`.
3076
+ Converts input tensor dtype to `float64`.
4081
3077
 
4082
3078
  Returns:
4083
- Tensor, converted to the `float32` dtype.
3079
+ Tensor, converted to the `float64` dtype.
4084
3080
 
4085
3081
  Supported Platforms:
4086
3082
  ``Ascend`` ``GPU`` ``CPU``
@@ -4090,11 +3086,11 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4090
3086
  >>> import mindspore
4091
3087
  >>> from mindspore import Tensor
4092
3088
  >>> input_x = Tensor(np.ones([2,2]), mindspore.int32)
4093
- >>> output = input_x.float()
3089
+ >>> output = input_x.double()
4094
3090
  >>> print(output.dtype)
4095
- Float32
3091
+ Float64
4096
3092
  """
4097
- return tensor_operator_registry.get('float')(self, mstype.float32)
3093
+ return self.to(mstype.float64)
4098
3094
 
4099
3095
  def half(self):
4100
3096
  r"""
@@ -4115,7 +3111,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4115
3111
  >>> print(output.dtype)
4116
3112
  Float16
4117
3113
  """
4118
- return tensor_operator_registry.get('half')(self, mstype.float16)
3114
+ return self.to(mstype.float16)
4119
3115
 
4120
3116
  def int(self):
4121
3117
  r"""
@@ -4136,7 +3132,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4136
3132
  >>> print(output.dtype)
4137
3133
  Int32
4138
3134
  """
4139
- return tensor_operator_registry.get('int')(self, mstype.int32)
3135
+ return self.to(mstype.int32)
4140
3136
 
4141
3137
  def byte(self):
4142
3138
  r"""
@@ -4155,9 +3151,9 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4155
3151
  >>> input_x = Tensor(np.ones([2,2]), mindspore.float32)
4156
3152
  >>> output = input_x.byte()
4157
3153
  >>> print(output.dtype)
4158
- uint8
3154
+ UInt8
4159
3155
  """
4160
- return tensor_operator_registry.get('byte')(self, mstype.uint8)
3156
+ return self.to(mstype.uint8)
4161
3157
 
4162
3158
  def long(self):
4163
3159
  r"""
@@ -4178,7 +3174,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4178
3174
  >>> print(output.dtype)
4179
3175
  Int64
4180
3176
  """
4181
- return tensor_operator_registry.get('long')(self, mstype.int64)
3177
+ return self.to(mstype.int64)
4182
3178
 
4183
3179
  def short(self):
4184
3180
  r"""
@@ -4200,7 +3196,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4200
3196
  >>> output
4201
3197
  Tensor(shape=[5], dtype=Int16, value= [1, 2, 3, 4, 5])
4202
3198
  """
4203
- return tensor_operator_registry.get('cast')(self, mstype.int16)
3199
+ return self.to(mstype.int16)
4204
3200
 
4205
3201
  def cholesky(self, upper=False):
4206
3202
  r"""
@@ -4210,7 +3206,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4210
3206
 
4211
3207
  def cholesky_inverse(self, upper=False):
4212
3208
  r"""
4213
- For details, please refer to :func:`mindspore.ops.cholesky_inverse`.
3209
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4214
3210
  """
4215
3211
  return tensor_operator_registry.get('cholesky_inverse')(self, upper=upper)
4216
3212
 
@@ -4229,12 +3225,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4229
3225
  """
4230
3226
  return tensor_operator_registry.get('conj')(self)
4231
3227
 
4232
- def count_nonzero(self, axis=(), keep_dims=False, dtype=mstype.int32):
4233
- r"""
4234
- For details, please refer to :func:`mindspore.ops.count_nonzero`.
4235
- """
4236
- return tensor_operator_registry.get('count_nonzero')(self, axis, keep_dims, dtype)
4237
-
4238
3228
  def cross(self, other, dim=None):
4239
3229
  r"""
4240
3230
  For details, please refer to :func:`mindspore.ops.cross`.
@@ -4247,11 +3237,14 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4247
3237
  """
4248
3238
  return tensor_operator_registry.get('erfinv')(self)
4249
3239
 
4250
- def less_equal(self, other):
3240
+ def erfinv_(self):
4251
3241
  r"""
4252
- For details, please refer to :func:`mindspore.ops.less_equal`.
3242
+ In-place version of erfinv(), for details, please refer to :func:`mindspore.ops.erfinv`.
3243
+
3244
+ .. warning::
3245
+ This is an experimental API that is subject to change or deletion.
4253
3246
  """
4254
- return tensor_operator_registry.get('less_equal')(self, other)
3247
+ return tensor_operator_registry.get('erfinv_')(self)
4255
3248
 
4256
3249
  def lcm(self, other):
4257
3250
  r"""
@@ -4284,6 +3277,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4284
3277
  def expand(self, size):
4285
3278
  r"""
4286
3279
  For details, please refer to :func:`mindspore.ops.broadcast_to`.
3280
+ The parameter `size` of the current interface is the same as the parameter `shape` of the reference interface.
4287
3281
  """
4288
3282
  if isinstance(size, Tensor):
4289
3283
  size = tensor_operator_registry.get('tensortotuple')()(size)
@@ -4297,59 +3291,80 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4297
3291
 
4298
3292
  def multiply(self, value):
4299
3293
  r"""
4300
- For details, please refer to :func:`mindspore.ops.multiply`.
3294
+ For details, please refer to :func:`mindspore.ops.mul`.
3295
+ The parameter `value` of the current interface is the same as the parameter `other` of the reference interface.
4301
3296
  """
4302
3297
  return tensor_operator_registry.get('multiply')(self, value)
4303
3298
 
4304
- def div(self, value, *, rounding_mode=None):
4305
- r"""
4306
- For details, please refer to :func:`mindspore.ops.div`.
4307
- """
4308
- return tensor_operator_registry.get('div')(self, value, rounding_mode=rounding_mode)
4309
-
4310
- def divide(self, value, *, rounding_mode=None):
4311
- r"""
4312
- Alias for :func:`mindspore.Tensor.div`.
4313
- """
4314
- return tensor_operator_registry.get('div')(self, value, rounding_mode=rounding_mode)
4315
-
4316
- def eq(self, other):
4317
- r"""
4318
- For details, please refer to :func:`mindspore.ops.eq`.
4319
- """
4320
- return tensor_operator_registry.get('equal')(self, other)
4321
-
4322
3299
  def equal(self, other):
4323
3300
  r"""
4324
3301
  For details, please refer to :func:`mindspore.ops.equal`.
4325
3302
  """
4326
3303
  return tensor_operator_registry.get('equal')(self, other)
4327
3304
 
4328
- def expm1(self):
3305
+ def index_add_(self, dim, index, source, *, alpha=1):
4329
3306
  r"""
4330
- For details, please refer to :func:`mindspore.ops.expm1`.
4331
- """
4332
- return tensor_operator_registry.get('expm1')(self)
3307
+ Accumulate the elements of `alpha` times `source` into the `self` by adding to the index
3308
+ in the order given in `index`. For example, if `dim == 0`, `index[i] == j`, and `alpha = -1`,
3309
+ then the `i` th row of `source` is subtracted from the `j` th row of `self` .
3310
+ The `dim` th dimension of `source` must have the same size as the length of `index` ,
3311
+ and all other dimensions must match `self`, or an error will be raised.
3312
+ For a 3-D tensor the output is defined as follows:
4333
3313
 
4334
- def index_add(self, dim, index, source, *, alpha=1):
4335
- r"""
4336
- For details, please refer to :func:`mindspore.ops.index_add`.
4337
- """
4338
- check_is_number(alpha, (int, float))
4339
- source = tensor_operator_registry.get('__mul__')(source, alpha)
4340
- return tensor_operator_registry.get('index_add')(self, indices=index, y=source, axis=dim)
3314
+ .. math::
3315
+ \begin{array}{ll}
3316
+ self[index[i],\ :,\ :]\ +=\ alpha * src[i,\ :,\ :] \qquad \#if\ dim == 0 \\
3317
+ self[:,\ \ index[i],\ :]\ +=\ alpha * src[:,\ \ i,\ :] \qquad \#if\ dim == 1 \\
3318
+ self[:,\ :,\ \ index[i]]\ +=\ alpha * src[:,\ :,\ \ i] \qquad\#if\ dim == 2 \\
3319
+ \end{array}
4341
3320
 
4342
- def greater(self, other):
4343
- r"""
4344
- For details, please refer to :func:`mindspore.ops.greater`.
4345
- """
4346
- return tensor_operator_registry.get('greater')(self, other)
3321
+ .. warning::
3322
+ This is an experimental API that is subject to change or deletion.
4347
3323
 
4348
- def greater_equal(self, other):
4349
- r"""
4350
- For details, please refer to :func:`mindspore.ops.greater_equal`.
3324
+ Args:
3325
+ dim (int): The dimension along which to index.
3326
+ index (Tensor): Add the value of `self` and `source` along the dimension of the `dim` according to
3327
+ the specified index value, with data type int32. The `index` must be 1D with the same size as
3328
+ the size of `source` in the `dim` dimension. The values of `index` should be in [0, b),
3329
+ where the b is the size of `self` in the `dim` dimension.
3330
+ source (Tensor): The input tensor with the value to add. Must have same data type as `self`.
3331
+ The shape must be the same as `self` except the `dim` th dimension.
3332
+
3333
+ Keyword Args:
3334
+ alpha (number, optional): The scalar multiplier for source. Default: ``1``.
3335
+
3336
+ Returns:
3337
+ Tensor, has the same shape and dtype as `self`.
3338
+
3339
+ Raises:
3340
+ TypeError: If neither `index` nor `source` is a Tensor.
3341
+ ValueError: If dim is out of `self` rank's range.
3342
+ ValueError: If `self` rank is not the same as `source` rank.
3343
+ ValueError: If shape of `index` is not 1D or size of `index` is not equal to dimension
3344
+ of `source[dim]`.
3345
+ ValueError: If `source`'s shape is not the same as `self` except the `dim` th dimension.
3346
+
3347
+ Supported Platforms:
3348
+ ``Ascend``
3349
+
3350
+ Examples:
3351
+ >>> import numpy as np
3352
+ >>> import mindspore
3353
+ >>> from mindspore import Tensor
3354
+ >>> x = Tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), mindspore.float32)
3355
+ >>> index = Tensor(np.array([0, 2]), mindspore.int32)
3356
+ >>> y = Tensor(np.array([[0.5, 1.0], [1.0, 1.5], [2.0, 2.5]]), mindspore.float32)
3357
+ >>> output = x.index_add_(1, index, y, alpha=1)
3358
+ >>> print(output)
3359
+ [[ 1.5 2. 4. ]
3360
+ [ 5. 5. 7.5]
3361
+ [ 9. 8. 11.5]]
3362
+ >>> print(x)
3363
+ [[ 1.5 2. 4. ]
3364
+ [ 5. 5. 7.5]
3365
+ [ 9. 8. 11.5]]
4351
3366
  """
4352
- return tensor_operator_registry.get('greater_equal')(self, other)
3367
+ return tensor_operator_registry.get('index_add_')(self, dim, index, source, alpha)
4353
3368
 
4354
3369
  def igamma(self, other):
4355
3370
  r"""
@@ -4363,18 +3378,11 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4363
3378
  """
4364
3379
  return tensor_operator_registry.get('igammac')(self, other)
4365
3380
 
4366
- def isinf(self):
4367
- r"""
4368
- For details, please refer to :func:`mindspore.ops.isinf`.
4369
- """
4370
- return tensor_operator_registry.get('isinf')(self)
4371
-
4372
- @isnan_mint
4373
3381
  def isnan(self):
4374
3382
  r"""
4375
- For details, please refer to :func:`mindspore.ops.isnan`.
3383
+ For details, please refer to :func:`mindspore.ops.ne`.
4376
3384
  """
4377
- return tensor_operator_registry.get('isnan')(self)
3385
+ return self.ne(self)
4378
3386
 
4379
3387
  def flip(self, dims):
4380
3388
  """
@@ -4400,74 +3408,9 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4400
3408
  """
4401
3409
  return tensor_operator_registry.get('is_floating_point')(self)
4402
3410
 
4403
- def is_signed(self):
4404
- """
4405
- Judge whether the data type of tensor is a signed data type.
4406
-
4407
- Returns:
4408
- Bool. If the dtype of `self` is a signed data type, return True. Otherwise, return False.
4409
-
4410
- Supported Platforms:
4411
- ``Ascend`` ``GPU`` ``CPU``
4412
-
4413
- Examples:
4414
- >>> import mindspore as ms
4415
- >>> x = ms.Tensor([1, 2, 3], ms.int64)
4416
- >>> y = ms.Tensor([1, 2, 3], ms.uint64)
4417
- >>> output = x.is_signed()
4418
- >>> output2 = y.is_signed()
4419
- >>> print(output)
4420
- True
4421
- >>> print(output2)
4422
- False
4423
- """
4424
- return self.dtype in mstype.signed_type
4425
-
4426
- def le(self, other):
4427
- r"""
4428
- For details, please refer to :func:`mindspore.ops.le`.
4429
- """
4430
- return tensor_operator_registry.get('le')(self, other)
4431
-
4432
- def less(self, other):
4433
- r"""
4434
- For details, please refer to :func:`mindspore.ops.less`.
4435
- """
4436
- return tensor_operator_registry.get('less')(self, other)
4437
-
4438
- def lt(self, other):
4439
- """
4440
- Alias for :func:`mindspore.Tensor.less`.
4441
- """
4442
- return self.less(other)
4443
-
4444
- def logical_and(self, other):
4445
- r"""
4446
- For details, please refer to :func:`mindspore.ops.logical_and`.
4447
- """
4448
- return tensor_operator_registry.get('logical_and')(self, other)
4449
-
4450
- def logical_not(self):
4451
- r"""
4452
- For details, please refer to :func:`mindspore.ops.logical_not`.
4453
- """
4454
- return tensor_operator_registry.get('logical_not')(self)
4455
-
4456
- def logical_or(self, other):
4457
- r"""
4458
- For details, please refer to :func:`mindspore.ops.logical_or`.
4459
- """
4460
- return tensor_operator_registry.get('logical_or')(self, other)
4461
-
4462
- def logical_xor(self, other):
4463
- r"""
4464
- For details, please refer to :func:`mindspore.ops.logical_xor`.
4465
- """
4466
- return tensor_operator_registry.get('logical_xor')(self, other)
4467
-
4468
3411
  def lstsq(self, A):
4469
3412
  r"""
4470
- For details, please refer to :func:`mindspore.ops.lstsq`.
3413
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4471
3414
  """
4472
3415
  return tensor_operator_registry.get('lstsq')(self, A)
4473
3416
 
@@ -4476,6 +3419,15 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4476
3419
  r"""
4477
3420
  Accessing this property is equivalent to Calling self.adjoint().
4478
3421
  For details, please refer to :func:`mindspore.ops.adjoint`.
3422
+
3423
+ Examples:
3424
+ >>> from mindspore import Tensor
3425
+ >>> import numpy as np
3426
+ >>> x = Tensor(np.array([[0. + 0.j, 1. + 1.j], [2. + 2.j, 3. + 3.j]]))
3427
+ >>> output = x.mH
3428
+ >>> print(output)
3429
+ [[0.-0.j 2.-2.j]
3430
+ [1.-1.j 3.-3.j]]
4479
3431
  """
4480
3432
  return self.adjoint()
4481
3433
 
@@ -4485,6 +3437,14 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4485
3437
  Returns the Tensor that exchanges the last two dimensions.
4486
3438
  Accessing the attribute, x.mT, is equal to calling the method, x.swapaxes(-2, -1).
4487
3439
  For details, please refer to :func:`mindspore.Tensor.swapaxes`.
3440
+
3441
+ Examples:
3442
+ >>> from mindspore import Tensor
3443
+ >>> import numpy as np
3444
+ >>> x = Tensor(np.ones((2, 3, 4)))
3445
+ >>> output = x.mT
3446
+ >>> print(output.shape)
3447
+ (2, 4, 3)
4488
3448
  """
4489
3449
  return self.swapaxes(-2, -1)
4490
3450
 
@@ -4494,12 +3454,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4494
3454
  """
4495
3455
  return tensor_operator_registry.get('mvlgamma')(self, p)
4496
3456
 
4497
- def matmul(self, tensor2):
4498
- r"""
4499
- For details, please refer to :func:`mindspore.ops.matmul`.
4500
- """
4501
- return tensor_operator_registry.get('matmul')(self, tensor2)
4502
-
4503
3457
  def inner(self, other):
4504
3458
  r"""
4505
3459
  For details, please refer to :func:`mindspore.ops.inner`.
@@ -4514,95 +3468,16 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4514
3468
 
4515
3469
  def matrix_power(self, n):
4516
3470
  r"""
4517
- For details, please refer to :func:`mindspore.ops.matrix_power`.
4518
-
4519
- .. warning::
4520
- This is an experimental API that is subject to change or deletion.
4521
-
3471
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4522
3472
  """
4523
3473
  return tensor_operator_registry.get('matrix_power')(self, n)
4524
3474
 
4525
- def maximum(self, other):
4526
- r"""
4527
- For details, please refer to :func:`mindspore.ops.maximum`.
4528
- """
4529
- return tensor_operator_registry.get('maximum')(self, other)
4530
-
4531
- def mm(self, mat2):
4532
- r"""
4533
- For details, please refer to :func:`mindspore.ops.mm`.
4534
- """
4535
- return tensor_operator_registry.get('mm')(self, mat2)
4536
-
4537
3475
  def msort(self):
4538
3476
  r"""
4539
3477
  For details, please refer to :func:`mindspore.ops.msort`.
4540
3478
  """
4541
3479
  return tensor_operator_registry.get('msort')(self)
4542
3480
 
4543
- def mul(self, value):
4544
- r"""
4545
- For details, please refer to :func:`mindspore.ops.mul`.
4546
- """
4547
- return tensor_operator_registry.get('mul')(self, value)
4548
-
4549
- def nan_to_num(self, nan=None, posinf=None, neginf=None):
4550
- """
4551
- For details, please refer to :func:`mindspore.ops.nan_to_num`.
4552
- """
4553
- return tensor_operator_registry.get('nan_to_num')(self, nan, posinf, neginf)
4554
-
4555
- def neg(self):
4556
- r"""
4557
- For details, please refer to :func:`mindspore.ops.neg`.
4558
- """
4559
- return tensor_operator_registry.get('neg')(self)
4560
-
4561
- def ne(self, other):
4562
- r"""
4563
- For details, please refer to :func:`mindspore.ops.ne`.
4564
- """
4565
- return tensor_operator_registry.get('ne')(self, other)
4566
-
4567
- def not_equal(self, other):
4568
- r"""
4569
- For details, please refer to :func:`mindspore.ops.not_equal`.
4570
- """
4571
- return tensor_operator_registry.get('not_equal')(self, other)
4572
-
4573
- def new_zeros(self, size, dtype=None):
4574
- r"""
4575
- Return a tensor of `size` filled with zeros.
4576
-
4577
- .. warning::
4578
- For argument `size`, Tensor type input will be deprecated in the future version.
4579
-
4580
- Args:
4581
- size (Union[int, tuple, list, Tensor]): An int, list or tuple of integers defining the output shape.
4582
- dtype (mindspore.dtype, optional): The desired dtype of the output tensor. If None, the returned tensor has
4583
- thesame dtype as `self`. Default: ``None``.
4584
-
4585
- Returns:
4586
- Tensor, the shape and dtype is defined above and filled with zeros.
4587
-
4588
- Raises:
4589
- TypeError: If `size` is neither an int nor an tuple/list/Tensor of int.
4590
-
4591
- Supported Platforms:
4592
- ``Ascend`` ``GPU`` ``CPU``
4593
-
4594
- Examples:
4595
- >>> import numpy as np
4596
- >>> import mindspore
4597
- >>> from mindspore import Tensor
4598
- >>> x = Tensor(np.array([1, 2, 3]), mindspore.float32)
4599
- >>> output = x.new_zeros((2, 2))
4600
- >>> print(output)
4601
- [[0. 0.]
4602
- [0. 0.]]
4603
- """
4604
- return tensor_operator_registry.get('zeros')(size, dtype)
4605
-
4606
3481
  def zero_(self):
4607
3482
  r"""
4608
3483
  Return a tensor filled with zeros.
@@ -4623,43 +3498,52 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4623
3498
  >>> x = Tensor(np.array([2, 2]))
4624
3499
  >>> output = x.zero_()
4625
3500
  >>> print(output)
4626
- [[0. 0.]
4627
- [0. 0.]]
3501
+ [0 0]
4628
3502
  """
4629
3503
  return tensor_operator_registry.get('zero_')(self)
4630
3504
 
4631
- def new_ones(self, size, dtype=None):
3505
+ def new_empty(self, size, *, dtype=None, device=None):
4632
3506
  r"""
4633
- Return a tensor of `size` filled with ones.
3507
+ Returns an uninitialized Tensor of `size`. Its dtype is specified by `dtype` and its
3508
+ device is specified by `device`.
4634
3509
 
4635
3510
  .. warning::
4636
- For argument `size`, Tensor type input will be deprecated in the future version.
3511
+ This is an experimental API that is subject to change or deletion.
4637
3512
 
4638
3513
  Args:
4639
- size (Union[int, tuple, list, Tensor]): An int, list or tuple of integers defining the output shape.
4640
- dtype (mindspore.dtype, optional): The desired dtype of the output tensor. If None, the returned
4641
- tensor has the same dtype as `self`. Default: ``None``.
3514
+ size (Union[tuple[int], list[int], int]): The specified shape of output tensor. Only positive integer or
3515
+ tuple or list containing positive integers are allowed.
3516
+
3517
+ Keyword Args:
3518
+ dtype (:class:`mindspore.dtype`, optional): The specified dtype of the output tensor. If `dtype = None`,
3519
+ the tensor will have the same dtype as `self`. Default ``None``.
3520
+ device (string, optional): The specified device of the output tensor. Support ``CPU`` and ``Ascend``. If
3521
+ `device = None`, the tensor will have the same device as `self` and if the device of `self` is not
3522
+ defined, the value set by :func:`mindspore.set_device` will be used. Default ``None``.
4642
3523
 
4643
3524
  Returns:
4644
- Tensor, the shape and dtype is defined above and filled with ones.
3525
+ Tensor, the shape, dtype and device is defined above but with uninitialized data (May be a random value).
4645
3526
 
4646
3527
  Raises:
4647
- TypeError: If `size` is neither an int nor an tuple/list/Tensor of int.
3528
+ TypeError: If `size` is neither an int nor a tuple or list of int.
4648
3529
 
4649
3530
  Supported Platforms:
4650
- ``Ascend`` ``GPU`` ``CPU``
3531
+ ``Ascend``
4651
3532
 
4652
3533
  Examples:
4653
- >>> import numpy as np
4654
3534
  >>> import mindspore
4655
3535
  >>> from mindspore import Tensor
4656
- >>> x = Tensor(np.array([1, 2, 3]), mindspore.float32)
4657
- >>> output = x.new_ones((2, 2))
4658
- >>> print(output)
4659
- [[1. 1.]
4660
- [1. 1.]]
3536
+ >>> x = Tensor([[1, 2, 3], [4, 5, 6]])
3537
+ >>> output1 = x.new_empty((2, 3))
3538
+ >>> print(output1)
3539
+ [[0 0 0]
3540
+ [0 0 0]]
3541
+ >>> output2 = x.new_empty((2, 3), dtype=mindspore.float64)
3542
+ >>> print(output2)
3543
+ [[0. 0. 0.]
3544
+ [0. 0. 0.]]
4661
3545
  """
4662
- return tensor_operator_registry.get('ones')(size, dtype)
3546
+ return tensor_operator_registry.get('new_empty')(self, size, dtype, device)
4663
3547
 
4664
3548
  def sign(self):
4665
3549
  r"""
@@ -4679,48 +3563,6 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4679
3563
  """
4680
3564
  return tensor_operator_registry.get('sgn')(self)
4681
3565
 
4682
- def sin(self):
4683
- r"""
4684
- For details, please refer to :func:`mindspore.ops.sin`.
4685
- """
4686
- return tensor_operator_registry.get('sin')(self)
4687
-
4688
- def sinc(self):
4689
- r"""
4690
- For details, please refer to :func:`mindspore.ops.sinc`.
4691
- """
4692
- return tensor_operator_registry.get('sinc')(self)
4693
-
4694
- def sinh(self):
4695
- r"""
4696
- For details, please refer to :func:`mindspore.ops.sinh`.
4697
- """
4698
- return tensor_operator_registry.get('sinh')(self)
4699
-
4700
- def sort(self, axis=-1, descending=False):
4701
- r"""
4702
- For details, please refer to :func:`mindspore.ops.sort`.
4703
- """
4704
- return tensor_operator_registry.get('sort')(self, axis=axis, descending=descending)
4705
-
4706
- def argsort(self, axis=-1, descending=False):
4707
- """
4708
- For details, please refer to :func:`mindspore.ops.argsort`.
4709
- """
4710
- return tensor_operator_registry.get('argsort')(self, axis, descending)
4711
-
4712
- def trunc(self):
4713
- r"""
4714
- For details, please refer to :func:`mindspore.ops.trunc`.
4715
- """
4716
- return tensor_operator_registry.get('trunc')(self)
4717
-
4718
- def where(self, condition, y):
4719
- r"""
4720
- For details, please refer to :func:`mindspore.ops.where`.
4721
- """
4722
- return tensor_operator_registry.get('where')(condition, self, y)
4723
-
4724
3566
  def imag(self):
4725
3567
  r"""
4726
3568
  For details, please refer to :func:`mindspore.ops.imag`.
@@ -4729,13 +3571,13 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4729
3571
 
4730
3572
  def quantile(self, q, axis=None, keepdims=False):
4731
3573
  r"""
4732
- For details, please refer to :func:`mindspore.ops.quantile`.
3574
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4733
3575
  """
4734
3576
  return tensor_operator_registry.get('quantile')(self, q, axis, keepdims)
4735
3577
 
4736
3578
  def nanquantile(self, q, axis=None, keepdims=False):
4737
3579
  """
4738
- For details, please refer to :func:`mindspore.ops.nanquantile`.
3580
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4739
3581
  """
4740
3582
  return tensor_operator_registry.get('nanquantile')(self, q, axis, keepdims)
4741
3583
 
@@ -4762,7 +3604,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4762
3604
 
4763
3605
  def qr(self, some=True):
4764
3606
  r"""
4765
- For details, please refer to :func:`mindspore.ops.qr`.
3607
+ This interface is deprecated from version 2.4 and will be removed in a future version.
4766
3608
  """
4767
3609
  validator.check_value_type('some', some, bool, 'Tensor.qr')
4768
3610
  return tensor_operator_registry.get('qr')(self, 'reduced' if some else 'complete')
@@ -4776,7 +3618,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4776
3618
 
4777
3619
  def masked_scatter(self, mask, x):
4778
3620
  r"""
4779
- Returns a Tensor. Updates the value in the "self Tensor" with the `tensor` value according to the mask.
3621
+ Updates the value in the "self Tensor" with the `tensor` value according to the mask, and returns a Tensor.
4780
3622
  The shape of `mask` and the "self Tensor" must be the same or `mask` is broadcastable.
4781
3623
 
4782
3624
  .. warning::
@@ -4816,35 +3658,39 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4816
3658
 
4817
3659
  def index_put(self, indices, values, accumulate=False):
4818
3660
  r"""
4819
- Returns a Tensor. According to the index number of `indices` ,
4820
- replace the value corresponding to the "self Tensor" with the value in `values`.
3661
+ Based on the indices in `indices`, replace the corresponding elements in Tensor `self`
3662
+ with the values in `values`. Outplace version of :func:`mindspore.Tensor.index_put_`
3663
+
3664
+ .. warning::
3665
+ The behavior is unpredictable in the following scenario:
3666
+
3667
+ - If `accumulate` is `False` and `indices` contains duplicate elements.
4821
3668
 
4822
3669
  Args:
4823
- indices (tuple[Tensor], list[Tensor]): the indices of type int32 or int64, used to index into the "self
4824
- Tensor". The rank of tensors in indices should be 1-D, size of indices should <= "self Tensor".rank
3670
+ indices (tuple[Tensor], list[Tensor]): the indices of type int32 or int64, used to index into the `self`.
3671
+ The rank of tensors in indices should be 1-D, size of indices should <= `self.rank`
4825
3672
  and the tensors in indices should be broadcastable.
4826
- values (Tensor): 1-D Tensor of the same type as "self Tensor". if size == 1 will be broadcast
4827
- accumulate (bool): If `accumulate` is True, the elements in values are added to "self Tensor",
4828
- else the elements in `values` replace the corresponding element in the "self Tensor".
3673
+ values (Tensor): 1-D Tensor with the same type as `self`. `values` should be broadcastable with size 1.
3674
+ accumulate (bool, optional): If `accumulate` is `True`, the elements in `values` will be added to `self`,
3675
+ otherwise the elements in `values` will replace the corresponding elements in the `self`.
4829
3676
  Default: ``False``.
4830
3677
 
4831
3678
  Returns:
4832
3679
  Tensor, with the same type and shape as the "self Tensor".
4833
3680
 
4834
3681
  Raises:
4835
- TypeError: If the dtype of the "self Tensor" is not equal to the dtype of `values`.
3682
+ TypeError: If the dtype of the `self` is not equal to the dtype of `values`.
4836
3683
  TypeError: If the dtype of `indices` is not tuple[Tensor], list[Tensor].
4837
3684
  TypeError: If the dtype of tensors in `indices` are not int32 or int64.
4838
3685
  TypeError: If the dtype of tensors in `indices` are inconsistent.
4839
3686
  TypeError: If the dtype of `accumulate` is not bool.
4840
3687
  ValueError: If rank(`values`) is not 1-D.
4841
3688
  ValueError: If size(`values`) is not 1 or max size of the tensors in `indices` when
4842
- rank("self Tensor") == size(`indices`).
4843
- ValueError: If size(`values`) is not 1 or "self Tensor".shape[-1] when
4844
- rank("self Tensor") > size(`indices`).
3689
+ rank(`self`) == size(`indices`).
3690
+ ValueError: If size(`values`) is not 1 or `self`.shape[-1] when rank(`self`) > size(`indices`).
4845
3691
  ValueError: If the rank of tensors in `indices` is not 1-D.
4846
3692
  ValueError: If the tensors in `indices` is not be broadcastable.
4847
- ValueError: If size(`indices`) > rank("self Tensor").
3693
+ ValueError: If size(`indices`) > rank(`self`).
4848
3694
 
4849
3695
  Supported Platforms:
4850
3696
  ``Ascend`` ``CPU``
@@ -4866,6 +3712,60 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4866
3712
  _index_put = tensor_operator_registry.get('index_put')(0 if accumulate is False else 1)
4867
3713
  return _index_put(self, values, indices)
4868
3714
 
3715
+ def index_put_(self, indices, values, accumulate=False):
3716
+ r"""
3717
+ Based on the indices in `indices`, replace the corresponding elements in Tensor `self` with the values
3718
+ in `values`. The expression `Tensor.index_put_(indices, values)` is equivalent to `tensor[indices] = values`.
3719
+ Update and return `self`.
3720
+
3721
+ .. warning::
3722
+ The behavior is unpredictable in the following scenario:
3723
+
3724
+ - If `accumulate` is `False` and `indices` contains duplicate elements.
3725
+
3726
+ Args:
3727
+ indices (tuple[Tensor], list[Tensor]): the indices of type is bool, uint8, int32 or int64,
3728
+ used to index into the `self`. The size of indices should <= the rank of `self`
3729
+ and the tensors in indices should be broadcastable.
3730
+ values (Tensor): Tensor with the same type as `self`. If size == 1, it will be broadcastable.
3731
+ accumulate (bool, optional): If `accumulate` is `True`, the elements in `values` will be added to `self`,
3732
+ otherwise the elements in `values` will replace the corresponding elements in the `self`.
3733
+ Default: ``False``.
3734
+
3735
+ Returns:
3736
+ Tensor `self`.
3737
+
3738
+ Raises:
3739
+ TypeError: If the dtype of the `self` is not equal to the dtype of `values`.
3740
+ TypeError: If the dtype of `indices` is not tuple[Tensor], list[Tensor].
3741
+ TypeError: If the dtype of tensors in `indices` are not bool, uint8, int32 or int64.
3742
+ TypeError: If the dtypes of tensors in `indices` are inconsistent.
3743
+ TypeError: If the dtype of `accumulate` is not bool.
3744
+ ValueError: If size(`values`) is not 1 or max size of the tensors in `indices` when
3745
+ rank(`self`) == size(`indices`).
3746
+ ValueError: If size(`values`) is not 1 or `self`.shape[-1] when rank(`self`) > size(`indices`).
3747
+ ValueError: If the tensors in `indices` is not be broadcastable.
3748
+ ValueError: If size(`indices`) > rank(`self`).
3749
+
3750
+ Supported Platforms:
3751
+ ``Ascend``
3752
+
3753
+ Examples:
3754
+ >>> import numpy as np
3755
+ >>> import mindspore
3756
+ >>> from mindspore import Tensor
3757
+ >>> x = Tensor(np.array([[1, 2, 3], [4, 5, 6]]).astype(np.int32))
3758
+ >>> values = Tensor(np.array([3]).astype(np.int32))
3759
+ >>> indices = [Tensor(np.array([0, 1, 1]).astype(np.int32)), Tensor(np.array([1, 2, 1]).astype(np.int32))]
3760
+ >>> accumulate = True
3761
+ >>> x.index_put_(indices, values, accumulate)
3762
+ >>> print(x)
3763
+ [[1 5 3]
3764
+ [4 8 9]]
3765
+ """
3766
+ index_put_ = tensor_operator_registry.get('index_put_')
3767
+ return index_put_(self, indices, values, accumulate)
3768
+
4869
3769
  def move_to(self, to, blocking=True):
4870
3770
  r"""
4871
3771
  Copy Tensor to target device synchronously or asynchronously, default synchronously. only support PyNative mode.
@@ -4899,7 +3799,7 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4899
3799
  mode = context.get_context("mode")
4900
3800
  if mode != context.PYNATIVE_MODE:
4901
3801
  raise ValueError(f"The method of 'move_to' only supported in pynative mode, but got: {mode}.")
4902
- return Tensor_.move_to(self, to, blocking)
3802
+ return TensorPy_.move_to(self, to, blocking)
4903
3803
 
4904
3804
  def _offload(self):
4905
3805
  r"""
@@ -4914,9 +3814,71 @@ class Tensor(Tensor_, metaclass=_TensorMeta):
4914
3814
  >>> x = ms.Tensor([1, 2, 3], ms.int64)
4915
3815
  >>> x._offload()
4916
3816
  """
4917
- return Tensor_._offload(self)
3817
+ return TensorPy_._offload(self, False)
3818
+
3819
+ def _data_ptr(self):
3820
+ r"""
3821
+ Get the data ptr address of tensor, for CPU is host address, GPU/NPU is device address.
3822
+ User should know how to use the data ptr address.
3823
+ Note: this api is an experimental api, users need understatnd it before use.
3824
+
3825
+ Supported Platforms:
3826
+ ``CPU/GPU/Ascend``
3827
+
3828
+ Examples:
3829
+ >>> import mindspore as ms
3830
+ >>> from mindspore import Tensor
3831
+ >>> x = ms.Tensor([1, 2, 3], ms.int64)
3832
+ >>> data_ptr = x._data_ptr()
3833
+ """
3834
+ return TensorPy_._data_ptr(self)
3835
+
3836
+ def normal_(self, mean=0, std=1, *, generator=None):
3837
+ r"""
3838
+ Update the `self` tensor in place by generating random numbers sampled from the normal
3839
+ distribution which constructed by the parameters `mean` and `std`.
3840
+
3841
+ .. warning::
3842
+ This is an experimental API that is subject to change or deletion.
3843
+
3844
+ Args:
3845
+ mean (number, optional): the mean of normal distribution. With float data type.
3846
+ Default: ``0``.
3847
+ std (number, optional): the std of normal distribution. With float data type.
3848
+ Default: ``1``.
3849
+
3850
+ Keyword Args:
3851
+ generator (:class:`mindspore.Generator`, optional): a pseudorandom number generator.
3852
+ Default: ``None``, uses the default pseudorandom number generator.
3853
+
3854
+ Returns:
3855
+ A tensor that is filled with random numbers that follow a normal distribution and
3856
+ that has the same type and shape as the `self` tensor.
3857
+
3858
+ Raises:
3859
+ TypeError: If the dtype of `mean` or `std` is not one of: bool, int, float, complex.
3860
+
3861
+ Supported Platforms:
3862
+ ``Ascend``
3863
+
3864
+ Examples:
3865
+ >>> import mindspore
3866
+ >>> import numpy as np
3867
+ >>> x = mindspore.Tensor(np.array([[1, 2], [3, 4]]), dtype=mindspore.float32)
3868
+ >>> output = x.normal_()
3869
+ >>> print(output)
3870
+ [[0.2788825 1.3305743]
3871
+ [1.244194 1.16303174]]
3872
+ """
3873
+ return tensor_operator_registry.get('normal_')(self, mean=mean, std=std, generator=generator)
4918
3874
 
4919
3875
 
3876
+ def triangular_solve(self, A, upper=True, transpose=False, unitriangular=False):
3877
+ r"""
3878
+ For details, please refer to :func:`mindspore.mint.triangular_solve`.
3879
+ """
3880
+ return tensor_operator_registry.get('triangular_solve')(self, A, upper, transpose, unitriangular)
3881
+
4920
3882
  def _vm_compare(*args):
4921
3883
  """Implement `vm_compare` for tensor."""
4922
3884
  if args:
@@ -4926,12 +3888,16 @@ def _vm_compare(*args):
4926
3888
  if obj_str == "shape":
4927
3889
  fn = getattr(args[0].asnumpy(), obj_str)
4928
3890
  return fn
4929
- if obj_str == "__setitem__":
4930
- fn = getattr(args[0].asnumpy(), obj_str)
3891
+ if obj_str == "_tensor_setitem" or obj_str == "_tensor_setitem_origin":
3892
+ fn = getattr(args[0].asnumpy(), "__setitem__")
4931
3893
  index = args[1].asnumpy() if isinstance(args[1], Tensor) else args[1]
4932
3894
  value = args[2].asnumpy() if isinstance(args[2], Tensor) else args[2]
4933
3895
  fn(index, value)
4934
3896
  return args[0]
3897
+ if obj_str == "_tensor_getitem" or obj_str == "_tensor_getitem_origin":
3898
+ fn = getattr(args[0].asnumpy(), "__getitem__")
3899
+ index = args[1].asnumpy() if isinstance(args[1], Tensor) else args[1]
3900
+ return Tensor(np.array(fn(index)))
4935
3901
  if len(args) == 2:
4936
3902
  fn = getattr(args[0].asnumpy(), obj_str)
4937
3903
  return Tensor(fn())
@@ -4955,20 +3921,13 @@ def _check_tensor_input(input_data=None, dtype=None, shape=None, init=None):
4955
3921
  raise ValueError("init, dtype and shape must have values at the same time.")
4956
3922
 
4957
3923
  if input_data is not None:
4958
- if isinstance(input_data, np.ndarray) and input_data.ndim >= 1 and input_data.size == 0:
4959
- raise ValueError("input_data can not contain zero dimension.")
4960
3924
  if isinstance(input_data, (tuple, list)):
4961
3925
  try:
4962
- np_data = np.array(input_data)
3926
+ _ = np.array(input_data)
4963
3927
  except ValueError as e:
4964
3928
  if "The requested array has an inhomogeneous shape" in str(e):
4965
3929
  raise TypeError(f"For Tensor, the input_data is {input_data} that contain unsupported element.")
4966
3930
  raise
4967
- if np_data.ndim >= 1 and np_data.size == 0:
4968
- raise ValueError("input_data can not contain zero dimension.")
4969
-
4970
- if shape is not None and not (hasattr(init, "__enable_zero_dim__") and init.__enable_zero_dim__) and 0 in shape:
4971
- raise ValueError("Shape can not contain zero value.")
4972
3931
 
4973
3932
 
4974
3933
  def _check_tensor_dynamic_shape(dtype=None, shape=None, init=None):