diff --git a/scripts/code.py b/scripts/code.py index 9429b268..b401060d 100755 --- a/scripts/code.py +++ b/scripts/code.py @@ -611,7 +611,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -665,11 +666,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -711,8 +719,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -724,6 +732,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1149,22 +1174,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/cov.py b/scripts/cov.py index 9a8ebbd5..c4fd40d4 100755 --- a/scripts/cov.py +++ b/scripts/cov.py @@ -480,7 +480,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -534,11 +535,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -580,8 +588,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -593,6 +601,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1132,22 +1157,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/csv.py b/scripts/csv.py index 8887c25f..29676150 100755 --- a/scripts/csv.py +++ b/scripts/csv.py @@ -2288,7 +2288,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -2342,11 +2343,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -2388,8 +2396,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -2401,6 +2409,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -3254,22 +3279,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") class AppendEnumerate(argparse.Action): def __call__(self, parser, namespace, value, option): if namespace.by is None: diff --git a/scripts/ctx.py b/scripts/ctx.py index 88bf5639..6fcb4112 100755 --- a/scripts/ctx.py +++ b/scripts/ctx.py @@ -870,7 +870,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -924,11 +925,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -970,8 +978,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -983,6 +991,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1444,22 +1469,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/data.py b/scripts/data.py index ad146b26..a3d558a2 100755 --- a/scripts/data.py +++ b/scripts/data.py @@ -611,7 +611,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -665,11 +666,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -711,8 +719,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -724,6 +732,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1149,22 +1174,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/perf.py b/scripts/perf.py index 210249e6..7c138a1b 100755 --- a/scripts/perf.py +++ b/scripts/perf.py @@ -969,7 +969,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -1023,11 +1024,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -1069,8 +1077,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -1082,6 +1090,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1689,22 +1714,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/perfbd.py b/scripts/perfbd.py index 9b2fecc3..6e7f181d 100755 --- a/scripts/perfbd.py +++ b/scripts/perfbd.py @@ -943,7 +943,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -997,11 +998,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -1043,8 +1051,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -1056,6 +1064,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1693,22 +1718,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/stack.py b/scripts/stack.py index 7620316f..ec600f4c 100755 --- a/scripts/stack.py +++ b/scripts/stack.py @@ -611,7 +611,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -665,11 +666,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -711,8 +719,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -724,6 +732,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1187,22 +1212,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append', diff --git a/scripts/structs.py b/scripts/structs.py index 50e35ff6..87a0690e 100755 --- a/scripts/structs.py +++ b/scripts/structs.py @@ -759,7 +759,8 @@ def table(Result, results, diff_results=None, *, sort=None, depth=1, hot=None, - percent=False, + small_diff=False, + percent_diff=False, all=False, compare=None, hlabel=None, @@ -813,11 +814,18 @@ def table(Result, results, diff_results=None, *, ' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table)) - if diff_results is not None and not percent else '') + if diff_results is not None + and not percent_diff + and not small_diff + else '') if not small_header else ''] - if diff_results is None or percent: + if diff_results is None or percent_diff: for k in fields: header.append(hlabel(k) if hlabel is not None else k) + elif small_diff: + for k in fields: + header.append('o'+(hlabel(k) if hlabel is not None else k)) + header.append('n'+(hlabel(k) if hlabel is not None else k)) else: for k in fields: header.append('o'+(hlabel(k) if hlabel is not None else k)) @@ -859,8 +867,8 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(compare_r, k, None))))) - # percent entry? - elif percent: + # percent diff entry? + elif percent_diff: for k in fields: entry.append( (getattr(r, k).table() @@ -872,6 +880,23 @@ def table(Result, results, diff_results=None, *, types[k].ratio( getattr(r, k, None), getattr(diff_r, k, None))))) + # small diff entry? + elif small_diff: + for k in fields: + entry.append(getattr(diff_r, k).table() + if getattr(diff_r, k, None) is not None + else types[k].none) + entry.append( + (getattr(r, k).table() + if getattr(r, k, None) is not None + else types[k].none, + (lambda t: ['+∞%'] if t == +mt.inf + else ['-∞%'] if t == -mt.inf + else ['%+.1f%%' % (100*t)] if t + else [])( + types[k].ratio( + getattr(r, k, None), + getattr(diff_r, k, None))))) # diff entry? else: for k in fields: @@ -1333,22 +1358,26 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV/JSON file to diff against.") + parser.add_argument( + '--small-diff', + action='store_true', + help="Don't show diff delta.") # need a special Action here because this % causes problems - class StoreTruePercent(argparse._StoreTrueAction): + class StoreTruePercentDiff(argparse._StoreTrueAction): def format_usage(self): return '-%%' parser.add_argument( - '-%', '--percent', - action=StoreTruePercent, + '-%', '--percent-diff', + action=StoreTruePercentDiff, help="Only show percentage change, not a full diff.") - parser.add_argument( - '-C', '--compare', - type=lambda x: tuple(v.strip() for v in x.split(',')), - help="Compare results to the row matching this by pattern.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") + parser.add_argument( + '-C', '--compare', + type=lambda x: tuple(v.strip() for v in x.split(',')), + help="Compare results to the row matching this by pattern.") parser.add_argument( '-b', '--by', action='append',