mindstudio-probe 8.1.2__py3-none-any.whl → 8.2.1__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-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/METADATA +2 -2
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/RECORD +172 -147
- msprobe/README.md +6 -6
- msprobe/core/common/const.py +98 -41
- msprobe/core/common/db_manager.py +256 -0
- msprobe/core/common/file_utils.py +28 -5
- msprobe/core/common/log.py +7 -0
- msprobe/core/common/megatron_utils.py +59 -0
- msprobe/core/common/parallel_state.py +193 -0
- msprobe/core/common/utils.py +20 -13
- msprobe/core/common_config.py +5 -0
- msprobe/core/compare/acc_compare.py +140 -93
- msprobe/core/compare/check.py +13 -0
- msprobe/core/compare/compare_cli.py +64 -6
- msprobe/core/compare/config.py +10 -8
- msprobe/core/compare/diff_analyze/diff_analyze_threshold.yaml +14 -0
- msprobe/core/compare/diff_analyze/first_diff_analyze.py +135 -0
- msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
- msprobe/core/compare/find_first/__init__.py +0 -0
- msprobe/core/compare/find_first/analyzer.py +282 -0
- msprobe/core/compare/find_first/data_processor.py +35 -0
- msprobe/core/compare/find_first/graph.py +188 -0
- msprobe/core/compare/find_first/utils.py +189 -0
- msprobe/core/compare/highlight.py +74 -101
- msprobe/core/compare/layer_mapping/layer_mapping.py +14 -9
- msprobe/core/compare/merge_result/merge_result.py +2 -2
- msprobe/core/compare/multiprocessing_compute.py +45 -28
- msprobe/core/compare/npy_compare.py +7 -10
- msprobe/core/compare/utils.py +338 -130
- msprobe/core/config_check/checkers/dataset_checker.py +2 -1
- msprobe/core/config_check/checkers/env_args_checker.py +5 -5
- msprobe/core/config_check/checkers/hyperparameter_checker.py +30 -10
- msprobe/core/config_check/checkers/pip_checker.py +4 -3
- msprobe/core/config_check/checkers/random_checker.py +3 -3
- msprobe/core/config_check/checkers/weights_checker.py +2 -1
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +2 -0
- msprobe/core/config_check/resource/hyperparameter.yaml +11 -1
- msprobe/core/config_check/utils/hyperparameter_parser.py +7 -3
- msprobe/core/config_check/utils/utils.py +10 -0
- msprobe/core/data_dump/api_registry.py +49 -30
- msprobe/core/data_dump/data_collector.py +71 -29
- msprobe/core/data_dump/data_processor/base.py +2 -0
- msprobe/core/data_dump/data_processor/mindspore_processor.py +47 -53
- msprobe/core/data_dump/data_processor/pytorch_processor.py +227 -93
- msprobe/core/data_dump/json_writer.py +81 -7
- msprobe/core/data_dump/scope.py +4 -6
- msprobe/core/hook_manager.py +129 -70
- msprobe/core/monitor/csv2db.py +361 -0
- msprobe/core/monitor/db_utils.py +278 -0
- msprobe/core/monitor/utils.py +35 -1
- msprobe/core/service.py +31 -39
- msprobe/core/single_save/single_comparator.py +16 -3
- msprobe/docs/01.installation.md +51 -19
- msprobe/docs/02.config_introduction.md +16 -20
- msprobe/docs/03.config_examples.md +26 -0
- msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
- msprobe/docs/05.data_dump_PyTorch.md +6 -2
- msprobe/docs/06.data_dump_MindSpore.md +44 -7
- msprobe/docs/07.accuracy_checker_PyTorch.md +1 -1
- msprobe/docs/10.accuracy_compare_PyTorch.md +124 -44
- msprobe/docs/11.accuracy_compare_MindSpore.md +75 -7
- msprobe/docs/14.data_parse_PyTorch.md +1 -1
- msprobe/docs/19.monitor.md +94 -7
- msprobe/docs/21.visualization_PyTorch.md +71 -101
- msprobe/docs/22.visualization_MindSpore.md +69 -119
- msprobe/docs/23.generate_operator_PyTorch.md +1 -1
- msprobe/docs/25.tool_function_introduction.md +0 -1
- msprobe/docs/26.data_dump_PyTorch_baseline.md +7 -7
- msprobe/docs/28.debugger_save_instruction.md +184 -81
- msprobe/docs/29.data_dump_MSAdapter.md +6 -0
- msprobe/docs/31.config_check.md +4 -2
- msprobe/docs/36.calculation_result_change.md +75 -0
- msprobe/docs/FAQ.md +22 -1
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +6 -2
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_match_info.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +59 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +80 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +330 -0
- msprobe/mindspore/__init__.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_runner.py +9 -6
- msprobe/mindspore/api_accuracy_checker/compute_element.py +18 -12
- msprobe/mindspore/cell_processor.py +64 -25
- msprobe/mindspore/common/utils.py +51 -7
- msprobe/mindspore/compare/common_dir_compare.py +45 -37
- msprobe/mindspore/compare/ms_compare.py +10 -2
- msprobe/mindspore/compare/ms_graph_compare.py +47 -52
- msprobe/mindspore/debugger/debugger_config.py +18 -7
- msprobe/mindspore/debugger/precision_debugger.py +16 -12
- msprobe/mindspore/dump/cell_dump_process.py +130 -68
- msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +10 -2
- msprobe/mindspore/dump/graph_mode_cell_dump.py +35 -9
- msprobe/mindspore/dump/graph_tensor_dump.py +11 -0
- msprobe/mindspore/dump/hook_cell/api_register.py +19 -20
- msprobe/mindspore/dump/hook_cell/hook_cell.py +12 -34
- msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +142 -21
- msprobe/mindspore/dump/kernel_kbyk_dump.py +24 -0
- msprobe/mindspore/exception_dump/__init__.py +0 -0
- msprobe/mindspore/exception_dump/exception_dump_tool_factory.py +51 -0
- msprobe/mindspore/exception_dump/kernel_graph_exception_dump.py +57 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +5 -4
- msprobe/mindspore/mindspore_service.py +2 -2
- msprobe/mindspore/mindtorch/mindtorch_adaptor.py +12 -7
- msprobe/mindspore/monitor/features.py +82 -0
- msprobe/mindspore/monitor/module_hook.py +168 -10
- msprobe/mindspore/monitor/utils.py +27 -1
- msprobe/mindspore/ms_config.py +12 -4
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +1 -1
- msprobe/mindspore/task_handler_factory.py +3 -1
- msprobe/nan_analyze/graph.py +1 -1
- msprobe/pytorch/api_accuracy_checker/common/config.py +3 -36
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +0 -24
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +2 -12
- msprobe/pytorch/api_accuracy_checker/config.yaml +1 -6
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +12 -132
- msprobe/pytorch/common/utils.py +1 -21
- msprobe/pytorch/compare/pt_compare.py +10 -2
- msprobe/pytorch/{hook_module/jit_script_wrapper.py → compare/pt_diff_analyze.py} +3 -15
- msprobe/pytorch/compare/utils.py +2 -1
- msprobe/pytorch/debugger/debugger_config.py +18 -23
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +10 -7
- msprobe/pytorch/dump/module_dump/module_processer.py +41 -19
- msprobe/pytorch/free_benchmark/main.py +7 -4
- msprobe/pytorch/hook_module/api_register.py +62 -24
- msprobe/pytorch/hook_module/hook_module.py +9 -29
- msprobe/pytorch/hook_module/pt_hook_manager.py +84 -15
- msprobe/pytorch/hook_module/script_wrapper.py +140 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +6 -0
- msprobe/pytorch/monitor/csv2tb.py +1 -1
- msprobe/pytorch/monitor/features.py +94 -0
- msprobe/pytorch/monitor/module_hook.py +221 -81
- msprobe/pytorch/monitor/module_metric.py +27 -1
- msprobe/pytorch/monitor/optimizer_collect.py +109 -4
- msprobe/pytorch/online_dispatch/dispatch.py +42 -24
- msprobe/pytorch/online_dispatch/dump_compare.py +1 -1
- msprobe/pytorch/parse_tool/lib/visualization.py +0 -1
- msprobe/pytorch/pt_config.py +2 -51
- msprobe/pytorch/pytorch_service.py +7 -14
- msprobe/visualization/builder/graph_builder.py +192 -63
- msprobe/visualization/builder/graph_merger.py +986 -0
- msprobe/visualization/builder/msprobe_adapter.py +17 -15
- msprobe/visualization/compare/graph_comparator.py +26 -16
- msprobe/visualization/db_utils.py +252 -0
- msprobe/visualization/graph/base_node.py +2 -22
- msprobe/visualization/graph/distributed_analyzer.py +12 -12
- msprobe/visualization/graph/graph.py +44 -16
- msprobe/visualization/graph_service.py +143 -59
- msprobe/visualization/utils.py +103 -4
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +0 -295
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +0 -205
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +0 -378
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +0 -239
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +0 -115
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +0 -250
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +0 -63
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +0 -198
- msprobe/pytorch/attl_manager.py +0 -65
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/WHEEL +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/top_level.txt +0 -0
- /msprobe/{pytorch/api_accuracy_checker/tensor_transport_layer → core/compare/diff_analyze}/__init__.py +0 -0
|
@@ -52,16 +52,20 @@ def _ms_graph_handle_multi_process(func, result_df, mode):
|
|
|
52
52
|
|
|
53
53
|
def err_call(args):
|
|
54
54
|
logger.error('multiprocess compare failed! Reason: {}'.format(args))
|
|
55
|
-
try:
|
|
56
|
-
pool.close()
|
|
57
|
-
except OSError as e:
|
|
58
|
-
logger.error(f'pool terminate failed: {str(e)}')
|
|
59
55
|
|
|
60
56
|
for df_chunk in df_chunks:
|
|
61
57
|
result = pool.apply_async(func, args=(df_chunk, mode), error_callback=err_call)
|
|
62
58
|
results.append(result)
|
|
63
|
-
|
|
59
|
+
|
|
64
60
|
pool.close()
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
final_results = [r.get(timeout=3600) for r in results]
|
|
64
|
+
except Exception as e:
|
|
65
|
+
logger.error(f"Task failed with exception: {e}")
|
|
66
|
+
pool.terminate()
|
|
67
|
+
raise CompareException(CompareException.MULTIPROCESS_ERROR) from e
|
|
68
|
+
|
|
65
69
|
pool.join()
|
|
66
70
|
return pd.concat(final_results, ignore_index=True)
|
|
67
71
|
|
|
@@ -94,8 +98,8 @@ class CompareRealData:
|
|
|
94
98
|
@staticmethod
|
|
95
99
|
def read_dump_data(result_df):
|
|
96
100
|
try:
|
|
97
|
-
npu_dump_name_list = result_df.
|
|
98
|
-
dump_tensor_pair_list = result_df.
|
|
101
|
+
npu_dump_name_list = result_df.loc[0:, CompareConst.NPU_NAME].tolist()
|
|
102
|
+
dump_tensor_pair_list = result_df.loc[0:, CompareConst.DATA_NAME].tolist()
|
|
99
103
|
op_name_mapping_dict = {}
|
|
100
104
|
for index, npu_dump_name in enumerate(npu_dump_name_list):
|
|
101
105
|
dump_tensor_pair = dump_tensor_pair_list[index]
|
|
@@ -104,9 +108,9 @@ class CompareRealData:
|
|
|
104
108
|
except ValueError as e:
|
|
105
109
|
logger.error('result dataframe is not found.')
|
|
106
110
|
raise CompareException(CompareException.INVALID_DATA_ERROR) from e
|
|
107
|
-
except
|
|
111
|
+
except KeyError as e:
|
|
108
112
|
logger.error('result dataframe elements can not be access.')
|
|
109
|
-
raise CompareException(CompareException.
|
|
113
|
+
raise CompareException(CompareException.INVALID_KEY_ERROR) from e
|
|
110
114
|
|
|
111
115
|
@staticmethod
|
|
112
116
|
def _save_cmp_result(offset, result: ComparisonResult, result_df, lock):
|
|
@@ -136,7 +140,7 @@ class CompareRealData:
|
|
|
136
140
|
result.five_thousand_err_ratio_result)[i]
|
|
137
141
|
result_df.loc[process_index, CompareConst.ACCURACY] = (
|
|
138
142
|
check_accuracy(result.cos_result[i], result.max_err_result[i]))
|
|
139
|
-
result_df.loc[process_index, CompareConst.ERROR_MESSAGE]
|
|
143
|
+
result_df.loc[process_index, CompareConst.ERROR_MESSAGE] += result.err_msgs[i]
|
|
140
144
|
return result_df
|
|
141
145
|
except ValueError as e:
|
|
142
146
|
logger.error('result dataframe is not found.')
|
|
@@ -157,20 +161,23 @@ class CompareRealData:
|
|
|
157
161
|
用于读取excel中的NPU_Name和Bench_Name,根据映射关系找到npy或pt文件,然后读取文件中的数据进行比较,计算余弦相似度、欧式距离
|
|
158
162
|
最大绝对误差、最大相对误差、千分之一误差率、千分之五误差率并生成错误信息
|
|
159
163
|
"""
|
|
160
|
-
|
|
164
|
+
relative_err, error_flag, err_msg = None, False, None
|
|
161
165
|
|
|
162
166
|
data_name_pair = op_name_mapping_dict.get(npu_op_name)
|
|
163
167
|
npu_data_name = data_name_pair[0]
|
|
164
168
|
bench_data_name = data_name_pair[1]
|
|
165
169
|
|
|
170
|
+
error_file = data_name_pair
|
|
171
|
+
|
|
166
172
|
if str(npu_data_name) == CompareConst.NO_REAL_DATA_FLAG: # 没有npu真实数据
|
|
167
|
-
n_value, b_value, error_flag = CompareConst.
|
|
173
|
+
n_value, b_value, error_flag = CompareConst.NO_REAL_DATA, CompareConst.NO_REAL_DATA, True
|
|
174
|
+
err_msg = "NPU does not have data file."
|
|
168
175
|
elif str(bench_data_name) == CompareConst.NO_REAL_DATA_FLAG: # 没有bench真实数据
|
|
169
|
-
n_value, b_value, error_flag = CompareConst.
|
|
170
|
-
|
|
176
|
+
n_value, b_value, error_flag = CompareConst.NO_REAL_DATA, CompareConst.NO_REAL_DATA, True
|
|
177
|
+
err_msg = "Bench does not have data file."
|
|
171
178
|
elif str(bench_data_name) == CompareConst.N_A: # bench没匹配
|
|
172
|
-
n_value, b_value, error_flag = CompareConst.
|
|
173
|
-
|
|
179
|
+
n_value, b_value, error_flag = CompareConst.API_UNMATCH, CompareConst.API_UNMATCH, True
|
|
180
|
+
err_msg = "Bench api/module unmatched."
|
|
174
181
|
else:
|
|
175
182
|
npu_dir = input_param.get(CompareConst.NPU_DUMP_DATA_DIR)
|
|
176
183
|
bench_dir = input_param.get(CompareConst.BENCH_DUMP_DATA_DIR)
|
|
@@ -187,8 +194,9 @@ class CompareRealData:
|
|
|
187
194
|
error_flag = True
|
|
188
195
|
|
|
189
196
|
# 通过n_value, b_value同时得到错误标志和错误信息
|
|
190
|
-
|
|
191
|
-
|
|
197
|
+
if not err_msg:
|
|
198
|
+
n_value, b_value, error_flag, err_msg = get_error_flag_and_msg(n_value, b_value, error_flag=error_flag,
|
|
199
|
+
error_file=error_file)
|
|
192
200
|
|
|
193
201
|
result_list, err_msg = compare_ops_apply(n_value, b_value, error_flag, err_msg)
|
|
194
202
|
|
|
@@ -218,11 +226,17 @@ class CompareRealData:
|
|
|
218
226
|
= self.compare_by_op(npu_op_name, bench_op_name, dump_path_dict, input_param)
|
|
219
227
|
|
|
220
228
|
if is_print_compare_log:
|
|
221
|
-
|
|
222
|
-
"[{}] Compare result:
|
|
223
|
-
|
|
224
|
-
"
|
|
225
|
-
|
|
229
|
+
if "does not have data file" in err_msg:
|
|
230
|
+
logger.info(f"[{npu_op_name}] Compare result: {err_msg} ")
|
|
231
|
+
elif "Bench api/module unmatched" in err_msg:
|
|
232
|
+
logger.info(f"[{npu_op_name}] Compare result: {err_msg} ")
|
|
233
|
+
else:
|
|
234
|
+
logger.info(
|
|
235
|
+
f"[{npu_op_name}] Compare result: cosine {cos_sim}, euc_dist {euc_dist}, "
|
|
236
|
+
f"max_abs_err {max_abs_err}, max_relative_err {max_relative_err}, "
|
|
237
|
+
f"one_thousand_err_ratio {one_thousand_err_ratio}, "
|
|
238
|
+
f"five_thousand_err_ratio {five_thousand_err_ratio}, {err_msg}"
|
|
239
|
+
)
|
|
226
240
|
cos_result.append(cos_sim)
|
|
227
241
|
euc_dist_result.append(euc_dist)
|
|
228
242
|
max_err_result.append(max_abs_err)
|
|
@@ -267,10 +281,6 @@ class CompareRealData:
|
|
|
267
281
|
|
|
268
282
|
def err_call(args):
|
|
269
283
|
logger.error('multiprocess compare failed! Reason: {}'.format(args))
|
|
270
|
-
try:
|
|
271
|
-
pool.close()
|
|
272
|
-
except OSError:
|
|
273
|
-
logger.error("pool terminate failed")
|
|
274
284
|
|
|
275
285
|
progress_bar = tqdm(total=len(result_df), desc="API/Module Item Compare Process", unit="row", ncols=100)
|
|
276
286
|
|
|
@@ -288,7 +298,14 @@ class CompareRealData:
|
|
|
288
298
|
)
|
|
289
299
|
results.append(result)
|
|
290
300
|
|
|
291
|
-
final_results = [r.get() for r in results]
|
|
292
301
|
pool.close()
|
|
302
|
+
|
|
303
|
+
try:
|
|
304
|
+
final_results = [r.get(timeout=3600) for r in results]
|
|
305
|
+
except Exception as e:
|
|
306
|
+
logger.error(f"Task failed with exception: {e}")
|
|
307
|
+
pool.terminate()
|
|
308
|
+
raise CompareException(CompareException.MULTIPROCESS_ERROR) from e
|
|
309
|
+
|
|
293
310
|
pool.join()
|
|
294
311
|
return pd.concat(final_results, ignore_index=True)
|
|
@@ -56,13 +56,7 @@ def get_error_flag_and_msg(n_value, b_value, error_flag=False, error_file=None):
|
|
|
56
56
|
"""判断数据是否有异常并返回异常的n_value, b_value,同时返回error_flag和error_msg"""
|
|
57
57
|
err_msg = ""
|
|
58
58
|
if error_flag:
|
|
59
|
-
|
|
60
|
-
err_msg = "Bench does not have data file."
|
|
61
|
-
elif error_file:
|
|
62
|
-
err_msg = f"Dump file: {error_file} not found or read failed."
|
|
63
|
-
else:
|
|
64
|
-
err_msg = CompareConst.NO_BENCH
|
|
65
|
-
error_flag = True
|
|
59
|
+
err_msg = f"Dump file: {error_file} not found or read failed."
|
|
66
60
|
return CompareConst.READ_NONE, CompareConst.READ_NONE, error_flag, err_msg
|
|
67
61
|
|
|
68
62
|
if n_value.size == 0: # 判断读取到的数据是否为空
|
|
@@ -177,8 +171,10 @@ class TensorComparisonBasic(abc.ABC):
|
|
|
177
171
|
def get_relative_err(n_value, b_value):
|
|
178
172
|
"""计算相对误差"""
|
|
179
173
|
with np.errstate(divide='ignore', invalid='ignore'):
|
|
174
|
+
if n_value.dtype not in CompareConst.FLOAT_TYPE:
|
|
175
|
+
n_value = n_value.astype(float)
|
|
180
176
|
if b_value.dtype not in CompareConst.FLOAT_TYPE:
|
|
181
|
-
|
|
177
|
+
b_value = b_value.astype(float)
|
|
182
178
|
|
|
183
179
|
n_value_copy = n_value.copy()
|
|
184
180
|
b_value_copy = b_value.copy()
|
|
@@ -290,7 +286,8 @@ class CompareOps:
|
|
|
290
286
|
|
|
291
287
|
|
|
292
288
|
def error_value_process(n_value):
|
|
293
|
-
if n_value in [CompareConst.READ_NONE, CompareConst.UNREADABLE, CompareConst.NONE
|
|
289
|
+
if n_value in [CompareConst.READ_NONE, CompareConst.UNREADABLE, CompareConst.NONE,
|
|
290
|
+
CompareConst.NO_REAL_DATA, CompareConst.API_UNMATCH]:
|
|
294
291
|
return CompareConst.UNSUPPORTED, ""
|
|
295
292
|
if n_value == CompareConst.SHAPE_UNMATCH:
|
|
296
293
|
return CompareConst.SHAPE_UNMATCH, ""
|
|
@@ -304,7 +301,7 @@ def compare_ops_apply(n_value, b_value, error_flag, err_msg):
|
|
|
304
301
|
if error_flag:
|
|
305
302
|
result, msg = error_value_process(n_value)
|
|
306
303
|
result_list = [result] * len(CompareOps.compare_ops)
|
|
307
|
-
err_msg += msg
|
|
304
|
+
err_msg += msg
|
|
308
305
|
return result_list, err_msg
|
|
309
306
|
|
|
310
307
|
relative_err = get_relative_err(n_value, b_value)
|