mindstudio-probe 1.0.3__py3-none-any.whl → 1.1.0__py3-none-any.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.
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/LICENSE +201 -201
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/METADATA +36 -34
- mindstudio_probe-1.1.0.dist-info/RECORD +287 -0
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/WHEEL +1 -1
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/entry_points.txt +1 -0
- msprobe/README.md +131 -237
- msprobe/__init__.py +16 -1
- msprobe/{config/config.json → config.json} +47 -49
- msprobe/core/advisor/advisor.py +124 -124
- msprobe/core/advisor/advisor_const.py +58 -59
- msprobe/core/advisor/advisor_result.py +58 -58
- msprobe/core/common/const.py +402 -318
- msprobe/core/common/exceptions.py +99 -99
- msprobe/core/common/{file_check.py → file_utils.py} +523 -283
- msprobe/core/common/inplace_op_checker.py +38 -0
- msprobe/core/common/inplace_ops.yaml +251 -0
- msprobe/core/common/log.py +86 -69
- msprobe/core/common/utils.py +371 -616
- msprobe/core/common_config.py +78 -71
- msprobe/core/compare/acc_compare.py +472 -298
- msprobe/core/compare/check.py +180 -95
- msprobe/core/compare/compare_cli.py +69 -49
- msprobe/core/compare/highlight.py +259 -222
- msprobe/core/compare/multiprocessing_compute.py +174 -149
- msprobe/core/compare/npy_compare.py +310 -295
- msprobe/core/compare/utils.py +464 -429
- msprobe/core/data_dump/data_collector.py +153 -144
- msprobe/core/data_dump/data_processor/base.py +337 -293
- msprobe/core/data_dump/data_processor/factory.py +76 -59
- msprobe/core/data_dump/data_processor/mindspore_processor.py +192 -198
- msprobe/core/data_dump/data_processor/pytorch_processor.py +383 -389
- msprobe/core/data_dump/json_writer.py +117 -116
- msprobe/core/data_dump/scope.py +194 -178
- msprobe/core/grad_probe/constant.py +74 -70
- msprobe/core/grad_probe/grad_compare.py +170 -175
- msprobe/core/grad_probe/utils.py +77 -52
- msprobe/docs/01.installation.md +99 -0
- msprobe/docs/02.config_introduction.md +137 -0
- msprobe/docs/03.config_examples.md +237 -0
- msprobe/docs/04.acl_config_examples.md +78 -0
- msprobe/docs/05.data_dump_PyTorch.md +326 -0
- msprobe/docs/06.data_dump_MindSpore.md +285 -0
- msprobe/docs/07.accuracy_checker_PyTorch.md +297 -0
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +238 -0
- msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
- msprobe/docs/10.accuracy_compare_PyTorch.md +327 -0
- msprobe/docs/11.accuracy_compare_MindSpore.md +333 -0
- msprobe/docs/12.overflow_check_PyTorch.md +79 -0
- msprobe/docs/13.overflow_check_MindSpore.md +31 -0
- msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
- msprobe/docs/15.free_benchmarking_PyTorch.md +170 -0
- msprobe/docs/16.free_benchmarking_MindSpore.md +140 -0
- msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +205 -207
- msprobe/{pytorch/doc//321/205/320/254/320/270/321/207/342/225/221/342/224/220/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/206/320/277/320/244/321/205/320/277/342/225/243.md → docs/18.online_dispatch.md} +89 -90
- msprobe/docs/FAQ.md +189 -0
- msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
- msprobe/docs/img/free_benchmark_framework.png +0 -0
- msprobe/docs/img/ms_dump.png +0 -0
- msprobe/docs/img/ms_layer.png +0 -0
- msprobe/docs/img/pt_dump.png +0 -0
- msprobe/mindspore/__init__.py +2 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +278 -245
- msprobe/mindspore/api_accuracy_checker/api_info.py +76 -69
- msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
- msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
- msprobe/mindspore/api_accuracy_checker/main.py +8 -15
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
- msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
- msprobe/mindspore/cell_processor.py +58 -34
- msprobe/mindspore/common/const.py +108 -87
- msprobe/mindspore/common/log.py +37 -37
- msprobe/mindspore/common/utils.py +97 -57
- msprobe/mindspore/compare/distributed_compare.py +62 -75
- msprobe/mindspore/compare/layer_mapping.py +146 -0
- msprobe/mindspore/compare/modify_mapping.py +107 -0
- msprobe/mindspore/compare/ms_compare.py +357 -117
- msprobe/mindspore/compare/ms_graph_compare.py +364 -317
- msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
- msprobe/mindspore/debugger/debugger_config.py +69 -74
- msprobe/mindspore/debugger/precision_debugger.py +150 -107
- msprobe/mindspore/dump/dump_tool_factory.py +50 -35
- msprobe/mindspore/dump/hook_cell/api_registry.py +128 -104
- msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +206 -0
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +994 -925
- msprobe/mindspore/dump/hook_cell/wrap_api.py +121 -0
- msprobe/mindspore/dump/jit_dump.py +96 -56
- msprobe/mindspore/dump/kernel_graph_dump.py +75 -60
- msprobe/mindspore/dump/kernel_kbyk_dump.py +79 -65
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +131 -116
- msprobe/mindspore/free_benchmark/common/config.py +27 -12
- msprobe/mindspore/free_benchmark/common/handler_params.py +32 -17
- msprobe/mindspore/free_benchmark/common/utils.py +85 -71
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
- msprobe/mindspore/free_benchmark/decorator/dec_forward.py +57 -42
- msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +122 -107
- msprobe/mindspore/free_benchmark/handler/base_handler.py +105 -90
- msprobe/mindspore/free_benchmark/handler/check_handler.py +56 -41
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +51 -36
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +36 -21
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +82 -67
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +36 -21
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +78 -63
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +77 -0
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +49 -34
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +27 -12
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +44 -27
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +48 -33
- msprobe/mindspore/grad_probe/global_context.py +100 -91
- msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
- msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
- msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
- msprobe/mindspore/grad_probe/hook.py +94 -92
- msprobe/mindspore/grad_probe/utils.py +29 -28
- msprobe/mindspore/ms_config.py +128 -126
- msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +60 -45
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +49 -34
- msprobe/mindspore/runtime.py +4 -4
- msprobe/mindspore/service.py +297 -354
- msprobe/mindspore/task_handler_factory.py +24 -24
- msprobe/msprobe.py +105 -107
- msprobe/pytorch/__init__.py +23 -4
- msprobe/pytorch/api_accuracy_checker/common/config.py +70 -55
- msprobe/pytorch/api_accuracy_checker/common/utils.py +246 -165
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +230 -213
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +632 -581
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +416 -381
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +90 -73
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +265 -244
- msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +370 -332
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +221 -199
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +150 -134
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +518 -581
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +213 -74
- msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +218 -202
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +370 -324
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +227 -204
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +110 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +244 -218
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +63 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +44 -0
- msprobe/pytorch/bench_functions/__init__.py +30 -15
- msprobe/pytorch/bench_functions/apply_adam_w.py +43 -28
- msprobe/pytorch/bench_functions/confusion_transpose.py +34 -19
- msprobe/pytorch/bench_functions/fast_gelu.py +70 -55
- msprobe/pytorch/bench_functions/layer_norm_eval.py +21 -6
- msprobe/pytorch/bench_functions/linear.py +27 -12
- msprobe/pytorch/bench_functions/matmul_backward.py +63 -48
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +538 -421
- msprobe/pytorch/bench_functions/rms_norm.py +30 -15
- msprobe/pytorch/bench_functions/rotary_mul.py +71 -52
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +41 -26
- msprobe/pytorch/bench_functions/swiglu.py +70 -55
- msprobe/pytorch/common/__init__.py +17 -2
- msprobe/pytorch/common/compare_script.template +14 -14
- msprobe/pytorch/common/log.py +33 -32
- msprobe/pytorch/common/parse_json.py +54 -39
- msprobe/pytorch/common/utils.py +310 -300
- msprobe/pytorch/compare/distributed_compare.py +66 -66
- msprobe/pytorch/compare/mapping.yaml +607 -607
- msprobe/pytorch/compare/match.py +49 -33
- msprobe/pytorch/compare/pt_compare.py +82 -40
- msprobe/pytorch/debugger/debugger_config.py +108 -95
- msprobe/pytorch/debugger/precision_debugger.py +173 -125
- msprobe/pytorch/free_benchmark/__init__.py +23 -8
- msprobe/pytorch/free_benchmark/common/constant.py +70 -70
- msprobe/pytorch/free_benchmark/common/counter.py +71 -71
- msprobe/pytorch/free_benchmark/common/enums.py +65 -37
- msprobe/pytorch/free_benchmark/common/params.py +144 -129
- msprobe/pytorch/free_benchmark/common/utils.py +118 -102
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +200 -179
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +119 -104
- msprobe/pytorch/free_benchmark/main.py +120 -105
- msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +28 -13
- msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +56 -41
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +105 -90
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +119 -104
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +87 -63
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +83 -68
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +43 -28
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +60 -45
- msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +34 -19
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +256 -217
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +54 -39
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +38 -23
- msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +45 -30
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +185 -170
- msprobe/pytorch/function_factory.py +91 -75
- msprobe/pytorch/functional/module_dump.py +84 -0
- msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
- msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
- msprobe/pytorch/hook_module/__init__.py +16 -1
- msprobe/pytorch/hook_module/api_registry.py +166 -161
- msprobe/pytorch/hook_module/hook_module.py +118 -120
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
- msprobe/pytorch/hook_module/utils.py +28 -29
- msprobe/pytorch/hook_module/wrap_aten.py +111 -110
- msprobe/pytorch/hook_module/wrap_distributed.py +77 -78
- msprobe/pytorch/hook_module/wrap_functional.py +104 -105
- msprobe/pytorch/hook_module/wrap_npu_custom.py +85 -84
- msprobe/pytorch/hook_module/wrap_tensor.py +69 -71
- msprobe/pytorch/hook_module/wrap_torch.py +84 -86
- msprobe/pytorch/hook_module/wrap_vf.py +60 -62
- msprobe/pytorch/module_processer.py +153 -138
- msprobe/pytorch/online_dispatch/__init__.py +20 -20
- msprobe/pytorch/online_dispatch/compare.py +235 -236
- msprobe/pytorch/online_dispatch/dispatch.py +271 -271
- msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
- msprobe/pytorch/online_dispatch/single_compare.py +391 -391
- msprobe/pytorch/online_dispatch/torch_ops_config.yaml +57 -49
- msprobe/pytorch/online_dispatch/utils.py +127 -146
- msprobe/pytorch/parse.py +19 -4
- msprobe/pytorch/parse_tool/cli.py +31 -32
- msprobe/pytorch/parse_tool/lib/compare.py +259 -271
- msprobe/pytorch/parse_tool/lib/config.py +52 -52
- msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
- msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
- msprobe/pytorch/parse_tool/lib/parse_tool.py +161 -158
- msprobe/pytorch/parse_tool/lib/utils.py +320 -321
- msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
- msprobe/pytorch/pt_config.py +317 -187
- msprobe/pytorch/service.py +311 -252
- mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
- msprobe/config/README.md +0 -539
- msprobe/mindspore/doc/compare.md +0 -58
- msprobe/mindspore/doc/dump.md +0 -217
- msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
- msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +0 -10
- msprobe/pytorch/doc/FAQ.md +0 -193
- msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
- msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
- msprobe/pytorch/doc/dump.md +0 -260
- msprobe/pytorch/doc/msprobe/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/206/320/245/342/226/221/321/206/320/235/320/276dump/321/206/320/260/320/227/321/205/320/227/320/226/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -182
- msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
- msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
- msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
- msprobe/pytorch/doc/run_overflow_check.md +0 -25
- msprobe/pytorch/doc//321/206/320/247/320/260/321/206/320/260/320/227/321/206/320/255/320/226/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/205/320/254/342/225/221/321/206/320/251/320/277/321/211/320/272/320/234/321/210/320/277/320/221/321/205/320/242/320/234/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -151
- msprobe/pytorch/functional/data_processor.py +0 -0
- msprobe/pytorch/functional/dump_module.py +0 -39
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/top_level.txt +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
- /msprobe/{config → docs}/img/free_benchmark.png +0 -0
- /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
- /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
- /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
import os
|
|
19
|
-
import numpy as np
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class Const:
|
|
23
|
-
|
|
24
|
-
MS_ACCU_CMP_PATH = '/usr/local/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare/msaccucmp.py'
|
|
25
|
-
MS_ACCU_CMP_FILE_NAME = 'msaccucmp.py'
|
|
26
|
-
ROOT_DIR = ""
|
|
27
|
-
LOG_LEVEL = "NOTSET"
|
|
28
|
-
DATA_ROOT_DIR = os.path.join(ROOT_DIR, 'parse_data')
|
|
29
|
-
DUMP_CONVERT_DIR = os.path.join(DATA_ROOT_DIR, 'dump_convert')
|
|
30
|
-
COMPARE_DIR = os.path.join(DATA_ROOT_DIR, 'compare_result')
|
|
31
|
-
BATCH_DUMP_CONVERT_DIR = os.path.join(DATA_ROOT_DIR, 'batch_dump_convert')
|
|
32
|
-
BATCH_COMPARE_DIR = os.path.join(DATA_ROOT_DIR, 'batch_compare_result')
|
|
33
|
-
OFFLINE_DUMP_CONVERT_PATTERN = \
|
|
34
|
-
r"^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([0-9]+)(\.[0-9]+)?\.([0-9]{1,255})" \
|
|
35
|
-
r"\.([a-z]+)\.([0-9]{1,255})(\.[x0-9]+)?\.npy$"
|
|
36
|
-
NUMPY_PATTERN = r"^[\w\-_-]\.npy$"
|
|
37
|
-
NPY_SUFFIX = ".npy"
|
|
38
|
-
PKL_SUFFIX = ".pkl"
|
|
39
|
-
DIRECTORY_LENGTH = 4096
|
|
40
|
-
FILE_NAME_LENGTH = 255
|
|
41
|
-
MAX_TRAVERSAL_DEPTH = 5
|
|
42
|
-
FILE_PATTERN = r'^[a-zA-Z0-9_./-]+$'
|
|
43
|
-
ONE_GB = 1 * 1024 * 1024 * 1024
|
|
44
|
-
TEN_GB = 10 * 1024 * 1024 * 1024
|
|
45
|
-
FLOAT_TYPE = [np.half, np.single, float, np.double, np.float64, np.longdouble, np.float32, np.float16]
|
|
46
|
-
HEADER = r""" ____
|
|
47
|
-
/ __ \____ ______________
|
|
48
|
-
/ /_/ / __ `/ ___/ ___/ _ \
|
|
49
|
-
/ ____/ /_/ / / (__ ) __/
|
|
50
|
-
/_/ \__,_/_/ /____/\___/
|
|
51
|
-
|
|
52
|
-
"""
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import os
|
|
19
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Const:
|
|
23
|
+
|
|
24
|
+
MS_ACCU_CMP_PATH = '/usr/local/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare/msaccucmp.py'
|
|
25
|
+
MS_ACCU_CMP_FILE_NAME = 'msaccucmp.py'
|
|
26
|
+
ROOT_DIR = ""
|
|
27
|
+
LOG_LEVEL = "NOTSET"
|
|
28
|
+
DATA_ROOT_DIR = os.path.join(ROOT_DIR, 'parse_data')
|
|
29
|
+
DUMP_CONVERT_DIR = os.path.join(DATA_ROOT_DIR, 'dump_convert')
|
|
30
|
+
COMPARE_DIR = os.path.join(DATA_ROOT_DIR, 'compare_result')
|
|
31
|
+
BATCH_DUMP_CONVERT_DIR = os.path.join(DATA_ROOT_DIR, 'batch_dump_convert')
|
|
32
|
+
BATCH_COMPARE_DIR = os.path.join(DATA_ROOT_DIR, 'batch_compare_result')
|
|
33
|
+
OFFLINE_DUMP_CONVERT_PATTERN = \
|
|
34
|
+
r"^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([0-9]+)(\.[0-9]+)?\.([0-9]{1,255})" \
|
|
35
|
+
r"\.([a-z]+)\.([0-9]{1,255})(\.[x0-9]+)?\.npy$"
|
|
36
|
+
NUMPY_PATTERN = r"^[\w\-_-]\.npy$"
|
|
37
|
+
NPY_SUFFIX = ".npy"
|
|
38
|
+
PKL_SUFFIX = ".pkl"
|
|
39
|
+
DIRECTORY_LENGTH = 4096
|
|
40
|
+
FILE_NAME_LENGTH = 255
|
|
41
|
+
MAX_TRAVERSAL_DEPTH = 5
|
|
42
|
+
FILE_PATTERN = r'^[a-zA-Z0-9_./-]+$'
|
|
43
|
+
ONE_GB = 1 * 1024 * 1024 * 1024
|
|
44
|
+
TEN_GB = 10 * 1024 * 1024 * 1024
|
|
45
|
+
FLOAT_TYPE = [np.half, np.single, float, np.double, np.float64, np.longdouble, np.float32, np.float16]
|
|
46
|
+
HEADER = r""" ____
|
|
47
|
+
/ __ \____ ______________
|
|
48
|
+
/ /_/ / __ `/ ___/ ___/ _ \
|
|
49
|
+
/ ____/ /_/ / / (__ ) __/
|
|
50
|
+
/_/ \__,_/_/ /____/\___/
|
|
51
|
+
|
|
52
|
+
"""
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# coding=utf-8
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class FileDesc(object):
|
|
6
|
-
def __init__(self, file_name, dir_path, timestamp=-1):
|
|
7
|
-
self.file_name = file_name
|
|
8
|
-
self.dir_path = dir_path
|
|
9
|
-
self.path = os.path.join(dir_path, file_name)
|
|
10
|
-
self.timestamp = timestamp
|
|
11
|
-
self.idx = 0
|
|
12
|
-
if self.timestamp == -1:
|
|
13
|
-
self.timestamp = os.path.getmtime(self.path)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class NpuDumpFileDesc(FileDesc):
|
|
17
|
-
def __init__(self, file_name, dir_path, timestamp, op_name, op_type, task_id, stream_id=0):
|
|
18
|
-
super(NpuDumpFileDesc, self).__init__(file_name, dir_path, timestamp)
|
|
19
|
-
self.op_name = op_name
|
|
20
|
-
self.op_type = op_type
|
|
21
|
-
self.task_id = task_id
|
|
22
|
-
stream_id = 0 if stream_id is None else int(stream_id)
|
|
23
|
-
self.stream_id = stream_id
|
|
24
|
-
self.idx = dir_path.split(os.sep)[-1]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class DumpDecodeFileDesc(NpuDumpFileDesc):
|
|
28
|
-
def __init__(self, file_name, dir_path, timestamp, op_name, op_type, task_id, anchor_type, anchor_idx):
|
|
29
|
-
super(DumpDecodeFileDesc, self).__init__(file_name, dir_path, timestamp, op_name, op_type, task_id)
|
|
30
|
-
self.type = anchor_type
|
|
31
|
-
self.idx = anchor_idx
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FileDesc(object):
|
|
6
|
+
def __init__(self, file_name, dir_path, timestamp=-1):
|
|
7
|
+
self.file_name = file_name
|
|
8
|
+
self.dir_path = dir_path
|
|
9
|
+
self.path = os.path.join(dir_path, file_name)
|
|
10
|
+
self.timestamp = timestamp
|
|
11
|
+
self.idx = 0
|
|
12
|
+
if self.timestamp == -1:
|
|
13
|
+
self.timestamp = os.path.getmtime(self.path)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class NpuDumpFileDesc(FileDesc):
|
|
17
|
+
def __init__(self, file_name, dir_path, timestamp, op_name, op_type, task_id, stream_id=0):
|
|
18
|
+
super(NpuDumpFileDesc, self).__init__(file_name, dir_path, timestamp)
|
|
19
|
+
self.op_name = op_name
|
|
20
|
+
self.op_type = op_type
|
|
21
|
+
self.task_id = task_id
|
|
22
|
+
stream_id = 0 if stream_id is None else int(stream_id)
|
|
23
|
+
self.stream_id = stream_id
|
|
24
|
+
self.idx = dir_path.split(os.sep)[-1]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DumpDecodeFileDesc(NpuDumpFileDesc):
|
|
28
|
+
def __init__(self, file_name, dir_path, timestamp, op_name, op_type, task_id, anchor_type, anchor_idx):
|
|
29
|
+
super(DumpDecodeFileDesc, self).__init__(file_name, dir_path, timestamp, op_name, op_type, task_id)
|
|
30
|
+
self.type = anchor_type
|
|
31
|
+
self.idx = anchor_idx
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
"""
|
|
17
|
-
import cmd
|
|
18
|
-
import argparse
|
|
19
|
-
from msprobe.pytorch.parse_tool.lib.parse_tool import ParseTool
|
|
20
|
-
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
21
|
-
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
22
|
-
from msprobe.pytorch.parse_tool.lib.parse_exception import catch_exception
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class InteractiveCli(cmd.Cmd):
|
|
26
|
-
def __init__(self):
|
|
27
|
-
super().__init__()
|
|
28
|
-
self.prompt = "Parse >>> "
|
|
29
|
-
self.parse_tool = ParseTool()
|
|
30
|
-
self.util = Util()
|
|
31
|
-
self.util.print_panel(Const.HEADER)
|
|
32
|
-
self.prepare()
|
|
33
|
-
|
|
34
|
-
@staticmethod
|
|
35
|
-
def _parse_argv(line, insert=None):
|
|
36
|
-
argv = line.split() if line != "" else []
|
|
37
|
-
if "-h" in argv:
|
|
38
|
-
return argv
|
|
39
|
-
if insert is not None and len(argv) and argv[0] != insert:
|
|
40
|
-
argv.insert(0, insert)
|
|
41
|
-
return argv
|
|
42
|
-
|
|
43
|
-
def prepare(self):
|
|
44
|
-
self.parse_tool.prepare()
|
|
45
|
-
|
|
46
|
-
@catch_exception
|
|
47
|
-
def default(self, line=""):
|
|
48
|
-
self.util.execute_command(line)
|
|
49
|
-
return False
|
|
50
|
-
|
|
51
|
-
@catch_exception
|
|
52
|
-
def do_run(self, line=""):
|
|
53
|
-
self.util.execute_command(line)
|
|
54
|
-
|
|
55
|
-
@catch_exception
|
|
56
|
-
def do_vc(self, line=""):
|
|
57
|
-
parser = argparse.ArgumentParser()
|
|
58
|
-
parser.add_argument(
|
|
59
|
-
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
60
|
-
help="<Required> my dump path, the data compared with golden data",
|
|
61
|
-
required=True
|
|
62
|
-
)
|
|
63
|
-
parser.add_argument(
|
|
64
|
-
"-g", "--golden_dump_path", dest="golden_dump_path", default=None,
|
|
65
|
-
help="<Required> the golden dump data path",
|
|
66
|
-
required=True
|
|
67
|
-
)
|
|
68
|
-
parser.add_argument(
|
|
69
|
-
"-out", "--output_path", dest="output_path", default=None,
|
|
70
|
-
help="<Optional> the output path",
|
|
71
|
-
required=False
|
|
72
|
-
)
|
|
73
|
-
parser.add_argument(
|
|
74
|
-
"-cmp_path", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
75
|
-
help="<Optional> the msaccucmp.py file path",
|
|
76
|
-
required=False
|
|
77
|
-
)
|
|
78
|
-
args = parser.parse_args(self._parse_argv(line))
|
|
79
|
-
self.util.check_path_valid(args.my_dump_path)
|
|
80
|
-
self.util.check_path_valid(args.golden_dump_path)
|
|
81
|
-
self.util.check_files_in_path(args.my_dump_path)
|
|
82
|
-
self.util.check_files_in_path(args.golden_dump_path)
|
|
83
|
-
if self.util.dir_contains_only(args.my_dump_path, ".npy") and \
|
|
84
|
-
self.util.dir_contains_only(args.golden_dump_path, ".npy"):
|
|
85
|
-
self.parse_tool.do_compare_converted_dir(args)
|
|
86
|
-
else:
|
|
87
|
-
self.parse_tool.do_vector_compare(args)
|
|
88
|
-
|
|
89
|
-
def do_dc(self, line=""):
|
|
90
|
-
self.parse_tool.do_convert_dump(self._parse_argv(line))
|
|
91
|
-
|
|
92
|
-
def do_pt(self, line=""):
|
|
93
|
-
self.parse_tool.do_print_data(self._parse_argv(line))
|
|
94
|
-
|
|
95
|
-
def do_pk(self, line=""):
|
|
96
|
-
self.parse_tool.do_parse_pkl(self._parse_argv(line))
|
|
97
|
-
|
|
98
|
-
def do_cn(self, line=''):
|
|
99
|
-
self.parse_tool.do_compare_data(self._parse_argv(line))
|
|
100
|
-
|
|
101
|
-
def do_cad(self, line=''):
|
|
102
|
-
self.parse_tool.do_convert_api_dir(self._parse_argv(line))
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
"""
|
|
17
|
+
import cmd
|
|
18
|
+
import argparse
|
|
19
|
+
from msprobe.pytorch.parse_tool.lib.parse_tool import ParseTool
|
|
20
|
+
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
21
|
+
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
22
|
+
from msprobe.pytorch.parse_tool.lib.parse_exception import catch_exception
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class InteractiveCli(cmd.Cmd):
|
|
26
|
+
def __init__(self):
|
|
27
|
+
super().__init__()
|
|
28
|
+
self.prompt = "Parse >>> "
|
|
29
|
+
self.parse_tool = ParseTool()
|
|
30
|
+
self.util = Util()
|
|
31
|
+
self.util.print_panel(Const.HEADER)
|
|
32
|
+
self.prepare()
|
|
33
|
+
|
|
34
|
+
@staticmethod
|
|
35
|
+
def _parse_argv(line, insert=None):
|
|
36
|
+
argv = line.split() if line != "" else []
|
|
37
|
+
if "-h" in argv:
|
|
38
|
+
return argv
|
|
39
|
+
if insert is not None and len(argv) and argv[0] != insert:
|
|
40
|
+
argv.insert(0, insert)
|
|
41
|
+
return argv
|
|
42
|
+
|
|
43
|
+
def prepare(self):
|
|
44
|
+
self.parse_tool.prepare()
|
|
45
|
+
|
|
46
|
+
@catch_exception
|
|
47
|
+
def default(self, line=""):
|
|
48
|
+
self.util.execute_command(line)
|
|
49
|
+
return False
|
|
50
|
+
|
|
51
|
+
@catch_exception
|
|
52
|
+
def do_run(self, line=""):
|
|
53
|
+
self.util.execute_command(line)
|
|
54
|
+
|
|
55
|
+
@catch_exception
|
|
56
|
+
def do_vc(self, line=""):
|
|
57
|
+
parser = argparse.ArgumentParser()
|
|
58
|
+
parser.add_argument(
|
|
59
|
+
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
60
|
+
help="<Required> my dump path, the data compared with golden data",
|
|
61
|
+
required=True
|
|
62
|
+
)
|
|
63
|
+
parser.add_argument(
|
|
64
|
+
"-g", "--golden_dump_path", dest="golden_dump_path", default=None,
|
|
65
|
+
help="<Required> the golden dump data path",
|
|
66
|
+
required=True
|
|
67
|
+
)
|
|
68
|
+
parser.add_argument(
|
|
69
|
+
"-out", "--output_path", dest="output_path", default=None,
|
|
70
|
+
help="<Optional> the output path",
|
|
71
|
+
required=False
|
|
72
|
+
)
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"-cmp_path", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
75
|
+
help="<Optional> the msaccucmp.py file path",
|
|
76
|
+
required=False
|
|
77
|
+
)
|
|
78
|
+
args = parser.parse_args(self._parse_argv(line))
|
|
79
|
+
self.util.check_path_valid(args.my_dump_path)
|
|
80
|
+
self.util.check_path_valid(args.golden_dump_path)
|
|
81
|
+
self.util.check_files_in_path(args.my_dump_path)
|
|
82
|
+
self.util.check_files_in_path(args.golden_dump_path)
|
|
83
|
+
if self.util.dir_contains_only(args.my_dump_path, ".npy") and \
|
|
84
|
+
self.util.dir_contains_only(args.golden_dump_path, ".npy"):
|
|
85
|
+
self.parse_tool.do_compare_converted_dir(args)
|
|
86
|
+
else:
|
|
87
|
+
self.parse_tool.do_vector_compare(args)
|
|
88
|
+
|
|
89
|
+
def do_dc(self, line=""):
|
|
90
|
+
self.parse_tool.do_convert_dump(self._parse_argv(line))
|
|
91
|
+
|
|
92
|
+
def do_pt(self, line=""):
|
|
93
|
+
self.parse_tool.do_print_data(self._parse_argv(line))
|
|
94
|
+
|
|
95
|
+
def do_pk(self, line=""):
|
|
96
|
+
self.parse_tool.do_parse_pkl(self._parse_argv(line))
|
|
97
|
+
|
|
98
|
+
def do_cn(self, line=''):
|
|
99
|
+
self.parse_tool.do_compare_data(self._parse_argv(line))
|
|
100
|
+
|
|
101
|
+
def do_cad(self, line=''):
|
|
102
|
+
self.parse_tool.do_convert_api_dir(self._parse_argv(line))
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
"""
|
|
17
|
-
import logging
|
|
18
|
-
from msprobe.core.common.exceptions import FileCheckException
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class ParseException(Exception):
|
|
22
|
-
|
|
23
|
-
PARSE_INVALID_PATH_ERROR = 0
|
|
24
|
-
PARSE_NO_FILE_ERROR = 1
|
|
25
|
-
PARSE_NO_MODULE_ERROR = 2
|
|
26
|
-
PARSE_INVALID_DATA_ERROR = 3
|
|
27
|
-
PARSE_INVALID_FILE_FORMAT_ERROR = 4
|
|
28
|
-
PARSE_UNICODE_ERROR = 5
|
|
29
|
-
PARSE_JSONDECODE_ERROR = 6
|
|
30
|
-
PARSE_MSACCUCMP_ERROR = 7
|
|
31
|
-
PARSE_LOAD_NPY_ERROR = 8
|
|
32
|
-
PARSE_INVALID_PARAM_ERROR = 9
|
|
33
|
-
|
|
34
|
-
def __init__(self, code, error_info=""):
|
|
35
|
-
super(ParseException, self).__init__()
|
|
36
|
-
self.error_info = error_info
|
|
37
|
-
self.code = code
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def catch_exception(func):
|
|
41
|
-
def inner(*args, **kwargs):
|
|
42
|
-
log = logging.getLogger()
|
|
43
|
-
line = args[-1] if len(args) == 2 else ""
|
|
44
|
-
result = None
|
|
45
|
-
try:
|
|
46
|
-
result = func(*args, **kwargs)
|
|
47
|
-
except OSError:
|
|
48
|
-
log.error("%s: command not found" % line)
|
|
49
|
-
except ParseException:
|
|
50
|
-
log.error("Command execution failed")
|
|
51
|
-
except FileCheckException:
|
|
52
|
-
log.error("Command execution failed")
|
|
53
|
-
return result
|
|
54
|
-
return inner
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
"""
|
|
17
|
+
import logging
|
|
18
|
+
from msprobe.core.common.exceptions import FileCheckException
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ParseException(Exception):
|
|
22
|
+
|
|
23
|
+
PARSE_INVALID_PATH_ERROR = 0
|
|
24
|
+
PARSE_NO_FILE_ERROR = 1
|
|
25
|
+
PARSE_NO_MODULE_ERROR = 2
|
|
26
|
+
PARSE_INVALID_DATA_ERROR = 3
|
|
27
|
+
PARSE_INVALID_FILE_FORMAT_ERROR = 4
|
|
28
|
+
PARSE_UNICODE_ERROR = 5
|
|
29
|
+
PARSE_JSONDECODE_ERROR = 6
|
|
30
|
+
PARSE_MSACCUCMP_ERROR = 7
|
|
31
|
+
PARSE_LOAD_NPY_ERROR = 8
|
|
32
|
+
PARSE_INVALID_PARAM_ERROR = 9
|
|
33
|
+
|
|
34
|
+
def __init__(self, code, error_info=""):
|
|
35
|
+
super(ParseException, self).__init__()
|
|
36
|
+
self.error_info = error_info
|
|
37
|
+
self.code = code
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def catch_exception(func):
|
|
41
|
+
def inner(*args, **kwargs):
|
|
42
|
+
log = logging.getLogger()
|
|
43
|
+
line = args[-1] if len(args) == 2 else ""
|
|
44
|
+
result = None
|
|
45
|
+
try:
|
|
46
|
+
result = func(*args, **kwargs)
|
|
47
|
+
except OSError:
|
|
48
|
+
log.error("%s: command not found" % line)
|
|
49
|
+
except ParseException:
|
|
50
|
+
log.error("Command execution failed")
|
|
51
|
+
except FileCheckException:
|
|
52
|
+
log.error("Command execution failed")
|
|
53
|
+
return result
|
|
54
|
+
return inner
|