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.
- mindspore/.commit_id +1 -1
- mindspore/__init__.py +13 -6
- mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
- mindspore/_check_jit_forbidden_api.py +3 -0
- mindspore/_checkparam.py +3 -38
- mindspore/_deprecated/__init__.py +17 -0
- mindspore/_deprecated/jit.py +198 -0
- mindspore/_extends/builtin_operations.py +1 -1
- mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
- mindspore/_extends/parse/__init__.py +6 -7
- mindspore/_extends/parse/compile_config.py +83 -0
- mindspore/_extends/parse/deprecated/__init__.py +0 -0
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
- mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
- mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
- mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
- mindspore/_extends/parse/parser.py +46 -197
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +217 -98
- mindspore/_extends/pijit/__init__.py +2 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
- mindspore/_extends/pijit/tensor_func_list.py +27 -0
- mindspore/_extends/utils.py +1 -1
- mindspore/amp.py +11 -5
- mindspore/avcodec-59.dll +0 -0
- mindspore/avdevice-59.dll +0 -0
- mindspore/avfilter-8.dll +0 -0
- mindspore/avformat-59.dll +0 -0
- mindspore/avutil-57.dll +0 -0
- mindspore/boost/__init__.py +2 -2
- mindspore/boost/base.py +3 -7
- mindspore/boost/boost_cell_wrapper.py +138 -43
- mindspore/common/__init__.py +6 -3
- mindspore/common/_grad_function.py +56 -0
- mindspore/common/_pijit_context.py +14 -5
- mindspore/common/_register_for_tensor.py +1 -2
- mindspore/common/_stub_tensor.py +30 -14
- mindspore/common/_tensor_cpp_method.py +17 -0
- mindspore/common/_tensor_docs.py +4760 -0
- mindspore/common/api.py +435 -371
- mindspore/common/auto_dynamic_shape.py +41 -44
- mindspore/common/dtype.py +39 -36
- mindspore/common/dump.py +9 -6
- mindspore/common/file_system.py +9 -1
- mindspore/common/generator.py +2 -0
- mindspore/common/hook_handle.py +6 -2
- mindspore/common/initializer.py +13 -10
- mindspore/common/jit_begin_end.py +94 -0
- mindspore/common/jit_config.py +6 -1
- mindspore/common/jit_context.py +76 -0
- mindspore/common/jit_trace.py +378 -0
- mindspore/common/lazy_inline.py +9 -3
- mindspore/common/mindir_util.py +10 -2
- mindspore/common/mutable.py +5 -4
- mindspore/common/parameter.py +135 -52
- mindspore/common/seed.py +2 -2
- mindspore/common/sparse_tensor.py +23 -17
- mindspore/common/tensor.py +951 -1992
- mindspore/communication/__init__.py +7 -5
- mindspore/communication/_comm_helper.py +52 -2
- mindspore/communication/comm_func.py +240 -181
- mindspore/communication/management.py +95 -26
- mindspore/context.py +314 -566
- mindspore/dataset/__init__.py +65 -37
- mindspore/dataset/audio/__init__.py +2 -8
- mindspore/dataset/audio/transforms.py +3 -17
- mindspore/dataset/callback/ds_callback.py +2 -1
- mindspore/dataset/core/config.py +87 -6
- mindspore/dataset/engine/cache_admin.py +3 -3
- mindspore/dataset/engine/cache_client.py +6 -5
- mindspore/dataset/engine/datasets.py +292 -267
- mindspore/dataset/engine/datasets_audio.py +22 -8
- mindspore/dataset/engine/datasets_standard_format.py +46 -27
- mindspore/dataset/engine/datasets_text.py +78 -48
- mindspore/dataset/engine/datasets_user_defined.py +182 -116
- mindspore/dataset/engine/datasets_vision.py +120 -44
- mindspore/dataset/engine/iterators.py +283 -63
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
- mindspore/dataset/engine/obs/util.py +8 -0
- mindspore/dataset/engine/queue.py +40 -0
- mindspore/dataset/engine/samplers.py +289 -43
- mindspore/dataset/engine/serializer_deserializer.py +3 -2
- mindspore/dataset/engine/validators.py +53 -11
- mindspore/dataset/text/__init__.py +7 -6
- mindspore/dataset/text/transforms.py +6 -5
- mindspore/dataset/text/utils.py +3 -3
- mindspore/dataset/transforms/__init__.py +0 -9
- mindspore/dataset/transforms/py_transforms_util.py +17 -0
- mindspore/dataset/transforms/transforms.py +31 -14
- mindspore/dataset/utils/browse_dataset.py +1 -1
- mindspore/dataset/vision/__init__.py +2 -9
- mindspore/dataset/vision/transforms.py +202 -158
- mindspore/dataset/vision/utils.py +7 -5
- mindspore/dataset/vision/validators.py +1 -2
- mindspore/device_context/__init__.py +21 -0
- mindspore/device_context/ascend/__init__.py +25 -0
- mindspore/device_context/ascend/device.py +72 -0
- mindspore/device_context/ascend/op_debug.py +153 -0
- mindspore/device_context/ascend/op_precision.py +193 -0
- mindspore/device_context/ascend/op_tuning.py +123 -0
- mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
- mindspore/device_context/cpu/device.py +62 -0
- mindspore/device_context/cpu/op_tuning.py +43 -0
- mindspore/device_context/gpu/__init__.py +21 -0
- mindspore/device_context/gpu/device.py +70 -0
- mindspore/device_context/gpu/op_precision.py +67 -0
- mindspore/device_context/gpu/op_tuning.py +175 -0
- mindspore/device_manager.py +170 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/llm_boost/__init__.py +1 -0
- mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
- mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
- mindspore/experimental/llm_boost/register.py +1 -0
- mindspore/experimental/map_parameter.py +4 -4
- mindspore/experimental/optim/adadelta.py +6 -6
- mindspore/experimental/optim/adagrad.py +4 -4
- mindspore/experimental/optim/adam.py +7 -0
- mindspore/experimental/optim/adamax.py +4 -4
- mindspore/experimental/optim/adamw.py +4 -0
- mindspore/experimental/optim/asgd.py +1 -1
- mindspore/experimental/optim/lr_scheduler.py +73 -46
- mindspore/experimental/optim/radam.py +34 -31
- mindspore/experimental/optim/rprop.py +1 -1
- mindspore/experimental/optim/sgd.py +1 -1
- mindspore/hal/contiguous_tensors_handle.py +6 -10
- mindspore/hal/device.py +55 -53
- mindspore/hal/event.py +52 -52
- mindspore/hal/memory.py +157 -117
- mindspore/hal/stream.py +150 -109
- mindspore/include/api/context.h +0 -1
- mindspore/include/dataset/constants.h +7 -4
- mindspore/include/dataset/execute.h +2 -2
- mindspore/jpeg62.dll +0 -0
- mindspore/log.py +50 -0
- mindspore/mindrecord/__init__.py +21 -8
- mindspore/mindrecord/config.py +17 -316
- mindspore/mindrecord/filereader.py +1 -9
- mindspore/mindrecord/filewriter.py +5 -15
- mindspore/mindrecord/mindpage.py +1 -9
- mindspore/mindspore_backend_common.dll +0 -0
- mindspore/mindspore_backend_manager.dll +0 -0
- mindspore/mindspore_common.dll +0 -0
- mindspore/mindspore_core.dll +0 -0
- mindspore/mindspore_dump.dll +0 -0
- mindspore/mindspore_frontend.dll +0 -0
- mindspore/mindspore_memory_pool.dll +0 -0
- mindspore/mindspore_ms_backend.dll +0 -0
- mindspore/mindspore_ops.dll +0 -0
- mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
- mindspore/mindspore_ops_kernel_common.dll +0 -0
- mindspore/mindspore_profiler.dll +0 -0
- mindspore/mindspore_pyboost.dll +0 -0
- mindspore/mindspore_pynative.dll +0 -0
- mindspore/mindspore_res_manager.dll +0 -0
- mindspore/mindspore_runtime_pipeline.dll +0 -0
- mindspore/mint/__init__.py +796 -759
- mindspore/mint/distributed/__init__.py +70 -4
- mindspore/mint/distributed/distributed.py +2679 -44
- mindspore/mint/linalg/__init__.py +8 -0
- mindspore/mint/nn/__init__.py +743 -22
- mindspore/mint/nn/functional.py +716 -23
- mindspore/mint/nn/layer/__init__.py +21 -4
- mindspore/mint/nn/layer/_functions.py +334 -0
- mindspore/mint/nn/layer/activation.py +276 -1
- mindspore/mint/nn/layer/basic.py +123 -0
- mindspore/mint/nn/layer/conv.py +921 -0
- mindspore/mint/nn/layer/normalization.py +223 -28
- mindspore/mint/nn/layer/padding.py +797 -0
- mindspore/mint/nn/layer/pooling.py +235 -0
- mindspore/mint/optim/__init__.py +3 -1
- mindspore/mint/optim/adam.py +223 -0
- mindspore/mint/optim/adamw.py +26 -19
- mindspore/mint/optim/sgd.py +171 -0
- mindspore/mint/special/__init__.py +2 -1
- mindspore/multiprocessing/__init__.py +5 -0
- mindspore/nn/__init__.py +4 -1
- mindspore/nn/cell.py +1370 -189
- mindspore/nn/dynamic_lr.py +2 -1
- mindspore/nn/layer/activation.py +29 -27
- mindspore/nn/layer/basic.py +51 -35
- mindspore/nn/layer/channel_shuffle.py +3 -3
- mindspore/nn/layer/container.py +1 -1
- mindspore/nn/layer/conv.py +22 -17
- mindspore/nn/layer/embedding.py +12 -11
- mindspore/nn/layer/normalization.py +56 -49
- mindspore/nn/layer/padding.py +4 -3
- mindspore/nn/layer/pooling.py +120 -42
- mindspore/nn/layer/rnn_cells.py +1 -1
- mindspore/nn/layer/rnns.py +2 -1
- mindspore/nn/layer/timedistributed.py +5 -5
- mindspore/nn/layer/transformer.py +59 -36
- mindspore/nn/learning_rate_schedule.py +8 -4
- mindspore/nn/loss/loss.py +58 -55
- mindspore/nn/optim/ada_grad.py +7 -5
- mindspore/nn/optim/adadelta.py +11 -9
- mindspore/nn/optim/adafactor.py +1 -1
- mindspore/nn/optim/adam.py +17 -13
- mindspore/nn/optim/adamax.py +8 -7
- mindspore/nn/optim/adasum.py +5 -5
- mindspore/nn/optim/asgd.py +1 -1
- mindspore/nn/optim/ftrl.py +11 -9
- mindspore/nn/optim/lamb.py +1 -1
- mindspore/nn/optim/lars.py +1 -4
- mindspore/nn/optim/lazyadam.py +12 -10
- mindspore/nn/optim/momentum.py +7 -6
- mindspore/nn/optim/optimizer.py +3 -3
- mindspore/nn/optim/proximal_ada_grad.py +12 -10
- mindspore/nn/optim/rmsprop.py +13 -12
- mindspore/nn/optim/rprop.py +11 -9
- mindspore/nn/optim/sgd.py +9 -6
- mindspore/nn/optim/tft_wrapper.py +5 -2
- mindspore/nn/optim/thor.py +2 -1
- mindspore/nn/probability/bijector/bijector.py +17 -11
- mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
- mindspore/nn/probability/bijector/invert.py +2 -2
- mindspore/nn/probability/bijector/scalar_affine.py +3 -3
- mindspore/nn/probability/bijector/softplus.py +3 -2
- mindspore/nn/probability/distribution/beta.py +3 -3
- mindspore/nn/probability/distribution/categorical.py +1 -1
- mindspore/nn/probability/distribution/cauchy.py +4 -2
- mindspore/nn/probability/distribution/exponential.py +6 -7
- mindspore/nn/probability/distribution/gamma.py +2 -2
- mindspore/nn/probability/distribution/gumbel.py +2 -2
- mindspore/nn/probability/distribution/half_normal.py +5 -3
- mindspore/nn/probability/distribution/logistic.py +5 -3
- mindspore/nn/probability/distribution/poisson.py +1 -1
- mindspore/nn/probability/distribution/uniform.py +5 -3
- mindspore/nn/reinforcement/_tensors_queue.py +1 -1
- mindspore/nn/reinforcement/tensor_array.py +1 -1
- mindspore/nn/utils/init.py +13 -11
- mindspore/nn/wrap/__init__.py +6 -6
- mindspore/nn/wrap/cell_wrapper.py +181 -122
- mindspore/nn/wrap/grad_reducer.py +45 -36
- mindspore/nn/wrap/loss_scale.py +6 -7
- mindspore/numpy/array_creations.py +63 -65
- mindspore/numpy/array_ops.py +149 -144
- mindspore/numpy/logic_ops.py +41 -42
- mindspore/numpy/math_ops.py +365 -363
- mindspore/numpy/utils.py +17 -18
- mindspore/numpy/utils_const.py +5 -6
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/__init__.py +5 -3
- mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
- mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
- mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
- mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
- mindspore/ops/_op_impl/cpu/__init__.py +1 -0
- mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
- mindspore/ops/_register_for_op.py +0 -11
- mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
- mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
- mindspore/ops/_vmap/vmap_array_ops.py +27 -25
- mindspore/ops/_vmap/vmap_base.py +0 -2
- mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
- mindspore/ops/_vmap/vmap_math_ops.py +15 -16
- mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
- mindspore/ops/auto_generate/__init__.py +4 -3
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +236 -46
- mindspore/ops/auto_generate/gen_extend_func.py +764 -124
- mindspore/ops/auto_generate/gen_ops_def.py +4018 -2264
- mindspore/ops/auto_generate/gen_ops_prim.py +15463 -5037
- mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
- mindspore/ops/composite/__init__.py +2 -1
- mindspore/ops/composite/base.py +20 -25
- mindspore/ops/composite/math_ops.py +6 -16
- mindspore/ops/composite/multitype_ops/__init__.py +5 -2
- mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
- mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
- mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
- mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
- mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
- mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
- mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
- mindspore/ops/function/__init__.py +40 -2
- mindspore/ops/function/_add_attr_func.py +58 -0
- mindspore/ops/function/array_func.py +2089 -2403
- mindspore/ops/function/clip_func.py +80 -23
- mindspore/ops/function/debug_func.py +57 -57
- mindspore/ops/function/grad/__init__.py +1 -0
- mindspore/ops/function/grad/grad_func.py +104 -71
- mindspore/ops/function/image_func.py +2 -2
- mindspore/ops/function/linalg_func.py +47 -78
- mindspore/ops/function/math_func.py +4501 -3802
- mindspore/ops/function/nn_func.py +1726 -620
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +18 -84
- mindspore/ops/function/random_func.py +440 -387
- mindspore/ops/function/reshard_func.py +4 -70
- mindspore/ops/function/sparse_func.py +3 -3
- mindspore/ops/function/sparse_unary_func.py +6 -6
- mindspore/ops/function/spectral_func.py +25 -58
- mindspore/ops/function/vmap_func.py +24 -17
- mindspore/ops/functional.py +22 -7
- mindspore/ops/functional_overload.py +1440 -0
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +13 -7
- mindspore/ops/operations/_custom_ops_utils.py +247 -0
- mindspore/ops/operations/_embedding_cache_ops.py +4 -4
- mindspore/ops/operations/_grad_ops.py +2 -43
- mindspore/ops/operations/_infer_ops.py +2 -1
- mindspore/ops/operations/_inner_ops.py +43 -84
- mindspore/ops/operations/_ms_kernel.py +4 -10
- mindspore/ops/operations/_rl_inner_ops.py +1 -1
- mindspore/ops/operations/_scalar_ops.py +3 -2
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/_tensor_array.py +1 -1
- mindspore/ops/operations/array_ops.py +81 -324
- mindspore/ops/operations/comm_ops.py +154 -108
- mindspore/ops/operations/custom_ops.py +232 -78
- mindspore/ops/operations/debug_ops.py +153 -59
- mindspore/ops/operations/inner_ops.py +7 -5
- mindspore/ops/operations/linalg_ops.py +1 -57
- mindspore/ops/operations/manually_defined/_inner.py +1 -1
- mindspore/ops/operations/manually_defined/ops_def.py +928 -180
- mindspore/ops/operations/math_ops.py +32 -234
- mindspore/ops/operations/nn_ops.py +210 -498
- mindspore/ops/operations/other_ops.py +62 -9
- mindspore/ops/operations/random_ops.py +13 -7
- mindspore/ops/operations/reshard_ops.py +1 -1
- mindspore/ops/operations/sparse_ops.py +2 -2
- mindspore/ops/primitive.py +66 -53
- mindspore/ops/tensor_method.py +1888 -0
- mindspore/ops_generate/__init__.py +0 -5
- mindspore/ops_generate/aclnn/__init__.py +0 -0
- mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
- mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
- mindspore/ops_generate/api/__init__.py +0 -0
- mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
- mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
- mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
- mindspore/ops_generate/api/functions_cc_generator.py +237 -0
- mindspore/ops_generate/api/gen_api.py +103 -0
- mindspore/ops_generate/api/op_api_proto.py +235 -0
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
- mindspore/ops_generate/common/__init__.py +0 -0
- mindspore/ops_generate/common/base_generator.py +11 -0
- mindspore/ops_generate/common/gen_constants.py +91 -0
- mindspore/ops_generate/common/gen_utils.py +348 -0
- mindspore/ops_generate/common/op_proto.py +473 -0
- mindspore/ops_generate/common/template.py +523 -0
- mindspore/ops_generate/gen_ops.py +22 -1069
- mindspore/ops_generate/op_def/__init__.py +0 -0
- mindspore/ops_generate/op_def/gen_op_def.py +90 -0
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
- mindspore/ops_generate/op_def/ops_def_cc_generator.py +299 -0
- mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
- mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
- mindspore/ops_generate/op_def_py/__init__.py +0 -0
- mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
- mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
- mindspore/ops_generate/pyboost/__init__.py +0 -0
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
- mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
- mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
- mindspore/ops_generate/resources/__init__.py +0 -0
- mindspore/ops_generate/resources/resource_list.py +30 -0
- mindspore/ops_generate/resources/resource_loader.py +36 -0
- mindspore/ops_generate/resources/resource_manager.py +64 -0
- mindspore/ops_generate/resources/yaml_loader.py +88 -0
- mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
- mindspore/parallel/__init__.py +7 -3
- mindspore/parallel/_auto_parallel_context.py +152 -34
- mindspore/parallel/_cell_wrapper.py +130 -15
- mindspore/parallel/_parallel_serialization.py +107 -5
- mindspore/parallel/_ps_context.py +1 -1
- mindspore/parallel/_recovery_context.py +7 -2
- mindspore/parallel/_tensor.py +142 -18
- mindspore/parallel/_utils.py +199 -23
- mindspore/parallel/algo_parameter_config.py +4 -4
- mindspore/parallel/auto_parallel.py +732 -0
- mindspore/parallel/checkpoint_convert.py +159 -0
- mindspore/parallel/checkpoint_transform.py +698 -35
- mindspore/parallel/cluster/process_entity/_api.py +276 -50
- mindspore/parallel/cluster/process_entity/_utils.py +41 -6
- mindspore/parallel/cluster/run.py +21 -4
- mindspore/parallel/function/__init__.py +24 -0
- mindspore/parallel/function/reshard_func.py +259 -0
- mindspore/parallel/nn/__init__.py +25 -0
- mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
- mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
- mindspore/parallel/parameter_broadcast.py +25 -14
- mindspore/parallel/shard.py +137 -58
- mindspore/parallel/transform_safetensors.py +363 -305
- mindspore/profiler/__init__.py +22 -5
- mindspore/profiler/analysis/__init__.py +0 -0
- mindspore/profiler/analysis/parser/__init__.py +0 -0
- mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
- mindspore/profiler/analysis/parser/base_parser.py +158 -0
- mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
- mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
- mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +106 -0
- mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
- mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
- mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
- mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
- mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
- mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
- mindspore/profiler/analysis/task_manager.py +131 -0
- mindspore/profiler/analysis/time_converter.py +84 -0
- mindspore/profiler/analysis/viewer/__init__.py +0 -0
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
- mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
- mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
- mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
- mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
- mindspore/profiler/analysis/work_flow.py +73 -0
- mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
- mindspore/profiler/common/command_executor.py +90 -0
- mindspore/profiler/common/constant.py +186 -3
- mindspore/profiler/common/file_manager.py +208 -0
- mindspore/profiler/common/log.py +130 -0
- mindspore/profiler/common/msprof_cmd_tool.py +221 -0
- mindspore/profiler/common/path_manager.py +395 -0
- mindspore/profiler/common/process_bar.py +168 -0
- mindspore/profiler/common/process_pool.py +9 -3
- mindspore/profiler/common/profiler_context.py +500 -0
- mindspore/profiler/common/profiler_info.py +304 -0
- mindspore/profiler/common/profiler_meta_data.py +74 -0
- mindspore/profiler/common/profiler_output_path.py +284 -0
- mindspore/profiler/common/profiler_parameters.py +251 -0
- mindspore/profiler/common/profiler_path_manager.py +179 -0
- mindspore/profiler/common/record_function.py +76 -0
- mindspore/profiler/common/tlv_decoder.py +76 -0
- mindspore/profiler/common/util.py +75 -2
- mindspore/profiler/dynamic_profiler.py +341 -75
- mindspore/profiler/envprofiler.py +163 -0
- mindspore/profiler/experimental_config.py +197 -0
- mindspore/profiler/mstx.py +242 -0
- mindspore/profiler/platform/__init__.py +21 -0
- mindspore/profiler/platform/base_profiler.py +40 -0
- mindspore/profiler/platform/cpu_profiler.py +124 -0
- mindspore/profiler/platform/gpu_profiler.py +74 -0
- mindspore/profiler/platform/npu_profiler.py +335 -0
- mindspore/profiler/profiler.py +1073 -90
- mindspore/profiler/profiler_action_controller.py +187 -0
- mindspore/profiler/profiler_interface.py +118 -0
- mindspore/profiler/schedule.py +243 -0
- mindspore/rewrite/api/node.py +15 -13
- mindspore/rewrite/api/symbol_tree.py +2 -3
- mindspore/run_check/_check_version.py +27 -20
- mindspore/run_check/run_check.py +1 -1
- mindspore/runtime/__init__.py +37 -0
- mindspore/runtime/device.py +27 -0
- mindspore/runtime/event.py +209 -0
- mindspore/runtime/executor.py +177 -0
- mindspore/runtime/memory.py +409 -0
- mindspore/runtime/stream.py +460 -0
- mindspore/runtime/thread_bind_core.py +401 -0
- mindspore/safeguard/rewrite_obfuscation.py +12 -9
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/__init__.py +8 -8
- mindspore/train/_utils.py +88 -25
- mindspore/train/amp.py +9 -5
- mindspore/train/callback/__init__.py +2 -2
- mindspore/train/callback/_callback.py +2 -16
- mindspore/train/callback/_checkpoint.py +53 -55
- mindspore/train/callback/_cluster_monitor.py +14 -18
- mindspore/train/callback/_early_stop.py +1 -1
- mindspore/train/callback/_flops_collector.py +103 -68
- mindspore/train/callback/_history.py +8 -5
- mindspore/train/callback/_lambda_callback.py +2 -2
- mindspore/train/callback/_landscape.py +0 -3
- mindspore/train/callback/_loss_monitor.py +2 -1
- mindspore/train/callback/_on_request_exit.py +6 -5
- mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
- mindspore/train/callback/_summary_collector.py +52 -19
- mindspore/train/callback/_time_monitor.py +2 -1
- mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +204 -107
- mindspore/train/data_sink.py +25 -2
- mindspore/train/dataset_helper.py +15 -16
- mindspore/train/loss_scale_manager.py +8 -7
- mindspore/train/metrics/accuracy.py +3 -3
- mindspore/train/metrics/confusion_matrix.py +9 -9
- mindspore/train/metrics/error.py +3 -3
- mindspore/train/metrics/hausdorff_distance.py +4 -4
- mindspore/train/metrics/mean_surface_distance.py +3 -3
- mindspore/train/metrics/metric.py +0 -12
- mindspore/train/metrics/occlusion_sensitivity.py +4 -2
- mindspore/train/metrics/precision.py +11 -10
- mindspore/train/metrics/recall.py +9 -9
- mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
- mindspore/train/mind_ir_pb2.py +174 -46
- mindspore/train/model.py +184 -113
- mindspore/train/serialization.py +622 -978
- mindspore/train/summary/_summary_adapter.py +2 -2
- mindspore/train/summary/summary_record.py +2 -3
- mindspore/train/train_thor/model_thor.py +1 -1
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +6 -3
- mindspore/utils/dryrun.py +140 -0
- mindspore/utils/hooks.py +81 -0
- mindspore/utils/runtime_execution_order_check.py +550 -0
- mindspore/utils/utils.py +138 -4
- mindspore/version.py +1 -1
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +3 -3
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +562 -393
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +1 -1
- mindspore/_install_custom.py +0 -43
- mindspore/common/_register_for_adapter.py +0 -74
- mindspore/common/_tensor_overload.py +0 -139
- mindspore/mindspore_np_dtype.dll +0 -0
- mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
- mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
- mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
- mindspore/ops_generate/gen_aclnn_implement.py +0 -263
- mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
- mindspore/ops_generate/gen_pyboost_func.py +0 -1052
- mindspore/ops_generate/gen_utils.py +0 -209
- mindspore/ops_generate/op_proto.py +0 -145
- mindspore/ops_generate/template.py +0 -261
- mindspore/profiler/envprofiling.py +0 -254
- mindspore/profiler/profiling.py +0 -1926
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Huawei Technologies Co., Ltd
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ============================================================================
|
|
15
|
-
"""Operator argument handle function."""
|
|
16
|
-
|
|
17
|
-
from mindspore.ops_generate.gen_ops_inner_prim import DtypeToEnum, StringToEnum
|
|
18
|
-
# Enum Class:
|
|
19
|
-
from mindspore._c_expression import FormatEnum as Format
|
|
20
|
-
from mindspore._c_expression import ReductionEnum as Reduction
|
|
21
|
-
from mindspore.common import Tensor
|
|
22
|
-
from mindspore.common import dtype as mstype
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def arg_invalid_info(op_name, arg_name, arg_val):
|
|
26
|
-
"""
|
|
27
|
-
generate invalid msg.
|
|
28
|
-
"""
|
|
29
|
-
return f"For '{op_name}', the value of '{arg_name}' is invalid: '{arg_val}'."
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def to_pair(op_name, arg_name, arg_val):
|
|
33
|
-
"""
|
|
34
|
-
convert arg_val: int/tuple[int*2] -> tuple[int*2].
|
|
35
|
-
"""
|
|
36
|
-
if isinstance(arg_val, (int, float)):
|
|
37
|
-
return (arg_val, arg_val)
|
|
38
|
-
if isinstance(arg_val, (list, tuple)):
|
|
39
|
-
return arg_val
|
|
40
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, arg_val))
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def to_kernel_size(op_name, arg_name, kernel_size):
|
|
44
|
-
"""
|
|
45
|
-
convert kernel_size: int/tuple[int*4] -> tuple[int*2].
|
|
46
|
-
"""
|
|
47
|
-
if isinstance(kernel_size, int):
|
|
48
|
-
return (kernel_size, kernel_size)
|
|
49
|
-
if isinstance(kernel_size, (tuple, list)):
|
|
50
|
-
if len(kernel_size) == 4:
|
|
51
|
-
return (kernel_size[2], kernel_size[3])
|
|
52
|
-
return kernel_size
|
|
53
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, kernel_size))
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def to_strides(op_name, arg_name, stride):
|
|
57
|
-
"""
|
|
58
|
-
convert strides: int/tuple[int*4] -> tuple[int*2].
|
|
59
|
-
"""
|
|
60
|
-
if isinstance(stride, int):
|
|
61
|
-
return (stride, stride)
|
|
62
|
-
if isinstance(stride, (tuple, list)):
|
|
63
|
-
if len(stride) == 4:
|
|
64
|
-
return (stride[2], stride[3])
|
|
65
|
-
return stride
|
|
66
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, stride))
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def to_rates(op_name, arg_name, rates):
|
|
70
|
-
"""
|
|
71
|
-
convert rates: int/tuple[int*4] -> tuple[int*2].
|
|
72
|
-
"""
|
|
73
|
-
if isinstance(rates, int):
|
|
74
|
-
return (rates, rates)
|
|
75
|
-
if isinstance(rates, (tuple, list)):
|
|
76
|
-
if len(rates) == 4:
|
|
77
|
-
return (rates[2], rates[3])
|
|
78
|
-
return rates
|
|
79
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, rates))
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def to_dilations(op_name, arg_name, dilation):
|
|
83
|
-
"""
|
|
84
|
-
convert dilations: int/tuple[int*4] -> tuple[int*2].
|
|
85
|
-
"""
|
|
86
|
-
if isinstance(dilation, int):
|
|
87
|
-
return (dilation, dilation)
|
|
88
|
-
if isinstance(dilation, (tuple, list)):
|
|
89
|
-
if len(dilation) == 4:
|
|
90
|
-
return (dilation[2], dilation[3])
|
|
91
|
-
return dilation
|
|
92
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, dilation))
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def to_output_padding(op_name, arg_name, output_padding):
|
|
96
|
-
"""
|
|
97
|
-
convert output_padding: int/tuple[int*4] -> tuple[int*2].
|
|
98
|
-
"""
|
|
99
|
-
if isinstance(output_padding, int):
|
|
100
|
-
return (output_padding, output_padding)
|
|
101
|
-
if isinstance(output_padding, (tuple, list)):
|
|
102
|
-
if len(output_padding) == 4:
|
|
103
|
-
return (output_padding[2], output_padding[3])
|
|
104
|
-
return output_padding
|
|
105
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, output_padding))
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def to_2d_paddings(op_name, arg_name, pad):
|
|
109
|
-
"""
|
|
110
|
-
convert paddings: int -> tuple[int*2].
|
|
111
|
-
"""
|
|
112
|
-
if isinstance(pad, int):
|
|
113
|
-
return (pad,) * 2
|
|
114
|
-
if isinstance(pad, (tuple, list)):
|
|
115
|
-
return pad
|
|
116
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, pad))
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def to_paddings(op_name, arg_name, pad):
|
|
120
|
-
"""
|
|
121
|
-
convert paddings: int -> tuple[int*4].
|
|
122
|
-
"""
|
|
123
|
-
if isinstance(pad, int):
|
|
124
|
-
return (pad,) * 4
|
|
125
|
-
if isinstance(pad, (tuple, list)):
|
|
126
|
-
return pad
|
|
127
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, pad))
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def to_3d_kernel_size(op_name, arg_name, kernel_size):
|
|
131
|
-
"""
|
|
132
|
-
convert 3d kernel_size: int/tuple[int*6] -> tuple[int*3].
|
|
133
|
-
"""
|
|
134
|
-
if isinstance(kernel_size, int):
|
|
135
|
-
return (kernel_size, kernel_size, kernel_size)
|
|
136
|
-
if isinstance(kernel_size, (tuple, list)):
|
|
137
|
-
if len(kernel_size) == 5:
|
|
138
|
-
return (kernel_size[2], kernel_size[3], kernel_size[4])
|
|
139
|
-
return kernel_size
|
|
140
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, kernel_size))
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def to_3d_strides(op_name, arg_name, stride):
|
|
144
|
-
"""
|
|
145
|
-
convert 3d stride: int/tuple[int*6] -> tuple[int*3].
|
|
146
|
-
"""
|
|
147
|
-
if isinstance(stride, int):
|
|
148
|
-
return (stride, stride, stride)
|
|
149
|
-
if isinstance(stride, (tuple, list)):
|
|
150
|
-
if len(stride) == 5:
|
|
151
|
-
return (stride[2], stride[3], stride[4])
|
|
152
|
-
return stride
|
|
153
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, stride))
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def to_3d_dilations(op_name, arg_name, dilation):
|
|
157
|
-
"""
|
|
158
|
-
convert 3d dilation: int/tuple[int*6] -> tuple[int*3].
|
|
159
|
-
"""
|
|
160
|
-
if isinstance(dilation, int):
|
|
161
|
-
return (dilation, dilation, dilation)
|
|
162
|
-
if isinstance(dilation, (tuple, list)):
|
|
163
|
-
if len(dilation) == 5:
|
|
164
|
-
return (dilation[2], dilation[3], dilation[4])
|
|
165
|
-
return dilation
|
|
166
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, dilation))
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
def to_3d_paddings(op_name, arg_name, pad):
|
|
170
|
-
"""
|
|
171
|
-
convert 3d paddings: int -> tuple[int*6].
|
|
172
|
-
"""
|
|
173
|
-
if isinstance(pad, int):
|
|
174
|
-
return (pad,) * 6
|
|
175
|
-
if isinstance(pad, (tuple, list)):
|
|
176
|
-
return pad
|
|
177
|
-
raise ValueError(arg_invalid_info(op_name, arg_name, pad))
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
def generator_handler(op_name, arg_name, inputs):
|
|
181
|
-
"""
|
|
182
|
-
convert constant value in tuple to tensor
|
|
183
|
-
"""
|
|
184
|
-
new_inputs = []
|
|
185
|
-
for input_ in inputs:
|
|
186
|
-
if isinstance(input_, int):
|
|
187
|
-
new_inputs.append(Tensor(input_, mstype.int64))
|
|
188
|
-
else:
|
|
189
|
-
new_inputs.append(input_)
|
|
190
|
-
return tuple(new_inputs)
|
|
191
|
-
|
|
192
|
-
dtype_to_type_id = DtypeToEnum()
|
|
193
|
-
|
|
194
|
-
# string to enum
|
|
195
|
-
# A function for converting str type to enum type are written here,
|
|
196
|
-
# but the backend supports str input, and converting str input to enum input is not necessary.
|
|
197
|
-
str_to_enum = StringToEnum()
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Huawei Technologies Co., Ltd
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ============================================================================
|
|
15
|
-
|
|
16
|
-
"""Register pyfunc for opaque_func_cpu_kernel"""
|
|
17
|
-
|
|
18
|
-
from mindspore.ops._register_for_op import OpaquePredicateRegistry
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
registered_func_name = OpaquePredicateRegistry()
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def add_opaque_predicate(fn_name, func):
|
|
25
|
-
"""restore opaque predicate functions"""
|
|
26
|
-
registered_func_name.register(fn_name, func)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def get_opaque_predicate(fn_name):
|
|
30
|
-
"""get opaque predicate function by their name"""
|
|
31
|
-
return registered_func_name.get(fn_name)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def get_func_names():
|
|
35
|
-
"""get function names"""
|
|
36
|
-
return registered_func_name.func_names
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def clean_funcs():
|
|
40
|
-
"""clean restored functions"""
|
|
41
|
-
registered_func_name.func_names = []
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Huawei Technologies Co., Ltd
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ============================================================================
|
|
15
|
-
"""
|
|
16
|
-
Generate aclnn kernelmod or call func by input name in ops.yaml
|
|
17
|
-
"""
|
|
18
|
-
import argparse
|
|
19
|
-
import os
|
|
20
|
-
import stat
|
|
21
|
-
import re
|
|
22
|
-
import pathlib
|
|
23
|
-
import logging
|
|
24
|
-
import gen_utils
|
|
25
|
-
from pyboost_utils import AclnnUtils, get_dtypes
|
|
26
|
-
from gen_constants import MS_OPS_KERNEL_PATH
|
|
27
|
-
|
|
28
|
-
auto_gen = ''
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def gen_h(op_name, aclnn_name, op_yaml, kernelmod_h_path, need_update_shape):
|
|
32
|
-
"""generate h files"""
|
|
33
|
-
kernelmod_name = op_yaml.get('dispatch').get("Ascend")
|
|
34
|
-
h_head = f"""
|
|
35
|
-
#ifndef MINDSPORE_CCSRC_BACKEND_KERNEL_COMPILER_{op_name.upper()}_ACLNN{auto_gen.upper()}_KERNEL_MOD_H_
|
|
36
|
-
#define MINDSPORE_CCSRC_BACKEND_KERNEL_COMPILER_{op_name.upper()}_ACLNN{auto_gen.upper()}_KERNEL_MOD_H_
|
|
37
|
-
#include <vector>
|
|
38
|
-
#include "ops/base_operator.h"
|
|
39
|
-
#include "{MS_OPS_KERNEL_PATH}/ascend/opapi/aclnn_kernel_mod.h"
|
|
40
|
-
#include "transform/acl_ir/acl_convert.h"
|
|
41
|
-
"""
|
|
42
|
-
update_shape = f"""
|
|
43
|
-
bool IsNeedUpdateOutputShapeAndSize() override {{ return true; }}
|
|
44
|
-
void UpdateOutputShapeAndSize(const std::vector<KernelTensor *> &inputs, const std::vector<KernelTensor *> &outputs);
|
|
45
|
-
"""
|
|
46
|
-
if not need_update_shape:
|
|
47
|
-
update_shape = ""
|
|
48
|
-
h_body = f"""
|
|
49
|
-
namespace mindspore {{
|
|
50
|
-
namespace kernel {{
|
|
51
|
-
|
|
52
|
-
class {kernelmod_name} : public AclnnKernelMod {{
|
|
53
|
-
public:
|
|
54
|
-
{kernelmod_name}() : AclnnKernelMod(std::move("{aclnn_name}")) {{}}
|
|
55
|
-
~{kernelmod_name}() = default;
|
|
56
|
-
bool Launch(const std::vector<KernelTensor *> &inputs, const std::vector<KernelTensor *> &workspace,
|
|
57
|
-
const std::vector<KernelTensor *> &outputs, void *stream_ptr) override;
|
|
58
|
-
void GetWorkSpaceInfo(const std::vector<KernelTensor *> &inputs, const std::vector<KernelTensor *> &outputs) override;
|
|
59
|
-
{update_shape}
|
|
60
|
-
|
|
61
|
-
private:
|
|
62
|
-
DEFINE_GET_WORKSPACE_FOR_RESIZE()
|
|
63
|
-
}};
|
|
64
|
-
}} // namespace kernel
|
|
65
|
-
}} // namespace mindspore
|
|
66
|
-
|
|
67
|
-
#endif // MINDSPORE_CCSRC_BACKEND_KERNEL_COMPILER_{op_name.upper()}_ACLNN{auto_gen.upper()}_KERNEL_MOD_H_
|
|
68
|
-
"""
|
|
69
|
-
temp_file = kernelmod_h_path + "_tmp.h"
|
|
70
|
-
old_file = kernelmod_h_path + ".h"
|
|
71
|
-
flags = os.O_WRONLY | os.O_CREAT
|
|
72
|
-
mode = stat.S_IWUSR | stat.S_IRUSR
|
|
73
|
-
with os.fdopen(os.open(temp_file, flags, mode), 'w') as h_file:
|
|
74
|
-
h_file.write(gen_utils.cc_license_str + h_head + h_body)
|
|
75
|
-
gen_utils.check_change_and_replace_file(old_file, temp_file)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def gen_cc(op_name, class_name, op_yaml, kernelmod_cc_path, need_update_shape):
|
|
79
|
-
"""generate cc files"""
|
|
80
|
-
kernelmod_name = op_yaml.get('dispatch').get("Ascend")
|
|
81
|
-
cc_head = f"""
|
|
82
|
-
#include "{MS_OPS_KERNEL_PATH}/ascend/opapi/aclnn{auto_gen}/{op_name}_aclnn_kernel.h"
|
|
83
|
-
#include <algorithm>
|
|
84
|
-
#include <vector>
|
|
85
|
-
#include <memory>
|
|
86
|
-
#include <functional>
|
|
87
|
-
#include "ir/tensor.h"
|
|
88
|
-
#include "runtime/device/kernel_runtime.h"
|
|
89
|
-
#include "transform/acl_ir/op_api_convert.h"
|
|
90
|
-
#include "abstract/ops/primitive_infer_map.h"
|
|
91
|
-
|
|
92
|
-
namespace mindspore {{
|
|
93
|
-
namespace kernel {{
|
|
94
|
-
"""
|
|
95
|
-
tuple_tensor_not_supported = f"""
|
|
96
|
-
It is not supported for {op_name} with tuple[tensor] inputs when using auto generate.
|
|
97
|
-
Please provide a KernelMod name in yaml and using python gen_aclnn_implement.py -n xx manually."""
|
|
98
|
-
input_templete = ''
|
|
99
|
-
inputs = ''
|
|
100
|
-
input_dtypes, output_dtypes, _ = get_dtypes(op_yaml)
|
|
101
|
-
for idx, n in enumerate(input_dtypes):
|
|
102
|
-
input_name = "inputs[kIndex" + str(idx) + "], "
|
|
103
|
-
dtype = input_dtypes.get(n)
|
|
104
|
-
if dtype != 'tensor':
|
|
105
|
-
if dtype == 'int':
|
|
106
|
-
dtype = 'int64_t'
|
|
107
|
-
input_templete += " auto {} = transform::ConvertKernelTensor<{}>(inputs[kIndex{}]);\n".format(
|
|
108
|
-
n, dtype, idx)
|
|
109
|
-
input_name = n + ", "
|
|
110
|
-
if dtype == 'tuple[tensor]' and auto_gen == "_auto_gen":
|
|
111
|
-
raise NotImplementedError(tuple_tensor_not_supported)
|
|
112
|
-
inputs += input_name
|
|
113
|
-
|
|
114
|
-
for idx, n in enumerate(output_dtypes):
|
|
115
|
-
output_name = "outputs[kIndex" + str(idx) + "], "
|
|
116
|
-
dtype = output_dtypes.get(n)
|
|
117
|
-
if dtype != 'tensor':
|
|
118
|
-
if dtype == 'int':
|
|
119
|
-
dtype = 'int64_t'
|
|
120
|
-
input_templete += " auto {} = transform::ConvertKernelTensor<{}>(outputs[kIndex{}]);\n".format(
|
|
121
|
-
n, dtype, idx)
|
|
122
|
-
output_name = n + ", "
|
|
123
|
-
if dtype == 'tuple[tensor]' and auto_gen == "_auto_gen":
|
|
124
|
-
raise NotImplementedError(tuple_tensor_not_supported)
|
|
125
|
-
inputs += output_name
|
|
126
|
-
inputs = inputs[:-2]
|
|
127
|
-
workspace_info = f"""
|
|
128
|
-
void {kernelmod_name}::GetWorkSpaceInfo(const std::vector<KernelTensor *> &inputs,
|
|
129
|
-
const std::vector<KernelTensor *> &outputs) {{
|
|
130
|
-
{input_templete}
|
|
131
|
-
GetWorkspaceForResize({inputs});
|
|
132
|
-
}}
|
|
133
|
-
"""
|
|
134
|
-
launch = f"""
|
|
135
|
-
bool {kernelmod_name}::Launch(const std::vector<KernelTensor *> &inputs, const std::vector<KernelTensor *> &workspace,
|
|
136
|
-
const std::vector<KernelTensor *> &outputs, void *stream_ptr) {{
|
|
137
|
-
MS_EXCEPTION_IF_NULL(stream_ptr);
|
|
138
|
-
{input_templete}
|
|
139
|
-
RunOp(stream_ptr, workspace, {inputs});
|
|
140
|
-
return true;
|
|
141
|
-
}}
|
|
142
|
-
"""
|
|
143
|
-
update_shape = f"""
|
|
144
|
-
void {kernelmod_name}::UpdateOutputShapeAndSize(const std::vector<KernelTensor *> &,
|
|
145
|
-
const std::vector<KernelTensor *> &outputs) {{
|
|
146
|
-
// Delete these comment and complete the function:
|
|
147
|
-
// Using outputs[index_x]->SetShapeVector(update_shape) and outputs[index_x]->set_size(update_size)
|
|
148
|
-
}}
|
|
149
|
-
"""
|
|
150
|
-
if not need_update_shape:
|
|
151
|
-
update_shape = ""
|
|
152
|
-
|
|
153
|
-
reg = f"""
|
|
154
|
-
MS_ACLNN_KERNEL_FACTORY_REG({class_name}, {kernelmod_name});
|
|
155
|
-
}} // namespace kernel
|
|
156
|
-
}} // namespace mindspore
|
|
157
|
-
|
|
158
|
-
"""
|
|
159
|
-
temp_file = kernelmod_cc_path + "_tmp.cc"
|
|
160
|
-
old_file = kernelmod_cc_path + ".cc"
|
|
161
|
-
flags = os.O_WRONLY | os.O_CREAT
|
|
162
|
-
mode = stat.S_IWUSR | stat.S_IRUSR
|
|
163
|
-
with os.fdopen(os.open(temp_file, flags, mode), 'w') as cc_file:
|
|
164
|
-
cc_file.write(gen_utils.cc_license_str + cc_head + workspace_info + launch + update_shape + reg)
|
|
165
|
-
gen_utils.check_change_and_replace_file(old_file, temp_file)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
def generate(op_name, class_name, op_yaml, h_and_cc, need_update_shape):
|
|
169
|
-
"""generate cc and h files"""
|
|
170
|
-
aclnn_name = AclnnUtils.get_aclnn_interface(class_name)
|
|
171
|
-
gen_h(op_name, aclnn_name, op_yaml, h_and_cc, need_update_shape)
|
|
172
|
-
gen_cc(op_name, class_name, op_yaml, h_and_cc, need_update_shape)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
def gen_aclnn_kernel(op_name, yaml_str, need_update_shape=False, auto=False):
|
|
176
|
-
"""gen_aclnn_kernel function"""
|
|
177
|
-
if check_op_registed(op_name) and not auto:
|
|
178
|
-
logging.warning("Kernel {%s} is already registered.", op_name)
|
|
179
|
-
return
|
|
180
|
-
current_path = os.path.dirname(os.path.realpath(__file__))
|
|
181
|
-
work_path = os.path.join(current_path, '../../../../')
|
|
182
|
-
|
|
183
|
-
aclnn_path = '{MS_OPS_KERNEL_PATH}/ascend/opapi/aclnn/'
|
|
184
|
-
# merge inner ops
|
|
185
|
-
op_yaml = yaml_str.get(op_name)
|
|
186
|
-
class_name = ''.join(word.capitalize() for word in op_name.split('_'))
|
|
187
|
-
if op_yaml is None:
|
|
188
|
-
raise ValueError("Input op {} is not find in ops.yaml.".format(op_name))
|
|
189
|
-
dispatch = op_yaml.get("dispatch")
|
|
190
|
-
if not dispatch or not dispatch.get("enable"):
|
|
191
|
-
raise ValueError("Op {} is not enabled dispatch, please check.".format(op_name))
|
|
192
|
-
global auto_gen
|
|
193
|
-
if auto:
|
|
194
|
-
if check_op_registed(op_name, True):
|
|
195
|
-
# Don't auto generate kernelmod if it is achieved manually.
|
|
196
|
-
return
|
|
197
|
-
auto_gen = "_auto_gen"
|
|
198
|
-
dispatch['Ascend'] = class_name + "Ascend"
|
|
199
|
-
aclnn_path = f'{MS_OPS_KERNEL_PATH}/ascend/opapi/aclnn_auto_gen/'
|
|
200
|
-
pathlib.Path(os.path.join(work_path, aclnn_path)).mkdir(parents=True, exist_ok=True)
|
|
201
|
-
if dispatch.get("Ascend") is None:
|
|
202
|
-
raise ValueError("KernelMod {} is auto generated. If need achieve it, "
|
|
203
|
-
"please provide the KernelMod name in dispatch.".format(op_name))
|
|
204
|
-
op_class = op_yaml.get("class")
|
|
205
|
-
if op_class is not None and op_class.get("name") is not None:
|
|
206
|
-
class_name = op_class.get("name")
|
|
207
|
-
kernelmod_h_and_cc_path = os.path.join(work_path, aclnn_path + '{}_aclnn_kernel'.format(op_name))
|
|
208
|
-
generate(op_name, class_name, op_yaml, kernelmod_h_and_cc_path, need_update_shape)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
def get_registed_ops(file_path=f'{MS_OPS_KERNEL_PATH}/ascend/opapi/'):
|
|
212
|
-
'''get registered ops by search files'''
|
|
213
|
-
# default search in 'ops/kernel/ascend/opapi/'
|
|
214
|
-
current_path = os.path.dirname(os.path.realpath(__file__))
|
|
215
|
-
work_path = os.path.join(current_path, '../../../../')
|
|
216
|
-
search_path = os.path.join(work_path, file_path)
|
|
217
|
-
ret = []
|
|
218
|
-
try:
|
|
219
|
-
for root_path, _, files in os.walk(search_path):
|
|
220
|
-
for file_name in files:
|
|
221
|
-
with open(os.path.join(root_path, file_name), "r") as f:
|
|
222
|
-
file_context = f.read()
|
|
223
|
-
search_re = re.search(r"(?<=KERNEL_FACTORY_REG\()\w+(?=,)", file_context)
|
|
224
|
-
if search_re:
|
|
225
|
-
ret.append(search_re.group())
|
|
226
|
-
except OSError:
|
|
227
|
-
logging.warning("Something wrong in check op registered.")
|
|
228
|
-
return ret
|
|
229
|
-
return ret
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
registed_ops = get_registed_ops()
|
|
233
|
-
manual_registed_ops = get_registed_ops(f'{MS_OPS_KERNEL_PATH}/ascend/opapi/aclnn/')
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
def check_op_registed(op_name, manual=False):
|
|
237
|
-
'''if op already registered return true'''
|
|
238
|
-
global registed_ops
|
|
239
|
-
global manual_registed_ops
|
|
240
|
-
class_name = ''.join(word.capitalize() for word in op_name.split('_'))
|
|
241
|
-
return (class_name in manual_registed_ops) if manual else (class_name in registed_ops)
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
def main(op_name, need_update_shape):
|
|
245
|
-
'''main func'''
|
|
246
|
-
gen_aclnn_kernel(op_name, need_update_shape)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
parser = argparse.ArgumentParser(description="Generate aclnn KernelMod.")
|
|
250
|
-
parser.add_argument('-n', '--name', type=str, default=None, help='Kernel name in yaml.')
|
|
251
|
-
parser.add_argument('-d', '--need_update_shape', type=bool, default=False,
|
|
252
|
-
help="Some kernel like:unique need update shape and size after launch. Default: False")
|
|
253
|
-
options, _ = parser.parse_known_args()
|
|
254
|
-
|
|
255
|
-
if __name__ == "__main__":
|
|
256
|
-
try:
|
|
257
|
-
name = options.name
|
|
258
|
-
if name is None:
|
|
259
|
-
raise ValueError("Please provide op name to generate aclnn kernelmod.")
|
|
260
|
-
is_need_update_shape = options.need_update_shape
|
|
261
|
-
main(name, is_need_update_shape)
|
|
262
|
-
except Exception as e: # pylint: disable=W0703
|
|
263
|
-
logging.exception("Generate aclnn kernelmod failed, err info: %s", e)
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# Copyright 2023-2024 Huawei Technologies Co., Ltd
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ============================================================================
|
|
15
|
-
"""Primitive defined for arg handler."""
|
|
16
|
-
|
|
17
|
-
from mindspore.ops.primitive import Primitive, prim_attr_register, prim_arg_register
|
|
18
|
-
from mindspore._c_expression import typing
|
|
19
|
-
from mindspore._c_expression import op_enum
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class DtypeToEnum(Primitive):
|
|
23
|
-
r"""
|
|
24
|
-
Convert mindspore dtype to enum.
|
|
25
|
-
|
|
26
|
-
Inputs:
|
|
27
|
-
- **op_name** (str) - The op name
|
|
28
|
-
- **arg_name** (str) - The arg name
|
|
29
|
-
- **dtype** (mindspore.dtype) - The data type.
|
|
30
|
-
|
|
31
|
-
Outputs:
|
|
32
|
-
An integer.
|
|
33
|
-
|
|
34
|
-
Supported Platforms:
|
|
35
|
-
``Ascend`` ``GPU`` ``CPU``
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
@prim_attr_register
|
|
39
|
-
def __init__(self):
|
|
40
|
-
"""Initialize"""
|
|
41
|
-
|
|
42
|
-
def __call__(self, op_name, arg_name, dtype):
|
|
43
|
-
"""Run in PyNative mode"""
|
|
44
|
-
if not isinstance(dtype, typing.Type):
|
|
45
|
-
raise TypeError(f"For '{op_name}', the input '{arg_name}' should be mindspore dtype, but got {dtype}.")
|
|
46
|
-
return typing.type_to_type_id(dtype)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class StringToEnum(Primitive):
|
|
50
|
-
r"""
|
|
51
|
-
Convert string to enum.
|
|
52
|
-
|
|
53
|
-
Inputs:
|
|
54
|
-
- **op_name** (str) - The op name
|
|
55
|
-
- **arg_name** (str) - The arg name
|
|
56
|
-
- **enum_str** (str) - The str data.
|
|
57
|
-
|
|
58
|
-
Outputs:
|
|
59
|
-
An integer.
|
|
60
|
-
|
|
61
|
-
Supported Platforms:
|
|
62
|
-
``CPU``
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
@prim_attr_register
|
|
66
|
-
def __init__(self):
|
|
67
|
-
"""Initialize"""
|
|
68
|
-
|
|
69
|
-
def __call__(self, op_name, arg_name, enum_str):
|
|
70
|
-
"""Run in PyNative mode"""
|
|
71
|
-
if enum_str is None:
|
|
72
|
-
return None
|
|
73
|
-
if not isinstance(enum_str, str):
|
|
74
|
-
raise TypeError(f"For '{op_name}', the input '{arg_name}' should be a str, but got {type(enum_str)}.")
|
|
75
|
-
return op_enum.str_to_enum(op_name, arg_name, enum_str)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
class TupleToList(Primitive):
|
|
79
|
-
r"""
|
|
80
|
-
Convert tuple to list.
|
|
81
|
-
|
|
82
|
-
Inputs:
|
|
83
|
-
- **x** (tuple) - The input
|
|
84
|
-
|
|
85
|
-
Outputs:
|
|
86
|
-
List, has the same elements as the `input`.
|
|
87
|
-
|
|
88
|
-
Supported Platforms:
|
|
89
|
-
``CPU``
|
|
90
|
-
|
|
91
|
-
Examples:
|
|
92
|
-
>>> from mindspore.ops_generate import TupleToList
|
|
93
|
-
>>> x = (1, 2, 3)
|
|
94
|
-
>>> result = TupleToList()(x)
|
|
95
|
-
>>> print(result)
|
|
96
|
-
[1, 2, 3]
|
|
97
|
-
"""
|
|
98
|
-
@prim_arg_register
|
|
99
|
-
def __init__(self):
|
|
100
|
-
"""Initialize TupleToList"""
|
|
101
|
-
|
|
102
|
-
def __call__(self, input):
|
|
103
|
-
return list(input)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
class ListToTuple(Primitive):
|
|
107
|
-
r"""
|
|
108
|
-
Convert list to tuple.
|
|
109
|
-
|
|
110
|
-
Inputs:
|
|
111
|
-
- **x** (list) - The input
|
|
112
|
-
|
|
113
|
-
Outputs:
|
|
114
|
-
Tuple, has the same elements as the `input`.
|
|
115
|
-
|
|
116
|
-
Supported Platforms:
|
|
117
|
-
``CPU``
|
|
118
|
-
|
|
119
|
-
Examples:
|
|
120
|
-
>>> from mindspore.ops_generate import ListToTuple
|
|
121
|
-
>>> x = [1, 2, 3]
|
|
122
|
-
>>> result = ListToTuple()(x)
|
|
123
|
-
>>> print(result)
|
|
124
|
-
(1, 2, 3)
|
|
125
|
-
"""
|
|
126
|
-
@prim_arg_register
|
|
127
|
-
def __init__(self):
|
|
128
|
-
"""Initialize TupleToList"""
|
|
129
|
-
|
|
130
|
-
def __call__(self, input):
|
|
131
|
-
return tuple(input)
|