mindspore 2.4.10__cp310-cp310-win_amd64.whl → 2.6.0rc1__cp310-cp310-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/Microsoft.VisualStudio.Telemetry.dll +0 -0
- mindspore/Newtonsoft.Json.dll +0 -0
- mindspore/__init__.py +13 -6
- mindspore/_c_dataengine.cp310-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp310-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp310-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/atlprov.dll +0 -0
- 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/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- 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/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -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_glog.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/msobj140.dll +0 -0
- mindspore/mspdb140.dll +0 -0
- mindspore/mspdbcore.dll +0 -0
- mindspore/mspdbst.dll +0 -0
- mindspore/mspft140.dll +0 -0
- mindspore/msvcdis140.dll +0 -0
- mindspore/msvcp140_1.dll +0 -0
- mindspore/msvcp140_2.dll +0 -0
- mindspore/msvcp140_atomic_wait.dll +0 -0
- mindspore/msvcp140_codecvt_ids.dll +0 -0
- 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/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- 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/tbbmalloc.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/vcmeta.dll +0 -0
- mindspore/vcruntime140.dll +0 -0
- mindspore/vcruntime140_1.dll +0 -0
- 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 +587 -418
- {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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Copyright 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
|
+
"""
|
|
16
|
+
This module provides classes for generating C++ header and implementation files for functions based on op_protos.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import os
|
|
20
|
+
|
|
21
|
+
import common.template as template
|
|
22
|
+
from common.template import Template
|
|
23
|
+
import common.gen_constants as K
|
|
24
|
+
from common.gen_utils import save_file
|
|
25
|
+
from common.base_generator import BaseGenerator
|
|
26
|
+
from pyboost.pyboost_utils import is_optional_param, get_input_dtype, get_return_type
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class FunctionsHeaderGenerator(BaseGenerator):
|
|
30
|
+
"""
|
|
31
|
+
Generates C++ header files for backend functions based on operator prototypes.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self):
|
|
35
|
+
"""
|
|
36
|
+
Initialize the functions header generator with templates for code generation.
|
|
37
|
+
"""
|
|
38
|
+
self.FUNCTIONS_H_TEMPLATE = template.FUNCTIONS_H_TEMPLATE
|
|
39
|
+
self.function_interface_template = Template("${return_type} BACKEND_EXPORT ${op_name}(${input_args});")
|
|
40
|
+
|
|
41
|
+
def generate(self, work_path, op_protos):
|
|
42
|
+
"""
|
|
43
|
+
Generate the header file for backend functions.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
work_path (str): The directory where the generated file should be saved.
|
|
47
|
+
op_protos (list): A list of operator prototypes used to generate the header.
|
|
48
|
+
"""
|
|
49
|
+
functions_list = []
|
|
50
|
+
for op_proto in op_protos:
|
|
51
|
+
if op_proto.op_dispatch is None or op_proto.op_dispatch.is_comm_op:
|
|
52
|
+
continue
|
|
53
|
+
input_args_with_type_str = self._get_input_args(op_proto)
|
|
54
|
+
return_type_str = _get_return_type_str(op_proto)
|
|
55
|
+
functions = self.function_interface_template.replace(op_name=op_proto.op_name,
|
|
56
|
+
input_args=input_args_with_type_str,
|
|
57
|
+
return_type=return_type_str)
|
|
58
|
+
functions_list.append(functions)
|
|
59
|
+
pyboost_func_h_str = self.FUNCTIONS_H_TEMPLATE.replace(op_call_with_grad=functions_list)
|
|
60
|
+
save_path = os.path.join(work_path, K.MS_PYBOOST_FUNCTIONS_AUTO_GEN_PATH)
|
|
61
|
+
file_name = "functions.h"
|
|
62
|
+
save_file(save_path, file_name, pyboost_func_h_str)
|
|
63
|
+
|
|
64
|
+
def _get_input_args(self, op_proto):
|
|
65
|
+
"""
|
|
66
|
+
Get the input arguments with type information for the function interface.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
op_proto: The operator prototype.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
str: A string of input arguments with types.
|
|
73
|
+
"""
|
|
74
|
+
args_list = []
|
|
75
|
+
for op_arg in op_proto.op_args:
|
|
76
|
+
input_dtype = get_input_dtype(op_arg.arg_dtype, is_optional_param(op_arg))
|
|
77
|
+
args_list.append("const " + input_dtype + " &" + op_arg.arg_name)
|
|
78
|
+
return args_list
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class FunctionsGenerator(BaseGenerator):
|
|
82
|
+
"""
|
|
83
|
+
Generates C++ implementation files for backend functions based on operator prototypes.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
def __init__(self):
|
|
87
|
+
"""
|
|
88
|
+
Initialize the functions generator with templates for code generation.
|
|
89
|
+
"""
|
|
90
|
+
self.FUNCTIONS_CC_TEMPLATE = template.FUNCTIONS_CC_TEMPLATE
|
|
91
|
+
self.FUNCTION_BODY_TEMPLATE = template.FUNCTION_BODY_TEMPLATE
|
|
92
|
+
self.pyboost_func_include_header_template = Template(
|
|
93
|
+
f'#include "{K.MS_PYBOOST_BASE_PATH}/auto_generate/${{operator_name}}.h"\n'
|
|
94
|
+
)
|
|
95
|
+
self.clone_inplace_input_template = Template(
|
|
96
|
+
'GetCloneFunc()(op, prim::kPrim${class_name}, device_target, {${grad_args}});'
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def generate(self, work_path, op_protos):
|
|
100
|
+
"""
|
|
101
|
+
Generate the implementation file for backend functions.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
work_path (str): The directory where the generated file should be saved.
|
|
105
|
+
op_protos (list): A list of operator prototypes used to generate the implementation.
|
|
106
|
+
"""
|
|
107
|
+
func_include_headers_list = []
|
|
108
|
+
op_call_with_grad_list = []
|
|
109
|
+
ops_inc_head_set = set()
|
|
110
|
+
for op_proto in op_protos:
|
|
111
|
+
if op_proto.op_dispatch is None or op_proto.op_dispatch.is_comm_op:
|
|
112
|
+
continue
|
|
113
|
+
func_include_headers_list.append(
|
|
114
|
+
self.pyboost_func_include_header_template.replace(operator_name=op_proto.op_name))
|
|
115
|
+
op_call_with_grad_list.append(self._get_function_body(op_proto))
|
|
116
|
+
ops_inc_head_set.add(
|
|
117
|
+
template.OP_DEF_INC_HEAD_TEMPLATE.replace(prefix_char=op_proto.op_class.name[0].lower()))
|
|
118
|
+
pyboost_func_h_str = self.FUNCTIONS_CC_TEMPLATE.replace(op_call_with_grad=op_call_with_grad_list,
|
|
119
|
+
pyboost_op_header_include=func_include_headers_list,
|
|
120
|
+
ops_inc=list(sorted(ops_inc_head_set)))
|
|
121
|
+
save_path = os.path.join(work_path, K.MS_PYBOOST_FUNCTIONS_AUTO_GEN_PATH)
|
|
122
|
+
file_name = "functions.cc"
|
|
123
|
+
save_file(save_path, file_name, pyboost_func_h_str)
|
|
124
|
+
|
|
125
|
+
def _get_function_body(self, op_proto):
|
|
126
|
+
"""
|
|
127
|
+
Get the function body for a given operator prototype.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
op_proto: The operator prototype.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
str: The generated function body.
|
|
134
|
+
"""
|
|
135
|
+
input_args = self._get_input_args(op_proto, False)
|
|
136
|
+
input_args_with_type = self._get_input_args(op_proto, True)
|
|
137
|
+
inplace_clone_args = self._get_clone_input_args(op_proto, False, False)
|
|
138
|
+
clone_func_str = self._get_clone_inplace_str(op_proto.op_inplace, op_proto.op_class.name, inplace_clone_args)
|
|
139
|
+
return_type_str = _get_return_type_str(op_proto)
|
|
140
|
+
return self.FUNCTION_BODY_TEMPLATE.replace(op_name=op_proto.op_name,
|
|
141
|
+
class_name=op_proto.op_class.name,
|
|
142
|
+
input_args=input_args,
|
|
143
|
+
clone_func=clone_func_str,
|
|
144
|
+
input_args_with_type=input_args_with_type,
|
|
145
|
+
return_type=return_type_str)
|
|
146
|
+
|
|
147
|
+
def _get_input_args(self, op_proto, has_type):
|
|
148
|
+
"""
|
|
149
|
+
Get the input arguments for the function body.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
op_proto: The operator prototype.
|
|
153
|
+
has_type (bool): Whether to include type information for the arguments.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
str: A string of input arguments, with or without types.
|
|
157
|
+
"""
|
|
158
|
+
args_list = []
|
|
159
|
+
for op_arg in op_proto.op_args:
|
|
160
|
+
input_dtype = get_input_dtype(op_arg.arg_dtype, is_optional_param(op_arg))
|
|
161
|
+
if has_type:
|
|
162
|
+
args_list.append("const " + input_dtype + " &" + op_arg.arg_name)
|
|
163
|
+
else:
|
|
164
|
+
args_list.append(op_arg.arg_name)
|
|
165
|
+
return args_list
|
|
166
|
+
|
|
167
|
+
def _get_clone_inplace_str(self, is_inplace_op: bool, class_name: str, grad_args: list):
|
|
168
|
+
"""
|
|
169
|
+
Generates the view base str of arguments for the operator.
|
|
170
|
+
|
|
171
|
+
This method constructs a list of argument names that need to be cast to their corresponding types.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
is_view_or_inplace (bool): Whether the op is view op or inplace op.
|
|
175
|
+
grad_args (list): grad args
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
str: Formatted view or inplace first argument names.
|
|
179
|
+
"""
|
|
180
|
+
if not is_inplace_op:
|
|
181
|
+
return ''
|
|
182
|
+
return self.clone_inplace_input_template.replace(class_name=class_name, grad_args=grad_args)
|
|
183
|
+
|
|
184
|
+
def _get_clone_input_args(self, op_proto, has_type, with_optional):
|
|
185
|
+
"""
|
|
186
|
+
Get the input arguments for the DoGrad function.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
op_proto: The operator prototype.
|
|
190
|
+
has_type (bool): Whether to include type information for the arguments.
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
list: A list of input arguments for the DoGrad function.
|
|
194
|
+
"""
|
|
195
|
+
args_list = []
|
|
196
|
+
for op_arg in op_proto.op_args:
|
|
197
|
+
input_dtype = get_input_dtype(op_arg.arg_dtype, is_optional_param(op_arg))
|
|
198
|
+
if has_type:
|
|
199
|
+
args_list.append(f"const {input_dtype} &{op_arg.arg_name}")
|
|
200
|
+
else:
|
|
201
|
+
if not with_optional and is_optional_param(op_arg):
|
|
202
|
+
args_list.append(f"OptionalToValue({op_arg.arg_name})")
|
|
203
|
+
else:
|
|
204
|
+
args_list.append(f"{op_arg.arg_name}")
|
|
205
|
+
return args_list
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _get_return_type_str(op_proto):
|
|
209
|
+
"""
|
|
210
|
+
Get the return type string for the function.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
op_proto: The operator prototype.
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
str: The return type as a string.
|
|
217
|
+
"""
|
|
218
|
+
returns_type = []
|
|
219
|
+
type_convert_to_base = {
|
|
220
|
+
'std::vector<mindspore::tensor::TensorPtr>': 'std::vector<mindspore::tensor::BaseTensorPtr>',
|
|
221
|
+
'mindspore::tensor::TensorPtr': 'mindspore::tensor::BaseTensorPtr'
|
|
222
|
+
}
|
|
223
|
+
for return_obj in op_proto.op_returns:
|
|
224
|
+
temp_return = get_return_type(return_obj.arg_dtype)
|
|
225
|
+
if temp_return in type_convert_to_base:
|
|
226
|
+
returns_type.append(type_convert_to_base[temp_return])
|
|
227
|
+
else:
|
|
228
|
+
raise Exception("Not return found")
|
|
229
|
+
if len(returns_type) == 1:
|
|
230
|
+
cpp_func_return = returns_type[0]
|
|
231
|
+
elif len(returns_type) > 1:
|
|
232
|
+
cpp_func_return = "std::tuple<"
|
|
233
|
+
cpp_func_return += ', '.join(s for s in returns_type)
|
|
234
|
+
cpp_func_return += ">"
|
|
235
|
+
else:
|
|
236
|
+
raise Exception("Not return found")
|
|
237
|
+
return cpp_func_return
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Copyright 2025 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 api definition files
|
|
17
|
+
"""
|
|
18
|
+
import copy
|
|
19
|
+
|
|
20
|
+
from resources.resource_list import ResourceType
|
|
21
|
+
from common import gen_constants as K
|
|
22
|
+
from tensor_py_cc_generator import TensorPyCppGenerator
|
|
23
|
+
|
|
24
|
+
from .tensor_func_reg_cpp_generator import TensorFuncRegCppGenerator
|
|
25
|
+
from .functional_map_cpp_generator import FunctionalMapCppGenerator
|
|
26
|
+
from .add_tensor_docs_generator import AddTensorDocsGenerator
|
|
27
|
+
from .functional_overload_py_generator import FunctionalOverloadPyGenerator
|
|
28
|
+
from .cpp_create_prim_instance_helper_generator import CppCreatePrimInstanceHelperGenerator
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def gen_tensor_func_code(work_path, op_protos, func_protos, alias_api_mapping):
|
|
32
|
+
generator = TensorFuncRegCppGenerator()
|
|
33
|
+
generator.generate(work_path, op_protos, func_protos, alias_api_mapping)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def gen_functional_map_code(work_path, tensor_method_protos, mint_func_protos, alias_api_mapping):
|
|
37
|
+
generator = FunctionalMapCppGenerator()
|
|
38
|
+
generator.generate(work_path, tensor_method_protos, mint_func_protos, alias_api_mapping)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def gen_tensor_docs_code():
|
|
42
|
+
generator = AddTensorDocsGenerator()
|
|
43
|
+
generator.generate()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def gen_functional_overload_py(work_path, mint_func_protos, alias_api_mapping):
|
|
47
|
+
generator = FunctionalOverloadPyGenerator()
|
|
48
|
+
generator.generate(work_path, mint_func_protos, alias_api_mapping)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def gen_tensor_py_cc(work_path, tensor_method_protos, alias_api_mapping):
|
|
52
|
+
generator = TensorPyCppGenerator()
|
|
53
|
+
generator.generate(work_path, tensor_method_protos, alias_api_mapping)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def generate_create_instance_helper_file(resource_mgr):
|
|
57
|
+
"""
|
|
58
|
+
Generate C++ helper file from yaml.
|
|
59
|
+
"""
|
|
60
|
+
op_protos = resource_mgr.get_resource(ResourceType.OP_PROTO)
|
|
61
|
+
tensor_method_protos = resource_mgr.get_resource(ResourceType.TENSOR_METHOD_PROTOS)
|
|
62
|
+
op_protos_with_deprecated = get_tensor_op_protos_with_deprecated(tensor_method_protos, op_protos)
|
|
63
|
+
generator = CppCreatePrimInstanceHelperGenerator()
|
|
64
|
+
generator.generate(K.WORK_DIR, op_protos_with_deprecated)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def get_tensor_op_protos_with_deprecated(func_protos, op_protos):
|
|
68
|
+
"""
|
|
69
|
+
Get op_protos with deprecated op_protos from func_protos.
|
|
70
|
+
"""
|
|
71
|
+
tensor_op_protos = copy.deepcopy(op_protos)
|
|
72
|
+
for _, item in func_protos.items():
|
|
73
|
+
for func_proto in item:
|
|
74
|
+
op_name = func_proto.op_proto.op_name
|
|
75
|
+
if "deprecated" in func_proto.op_proto.op_name:
|
|
76
|
+
func_proto.op_proto.op_class.name = ''.join(word.capitalize() for word in op_name.split('_'))
|
|
77
|
+
if func_proto.op_proto.op_name[-1] == '_':
|
|
78
|
+
func_proto.op_proto.op_class.name += '_'
|
|
79
|
+
tensor_op_protos.append(func_proto.op_proto)
|
|
80
|
+
return tensor_op_protos
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def generate_api_files(resource_mgr):
|
|
84
|
+
"""
|
|
85
|
+
Generate api-related files.
|
|
86
|
+
"""
|
|
87
|
+
work_path = K.WORK_DIR
|
|
88
|
+
op_protos = resource_mgr.get_resource(ResourceType.OP_PROTO)
|
|
89
|
+
tensor_method_protos = resource_mgr.get_resource(ResourceType.TENSOR_METHOD_PROTOS)
|
|
90
|
+
mint_func_protos = resource_mgr.get_resource(ResourceType.MINT_FUNC_PROTOS)
|
|
91
|
+
alias_api_mapping = resource_mgr.get_resource(ResourceType.ALIAS_API_MAPPING)
|
|
92
|
+
# generate create prim instance helper file
|
|
93
|
+
generate_create_instance_helper_file(resource_mgr)
|
|
94
|
+
# generate tensor_py func code
|
|
95
|
+
gen_tensor_func_code(work_path, op_protos, tensor_method_protos, alias_api_mapping)
|
|
96
|
+
# generate functional map code
|
|
97
|
+
gen_functional_map_code(work_path, tensor_method_protos, mint_func_protos, alias_api_mapping)
|
|
98
|
+
# generate _tensor_docs.py that attaches docs to tensor func APIs when import mindspore
|
|
99
|
+
gen_tensor_docs_code()
|
|
100
|
+
# generate functional_overload.py which init pybind mint APIs from cpp
|
|
101
|
+
gen_functional_overload_py(work_path, mint_func_protos, alias_api_mapping)
|
|
102
|
+
# generate tensor_py.cc
|
|
103
|
+
gen_tensor_py_cc(work_path, tensor_method_protos, alias_api_mapping)
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Copyright 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
|
+
|
|
16
|
+
"""Tensor Func Proto module for defining tensor_py function prototypes and their arguments."""
|
|
17
|
+
import ast
|
|
18
|
+
import os
|
|
19
|
+
from collections import defaultdict
|
|
20
|
+
|
|
21
|
+
import common.gen_constants as K
|
|
22
|
+
from common.gen_utils import safe_load_yaml_from_dir
|
|
23
|
+
from resources.resource_loader import ResourceLoader
|
|
24
|
+
from resources.resource_list import ResourceType
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class OpApiProto:
|
|
28
|
+
"""
|
|
29
|
+
Represents a tensor function prototype with associated function name, operation prototype, and target devices.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self,
|
|
33
|
+
func_name,
|
|
34
|
+
op_proto,
|
|
35
|
+
py_method,
|
|
36
|
+
kw_only_args,
|
|
37
|
+
varargs,
|
|
38
|
+
ascend,
|
|
39
|
+
gpu,
|
|
40
|
+
cpu):
|
|
41
|
+
self.func_name = func_name
|
|
42
|
+
self.op_proto = op_proto
|
|
43
|
+
self.py_method = py_method
|
|
44
|
+
self.kw_only_args = kw_only_args
|
|
45
|
+
self.varargs = varargs
|
|
46
|
+
self.ascend = ascend
|
|
47
|
+
self.gpu = gpu
|
|
48
|
+
self.cpu = cpu
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_tensor_method_ast_dict():
|
|
52
|
+
"""
|
|
53
|
+
Generates a dictionary mapping function names to their Abstract Syntax Tree (AST) nodes
|
|
54
|
+
for all functions defined in the 'tensor_method.py' file.
|
|
55
|
+
"""
|
|
56
|
+
tensor_method_ast_dict = dict()
|
|
57
|
+
tensor_method_file = os.path.join(
|
|
58
|
+
K.WORK_DIR, K.PY_MS_DIR, 'ops/tensor_method.py')
|
|
59
|
+
with open(tensor_method_file, "r", encoding="utf-8") as file:
|
|
60
|
+
tree = ast.parse(file.read(), filename=tensor_method_file)
|
|
61
|
+
for node in ast.walk(tree):
|
|
62
|
+
if isinstance(node, ast.FunctionDef):
|
|
63
|
+
tensor_method_ast_dict[node.name] = node
|
|
64
|
+
return tensor_method_ast_dict
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class OpApiProtoLoader(ResourceLoader):
|
|
68
|
+
"""
|
|
69
|
+
Loads api related proto data.
|
|
70
|
+
"""
|
|
71
|
+
def __init__(self, op_protos, deprecated_op_protos, func_op_protos):
|
|
72
|
+
self.op_api_data = safe_load_yaml_from_dir(os.path.join(K.WORK_DIR, K.MS_OP_API_YAML_PATH))
|
|
73
|
+
self.op_protos = op_protos + func_op_protos
|
|
74
|
+
self.deprecated_op_protos = deprecated_op_protos
|
|
75
|
+
|
|
76
|
+
def load(self):
|
|
77
|
+
"""
|
|
78
|
+
Loads tensor function prototypes from YAML data and returns them as a dictionary.
|
|
79
|
+
"""
|
|
80
|
+
op_protos_dict = {}
|
|
81
|
+
for op_proto in self.op_protos:
|
|
82
|
+
op_protos_dict[op_proto.op_name] = op_proto
|
|
83
|
+
for deprecated_op_proto in self.deprecated_op_protos:
|
|
84
|
+
op_protos_dict[deprecated_op_proto.op_name] = deprecated_op_proto
|
|
85
|
+
tensor_method_protos = defaultdict(list)
|
|
86
|
+
mint_func_protos = defaultdict(list)
|
|
87
|
+
alias_api_mapping = defaultdict(list)
|
|
88
|
+
tensor_method_def_ast_dict = get_tensor_method_ast_dict()
|
|
89
|
+
for func_name, tensor_func_data in self.op_api_data.items():
|
|
90
|
+
func_data_list = [tensor_func_data] if isinstance(
|
|
91
|
+
tensor_func_data, dict) else tensor_func_data
|
|
92
|
+
for func_data in func_data_list:
|
|
93
|
+
func_keys = func_data.keys()
|
|
94
|
+
check_op_api_yaml_keys(func_name, set(
|
|
95
|
+
func_keys), K.TENSOR_FUNC_KEYS)
|
|
96
|
+
if 'alias' in func_data:
|
|
97
|
+
alias_api_mapping[func_data['alias']].append(func_name)
|
|
98
|
+
continue
|
|
99
|
+
op_name = _get_op_name_from_op_yaml(func_name, func_data)
|
|
100
|
+
op_proto = op_protos_dict.get(op_name, None)
|
|
101
|
+
if op_proto is None:
|
|
102
|
+
raise TypeError(
|
|
103
|
+
f"For generating tensor functions, op_proto should not be empty. Func name is {func_name}")
|
|
104
|
+
py_method = func_data.get('py_method', '')
|
|
105
|
+
if py_method == '':
|
|
106
|
+
raise TypeError(
|
|
107
|
+
f'For generating tensor functions, py method should not be empty. Func name is {func_name}')
|
|
108
|
+
if py_method not in tensor_method_def_ast_dict:
|
|
109
|
+
raise TypeError(
|
|
110
|
+
f"{py_method} is not defined in tensor_method.py.")
|
|
111
|
+
kw_only_args = func_data.get('kwonlyargs', None)
|
|
112
|
+
if kw_only_args:
|
|
113
|
+
kw_only_args = [item.strip()
|
|
114
|
+
for item in kw_only_args.split(',')]
|
|
115
|
+
check_kwonlyargs(func_data, kw_only_args, op_name,
|
|
116
|
+
op_proto, py_method, tensor_method_def_ast_dict)
|
|
117
|
+
varargs = func_data.get('varargs', None)
|
|
118
|
+
if varargs:
|
|
119
|
+
varargs = [item.strip() for item in varargs.split(',')]
|
|
120
|
+
check_varargs(varargs, op_name)
|
|
121
|
+
ascend = func_data.get('Ascend', 'aclnn')
|
|
122
|
+
gpu = func_data.get('GPU', 'aclnn')
|
|
123
|
+
cpu = func_data.get('CPU', 'aclnn')
|
|
124
|
+
interface = func_data.get('interface')
|
|
125
|
+
if interface is None:
|
|
126
|
+
raise ValueError(
|
|
127
|
+
f"For generating tensor or functional interfaces, field interface must exist. "
|
|
128
|
+
f"Op name is {func_name}")
|
|
129
|
+
|
|
130
|
+
interface = ', '.join(part.strip()
|
|
131
|
+
for part in interface.split(','))
|
|
132
|
+
|
|
133
|
+
if interface not in {'tensor', 'function', 'tensor, function', 'function, tensor'}:
|
|
134
|
+
raise ValueError(
|
|
135
|
+
f"The value of field 'interface' must be one of 'tensor', 'function', "
|
|
136
|
+
f"'tensor, function', or 'function, tensor'. File name is {func_name}.yaml"
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
proto = OpApiProto(func_name=func_name, op_proto=op_proto, py_method=py_method,
|
|
140
|
+
kw_only_args=kw_only_args, varargs=varargs, ascend=ascend, gpu=gpu, cpu=cpu)
|
|
141
|
+
|
|
142
|
+
if 'tensor' in interface:
|
|
143
|
+
tensor_method_protos[func_name].append(proto)
|
|
144
|
+
if 'function' in interface:
|
|
145
|
+
mint_func_protos[func_name].append(proto)
|
|
146
|
+
|
|
147
|
+
return {ResourceType.TENSOR_METHOD_PROTOS: tensor_method_protos,
|
|
148
|
+
ResourceType.MINT_FUNC_PROTOS: mint_func_protos,
|
|
149
|
+
ResourceType.ALIAS_API_MAPPING: alias_api_mapping}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def check_kwonlyargs(func_data, kw_only_args, op_name, op_proto, py_method, tensor_method_def_ast_dict):
|
|
155
|
+
"""
|
|
156
|
+
Verifies that the keyword-only arguments (kwonlyargs) specified in the YAML definition
|
|
157
|
+
match the order and names of the keyword-only arguments in the Python method definition.
|
|
158
|
+
"""
|
|
159
|
+
op_args = op_proto.op_args
|
|
160
|
+
kw_args_start_idx = len(op_args) - len(kw_only_args)
|
|
161
|
+
node = tensor_method_def_ast_dict[py_method]
|
|
162
|
+
tensor_method_kwonlyargs = [arg.arg for arg in node.args.kwonlyargs]
|
|
163
|
+
for idx, kw_arg in enumerate(kw_only_args):
|
|
164
|
+
kw_args_idx = kw_args_start_idx + idx
|
|
165
|
+
if kw_args_idx > len(op_args) or kw_arg != op_args[kw_args_idx].arg_name:
|
|
166
|
+
op_kw_args = [op_arg.arg_name for op_arg in op_args]
|
|
167
|
+
op_yaml = func_data.get('op_yaml')
|
|
168
|
+
raise TypeError(
|
|
169
|
+
f"For generating tensor functions from {op_name}.yaml, "
|
|
170
|
+
f"the order of kwonlyargs should be consistent with the definition in the {op_yaml}. "
|
|
171
|
+
f"Expect kwonlyarg: {op_kw_args[kw_args_start_idx:]}, current kwonlyarg: {kw_only_args}.")
|
|
172
|
+
if tensor_method_kwonlyargs != kw_only_args:
|
|
173
|
+
raise TypeError(f"The order of kwonlyargs in {py_method} should be consistent with the definition. "
|
|
174
|
+
f"Expect kwonlyarg: {kw_only_args}, current kwonlyarg: {tensor_method_kwonlyargs}.")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def check_varargs(varargs, op_name):
|
|
178
|
+
if len(varargs) != 1:
|
|
179
|
+
raise ValueError(
|
|
180
|
+
f'There must be only one variable argument. But got {len(varargs)} in {op_name}')
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _get_op_name_from_op_yaml(func_name: str, func_data: dict) -> str:
|
|
184
|
+
"""Extracts the operation name from the given YAML function data."""
|
|
185
|
+
op_yaml = func_data.get('op_yaml', '')
|
|
186
|
+
if op_yaml == '':
|
|
187
|
+
raise TypeError(
|
|
188
|
+
f'For generating tensor functions, op yaml should not be empty, func name is {func_name}')
|
|
189
|
+
if 'deprecated' in op_yaml:
|
|
190
|
+
op_name = op_yaml.replace('/', '_').replace('_method.yaml', '')
|
|
191
|
+
else:
|
|
192
|
+
op_name = op_yaml.replace('_op.yaml', '')
|
|
193
|
+
if op_name == '':
|
|
194
|
+
raise TypeError(
|
|
195
|
+
f'For generating tensor functions, op name should not be empty, func name is {func_name}')
|
|
196
|
+
return op_name
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def check_op_api_yaml_keys(func_name: str, input_keys: set, compare_keys: set):
|
|
200
|
+
diff_keys = input_keys - compare_keys
|
|
201
|
+
if diff_keys:
|
|
202
|
+
raise TypeError(
|
|
203
|
+
f'The definition of keys in yaml has faults, func name is {func_name}, wrong keys are {diff_keys}.')
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def categorize_func_data(func_protos_data):
|
|
207
|
+
"""
|
|
208
|
+
Categorizes function prototypes into single, overloaded function prototypes.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
func_protos_data (dict): Dictionary where keys are function API names and values are lists of
|
|
212
|
+
function prototypes associated with each API.
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
tuple:
|
|
216
|
+
- single_op_func_data (dict): Function prototypes for operations with a single definition.
|
|
217
|
+
- overload_op_func_data (dict): Function prototypes for operations with overloaded definitions.
|
|
218
|
+
"""
|
|
219
|
+
single_op_func_data = {}
|
|
220
|
+
overload_op_func_data = {}
|
|
221
|
+
all_op_func_data = {}
|
|
222
|
+
op_class_name_set = set()
|
|
223
|
+
for func_api_name, func_protos in func_protos_data.items():
|
|
224
|
+
if len(func_protos) == 1:
|
|
225
|
+
func_name = func_protos[0].func_name
|
|
226
|
+
if func_name not in single_op_func_data:
|
|
227
|
+
single_op_func_data[func_name] = func_protos[0]
|
|
228
|
+
all_op_func_data[func_name] = func_protos
|
|
229
|
+
elif len(func_protos) > 1:
|
|
230
|
+
overload_op_func_data[func_api_name] = func_protos
|
|
231
|
+
all_op_func_data[func_api_name] = func_protos
|
|
232
|
+
for func_proto in func_protos:
|
|
233
|
+
op_class_name_set.add(func_proto.op_proto.op_class.name)
|
|
234
|
+
|
|
235
|
+
return all_op_func_data, single_op_func_data, overload_op_func_data, op_class_name_set
|