From fa52eab5b0a34b9b1d719e2f3024c8ddf8f77388 Mon Sep 17 00:00:00 2001 From: Giovanni La Mura <giovanni.lamura@inaf.it> Date: Wed, 13 Mar 2024 11:22:03 +0100 Subject: [PATCH] Use adaptive scaling to distinguish between warnings and errors --- src/scripts/pycompare.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/scripts/pycompare.py b/src/scripts/pycompare.py index 37207017..2add23e6 100755 --- a/src/scripts/pycompare.py +++ b/src/scripts/pycompare.py @@ -24,7 +24,7 @@ from math import log10 from sys import argv ## \cond -number_reg = re.compile(r'-?[0-9]\.[0-9]+E[-+][0-9]{2,2}') +number_reg = re.compile(r'-?[0-9]\.[0-9]+E?[-+][0-9]{2,5}') ## \endcond ## \brief Main execution code @@ -291,6 +291,18 @@ def mismatch_severities(str_f_values, str_c_values, config): result = [0 for ri in range(len(str_f_values))] for i in range(len(str_f_values)): if (str_f_values[i] != str_c_values[i]): + # Add the exponent marker if it is missing + temp_str_value = str_f_values[i][1:] + split_temp = temp_str_value.split('-') + if len(split_temp) > 1: + if (split_temp[0][-1] != 'E'): + str_f_values[i] = str_f_values[i][0] + split_temp[0] + "E-" + split_temp[1] + temp_str_value = str_c_values[i][1:] + split_temp = temp_str_value.split('-') + if len(split_temp) > 1: + if (split_temp[0][-1] != 'E'): + str_c_values[i] = str_c_values[i][0] + split_temp[0] + "E-" + split_temp[1] + # End of missing exponent marker correction f_values = [float(str_f_values[j]) for j in range(len(str_f_values))] c_values = [float(str_c_values[j]) for j in range(len(str_c_values))] if (len(f_values) != len(c_values)): return [] @@ -298,22 +310,27 @@ def mismatch_severities(str_f_values, str_c_values, config): c_log_values = [0.0 for j in range(len(c_values))] max_f_log = -1.0e12 max_c_log = -1.0e12 + min_f_log = 1.0e12 + min_c_log = 1.0e12 for j in range(len(f_values)) : if f_values[j] < 0.0: f_values[j] *= -1.0 if c_values[j] < 0.0: c_values[j] *= -1.0 f_log_values[j] = log10(f_values[j]) if f_values[j] > 0.0 else -999 c_log_values[j] = log10(c_values[j]) if c_values[j] > 0.0 else -999 if (f_log_values[j] > max_f_log): max_f_log = f_log_values[j] - if (c_log_values[j] > max_c_log): max_c_log = f_log_values[j] + if (c_log_values[j] > max_c_log): max_c_log = c_log_values[j] + if (f_log_values[j] < min_f_log): min_f_log = f_log_values[j] + if (c_log_values[j] < min_c_log): min_c_log = c_log_values[j] if (c_log_values[i] < max_c_log - 5.0 and f_log_values[i] < max_f_log - 5.0): result[i] = 1 else: + warning_scale = 10.0**(int(max_f_log - f_log_values[i])) difference = c_values[i] - f_values[i] fractional = 1.0 if (f_values[i] != 0.0): fractional = difference / f_values[i] if (fractional < 0.0): fractional *= -1.0 - if (fractional < config['warning_threshold']): result[i] = 2 + if (fractional < warning_scale * config['warning_threshold']): result[i] = 2 else: result[i] = 3 return result -- GitLab