Skip to content

Commit 9601fb8

Browse files
committed
python: Replaced relative_error in statistical test results with a symmetric, unbounded version.
The issue was this: old = 1, new = 0, relative error was 1, because (old - new) / old = 1. Removed absolute_error because they were not really used.
1 parent b7105ff commit 9601fb8

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

python/inet/test/statistical.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,20 @@ def _write_diff_file(a_file_name, b_file_name, diff_file_name):
4343
with open(diff_file_name, "w") as file:
4444
subprocess.call(diff_command, stdout=file)
4545

46+
def _symmetric_relative_error(old, new):
47+
denom = abs(old) + abs(new)
48+
if denom == 0:
49+
return 0.0
50+
return 2 * (new - old) / denom
51+
52+
def _unbounded_relative_error(old, new):
53+
e = _symmetric_relative_error(old, new)
54+
if e >= 2:
55+
return float("inf")
56+
if e <= -2:
57+
return float("-inf")
58+
return 2.0 * math.atanh(e / 2.0)
59+
4660
def _remove_attr_lines(file_path):
4761
with open(file_path, 'r') as file:
4862
lines = file.readlines()
@@ -114,8 +128,7 @@ def check_simulation_task_result(self, simulation_task_result, result_name_filte
114128
(merged['value_stored'].isna() & merged['value_current'].notna()) |
115129
(merged['value_stored'].notna() & merged['value_current'].isna()) |
116130
(merged['value_stored'] != merged['value_current'])].dropna(subset=['value_stored', 'value_current'], how='all').copy()
117-
df["absolute_error"] = df.apply(lambda row: abs(row["value_current"] - row["value_stored"]), axis=1)
118-
df["relative_error"] = df.apply(lambda row: row["absolute_error"] / abs(row["value_stored"]) if row["value_stored"] != 0 else (float("inf") if row["value_current"] != 0 else 0), axis=1)
131+
df["relative_error"] = df.apply(lambda row: _unbounded_relative_error(row["value_current"], row["value_stored"]), axis=1)
119132
df = df[df.apply(lambda row: matches_filter(row["name"], result_name_filter, exclude_result_name_filter, full_match) and \
120133
matches_filter(row["module"], result_module_filter, exclude_result_module_filter, full_match), axis=1)]
121134
if df.empty:

0 commit comments

Comments
 (0)