From d324333903a4c43cd44990c4ee64cf191ccd5943 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 4 Nov 2024 01:01:49 -0600 Subject: [PATCH] scripts: Fixed names/lines falling out of sync in diff table renderers As a convenience, -d/--diff in our measurement scripts hides entries that are unchanged by default. Unfortunately this was broken during a recent refactor that ended up filtering the line info but not the actual names. Instead of reverting the broken part of the refactor, I've just moved the filtering up to where we calculate the names. Hopefully this fixes the bug while also simplifying this messy chunk of a logic a bit. --- scripts/code.py | 16 +++++++++------- scripts/cov.py | 16 +++++++++------- scripts/data.py | 16 +++++++++------- scripts/perf.py | 16 +++++++++------- scripts/perfbd.py | 16 +++++++++------- scripts/stack.py | 16 +++++++++------- scripts/structs.py | 16 +++++++++------- scripts/summary.py | 16 +++++++++------- 8 files changed, 72 insertions(+), 56 deletions(-) diff --git a/scripts/code.py b/scripts/code.py index 710eeb63..09aa9116 100755 --- a/scripts/code.py +++ b/scripts/code.py @@ -373,7 +373,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -474,12 +482,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/cov.py b/scripts/cov.py index 212f0889..0b83842c 100755 --- a/scripts/cov.py +++ b/scripts/cov.py @@ -361,7 +361,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -462,12 +470,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/data.py b/scripts/data.py index 7cd488e4..ccb1dfae 100755 --- a/scripts/data.py +++ b/scripts/data.py @@ -373,7 +373,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -474,12 +482,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/perf.py b/scripts/perf.py index 7957c599..a23272d4 100755 --- a/scripts/perf.py +++ b/scripts/perf.py @@ -698,7 +698,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -799,12 +807,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/perfbd.py b/scripts/perfbd.py index e8c134da..e6a87fea 100755 --- a/scripts/perfbd.py +++ b/scripts/perfbd.py @@ -662,7 +662,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -763,12 +771,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/stack.py b/scripts/stack.py index d0d0b232..8a2a41d5 100755 --- a/scripts/stack.py +++ b/scripts/stack.py @@ -344,7 +344,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -445,12 +453,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/structs.py b/scripts/structs.py index 6f79a547..eec1f49f 100755 --- a/scripts/structs.py +++ b/scripts/structs.py @@ -322,7 +322,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -423,12 +431,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total diff --git a/scripts/summary.py b/scripts/summary.py index 17b54d79..4e70fe36 100755 --- a/scripts/summary.py +++ b/scripts/summary.py @@ -453,7 +453,15 @@ def table(Result, results, diff_results=None, *, diff_table = { ','.join(str(getattr(r, k) or '') for k in by): r for r in diff_results or []} - names = list(table.keys() | diff_table.keys()) + names = [name + for name in table.keys() | diff_table.keys() + if diff_results is None + or all_ + or any( + types[k].ratio( + getattr(table.get(name), k, None), + getattr(diff_table.get(name), k, None)) + for k in fields)] # sort again, now with diff info, note that python's sort is stable names.sort() @@ -554,12 +562,6 @@ def table(Result, results, diff_results=None, *, diff_r = None else: diff_r = diff_table.get(name) - if not all_ and not any( - types[k].ratio( - getattr(r, k, None), - getattr(diff_r, k, None)) - for k in fields): - continue lines.append(table_entry(name, r, diff_r)) # total