diff --git a/scripts/code.py b/scripts/code.py index 64fa5ced..81bfa2d5 100755 --- a/scripts/code.py +++ b/scripts/code.py @@ -375,10 +375,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, **_): all_, all = all, __builtins__.all @@ -411,12 +412,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -426,7 +427,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -457,12 +458,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -479,7 +477,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -487,7 +486,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -500,7 +499,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -513,7 +512,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -537,7 +536,7 @@ def table(Result, results, diff_results=None, *, return entry # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -547,7 +546,7 @@ def table(Result, results, diff_results=None, *, lines.append(table_entry(name, r, diff_r)) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -640,10 +639,11 @@ def main(obj_paths, *, else CodeResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -669,8 +669,7 @@ def main(obj_paths, *, # print table if not args.get('quiet'): - table(CodeResult, results, - diff_results if args.get('diff') else None, + table(CodeResult, results, diff_results, by=by if by is not None else ['function'], fields=fields, sort=sort, @@ -704,18 +703,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -752,10 +755,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/cov.py b/scripts/cov.py index 17a2d7a3..e18b309d 100755 --- a/scripts/cov.py +++ b/scripts/cov.py @@ -385,10 +385,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, **_): all_, all = all, __builtins__.all @@ -421,12 +422,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -436,7 +437,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -467,12 +468,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -489,7 +487,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -497,7 +496,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -510,7 +509,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -523,7 +522,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -547,7 +546,7 @@ def table(Result, results, diff_results=None, *, return entry # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -557,7 +556,7 @@ def table(Result, results, diff_results=None, *, lines.append(table_entry(name, r, diff_r)) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -735,10 +734,11 @@ def main(gcda_paths, *, else CovResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -771,8 +771,7 @@ def main(gcda_paths, *, annotate(CovResult, results, **args) else: # print table - table(CovResult, results, - diff_results if args.get('diff') else None, + table(CovResult, results, diff_results, by=by if by is not None else ['function'], fields=fields if fields is not None else ['lines', 'branches'] if not hits @@ -816,18 +815,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -864,10 +867,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/csv.py b/scripts/csv.py index 6b12e6b6..0746cdb5 100755 --- a/scripts/csv.py +++ b/scripts/csv.py @@ -1400,10 +1400,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, **_): all_, all = all, __builtins__.all @@ -1436,12 +1437,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -1451,7 +1452,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -1461,7 +1462,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -1492,12 +1493,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -1514,7 +1512,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -1522,7 +1521,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -1535,7 +1534,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -1548,7 +1547,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -1572,7 +1571,7 @@ def table(Result, results, diff_results=None, *, return entry # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -1582,7 +1581,7 @@ def table(Result, results, diff_results=None, *, lines.append(table_entry(name, r, diff_r)) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -1688,8 +1687,11 @@ def main(csv_paths, *, for k in Result._by + Result._fields}) # find previous results? - if args.get('diff'): - _, diff_results = collect([args['diff']], defines) + diff_results = None + if args.get('diff') or args.get('percent'): + _, diff_results = collect( + [args.get('diff') or args.get('percent')], + defines) diff_results_ = [] for r in diff_results: if not any(k in r and r[k].strip() @@ -1708,8 +1710,7 @@ def main(csv_paths, *, # print table if not args.get('quiet'): - table(Result, results, - diff_results if args.get('diff') else None, + table(Result, results, diff_results, by=by, fields=fields, sort=sort, @@ -1743,18 +1744,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -1814,10 +1819,6 @@ if __name__ == "__main__": )(*x.split('=', 1)), help="Sort by this field, but backwards. Can include an expression " "of the form field=expr.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") sys.exit(main(**{k: v for k, v in vars(parser.parse_intermixed_args()).items() if v is not None})) diff --git a/scripts/data.py b/scripts/data.py index d756e32b..7fb432f9 100755 --- a/scripts/data.py +++ b/scripts/data.py @@ -375,10 +375,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, **_): all_, all = all, __builtins__.all @@ -411,12 +412,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -426,7 +427,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -457,12 +458,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -479,7 +477,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -487,7 +486,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -500,7 +499,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -513,7 +512,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -537,7 +536,7 @@ def table(Result, results, diff_results=None, *, return entry # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -547,7 +546,7 @@ def table(Result, results, diff_results=None, *, lines.append(table_entry(name, r, diff_r)) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -637,10 +636,11 @@ def main(obj_paths, *, else DataResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -666,8 +666,7 @@ def main(obj_paths, *, # print table if not args.get('quiet'): - table(DataResult, results, - diff_results if args.get('diff') else None, + table(DataResult, results, diff_results, by=by if by is not None else ['function'], fields=fields, sort=sort, @@ -701,18 +700,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -749,10 +752,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/perf.py b/scripts/perf.py index 9295d57c..0fe37985 100755 --- a/scripts/perf.py +++ b/scripts/perf.py @@ -691,10 +691,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, depth=None, hot=None, **_): @@ -757,12 +758,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -772,7 +773,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -803,12 +804,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -825,7 +823,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -833,7 +832,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -846,7 +845,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -859,7 +858,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -936,7 +935,7 @@ def table(Result, results, diff_results=None, *, prefixes[2+is_last] + " ")) # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -956,7 +955,7 @@ def table(Result, results, diff_results=None, *, " ")) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -1164,10 +1163,11 @@ def report(perf_paths, *, else PerfResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -1201,8 +1201,7 @@ def report(perf_paths, *, **args) else: # print table - table(PerfResult, results, - diff_results if args.get('diff') else None, + table(PerfResult, results, diff_results, by=by if by is not None else ['function'], fields=fields if fields is not None else ['cycles'] if not branches and not caches @@ -1258,18 +1257,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -1306,10 +1309,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/perfbd.py b/scripts/perfbd.py index 9e6f468c..130fdb0e 100755 --- a/scripts/perfbd.py +++ b/scripts/perfbd.py @@ -655,10 +655,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, depth=None, hot=None, **_): @@ -721,12 +722,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -736,7 +737,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -767,12 +768,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -789,7 +787,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -797,7 +796,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -810,7 +809,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -823,7 +822,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -900,7 +899,7 @@ def table(Result, results, diff_results=None, *, prefixes[2+is_last] + " ")) # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -920,7 +919,7 @@ def table(Result, results, diff_results=None, *, " ")) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -1140,10 +1139,11 @@ def report(obj_path='', trace_paths=[], *, else PerfBdResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -1178,8 +1178,7 @@ def report(obj_path='', trace_paths=[], *, annotate(PerfBdResult, results, **args) else: # print table - table(PerfBdResult, results, - diff_results if args.get('diff') else None, + table(PerfBdResult, results, diff_results, by=by if by is not None else ['function'], fields=fields, sort=sort, @@ -1225,18 +1224,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -1273,10 +1276,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/stack.py b/scripts/stack.py index 5a59d2c2..4832d94f 100755 --- a/scripts/stack.py +++ b/scripts/stack.py @@ -337,10 +337,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, depth=None, hot=None, **_): @@ -403,12 +404,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -418,7 +419,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -449,12 +450,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -471,7 +469,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -479,7 +478,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -492,7 +491,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -505,7 +504,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -582,7 +581,7 @@ def table(Result, results, diff_results=None, *, prefixes[2+is_last] + " ")) # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -602,7 +601,7 @@ def table(Result, results, diff_results=None, *, " ")) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -701,10 +700,11 @@ def main(ci_paths, else StackResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -730,8 +730,7 @@ def main(ci_paths, # print table if not args.get('quiet'): - table(StackResult, results, - diff_results if args.get('diff') else None, + table(StackResult, results, diff_results, by=by if by is not None else ['function'], fields=fields, sort=sort, @@ -770,18 +769,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -818,10 +821,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources', diff --git a/scripts/structs.py b/scripts/structs.py index 7e802426..1ad1b0a7 100755 --- a/scripts/structs.py +++ b/scripts/structs.py @@ -325,10 +325,11 @@ def table(Result, results, diff_results=None, *, by=None, fields=None, sort=None, - summary=False, + diff=None, + percent=None, all=False, - percent=False, compare=None, + summary=False, **_): all_, all = all, __builtins__.all @@ -361,12 +362,12 @@ def table(Result, results, diff_results=None, *, for k in fields)] # find compare entry if there is one - if compare is not None: + if compare: compare_result = table.get(','.join(str(k) for k in compare)) # sort again, now with diff info, note that python's sort is stable names.sort() - if compare is not None: + if compare: names.sort( key=lambda n: ( table.get(n) == compare_result, @@ -376,7 +377,7 @@ def table(Result, results, diff_results=None, *, getattr(compare_result, k, None)) for k in fields)), reverse=True) - if diff_results is not None: + if diff or percent: names.sort( key=lambda n: tuple( types[k].ratio( @@ -407,12 +408,9 @@ 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 else '') if not summary else ''] - if diff_results is None: - for k in fields: - header.append(k) - elif percent: + if not diff: for k in fields: header.append(k) else: @@ -429,7 +427,8 @@ def table(Result, results, diff_results=None, *, entry = [name] # normal entry? if ((compare is None or r == compare_result) - and diff_results is None): + and not percent + and not diff): for k in fields: entry.append( (getattr(r, k).table(), @@ -437,7 +436,7 @@ def table(Result, results, diff_results=None, *, if getattr(r, k, None) is not None else types[k].none) # compare entry? - elif compare is not None and diff_results is None: + elif not percent and not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -450,7 +449,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(compare_result, k, None))))) # percent entry? - elif diff_results is not None and percent: + elif not diff: for k in fields: entry.append( (getattr(r, k).table() @@ -463,7 +462,7 @@ def table(Result, results, diff_results=None, *, getattr(r, k, None), getattr(diff_r, k, None))))) # diff entry? - elif diff_results is not None: + else: for k in fields: entry.append(getattr(diff_r, k).table() if getattr(diff_r, k, None) is not None @@ -487,7 +486,7 @@ def table(Result, results, diff_results=None, *, return entry # entries - if not summary or compare: + if (not summary) or compare: for name in names: r = table.get(name) if diff_results is None: @@ -497,7 +496,7 @@ def table(Result, results, diff_results=None, *, lines.append(table_entry(name, r, diff_r)) # total, unless we're comparing - if not (compare is not None and diff_results is None): + if not (compare and not percent and not diff): r = next(iter(fold(Result, results, by=[])), None) if diff_results is None: diff_r = None @@ -591,10 +590,11 @@ def main(obj_paths, *, else StructResult._fields)}) # find previous results? - if args.get('diff'): + diff_results = None + if args.get('diff') or args.get('percent'): diff_results = [] try: - with openio(args['diff']) as f: + with openio(args.get('diff') or args.get('percent')) as f: reader = csv.DictReader(f, restval='') for r in reader: # filter by matching defines @@ -621,8 +621,7 @@ def main(obj_paths, *, # print table if not args.get('quiet'): - table(StructResult, results, - diff_results if args.get('diff') else None, + table(StructResult, results, diff_results, by=by if by is not None else ['struct'], fields=fields, sort=sort, @@ -656,18 +655,22 @@ if __name__ == "__main__": parser.add_argument( '-d', '--diff', help="Specify CSV file to diff against.") + parser.add_argument( + '-p', '--percent', + help="Specify CSV file to diff against, but only show precentage " + "change, not a full diff.") parser.add_argument( '-a', '--all', action='store_true', help="Show all, not just the ones that changed.") - parser.add_argument( - '-p', '--percent', - action='store_true', - 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( + '-Y', '--summary', + action='store_true', + help="Only show the total.") parser.add_argument( '-b', '--by', action='append', @@ -704,10 +707,6 @@ if __name__ == "__main__": nargs='?', action=AppendSort, help="Sort by this field, but backwards.") - parser.add_argument( - '-Y', '--summary', - action='store_true', - help="Only show the total.") parser.add_argument( '-F', '--source', dest='sources',