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