scripts: csv.py: Added -H/--hlabel and --tlabel
These are useful for customizing the table renderer's header and total
labels:
./scripts/csv.py test.csv -ba -fc \
-Hc='c(MiB/s)' \
--tlabel='wow so many (%(c)s)'
a c(MiB/s)
x 6
wow so many (6) 6
In theory header labels could be controlled by the field names
themselves, but our use of Python's namedtuples internal is quite
limiting.
The immediate use case is -Hprobe=bench+probe in the bench-related
rules, but it may also be useful for adding units such as in the above
example.
---
I considered adding these to all csv scripts, but decided that was too
much. punescape modifiers are probably a good line for what should be
limited to csv.py.
This commit is contained in:
@@ -609,6 +609,7 @@ bench-marks: $(BENCH_CSV)
|
|||||||
-ft='max(float(bench_simtime)/1.0e9)' \
|
-ft='max(float(bench_simtime)/1.0e9)' \
|
||||||
-o-) \
|
-o-) \
|
||||||
-bprobe \
|
-bprobe \
|
||||||
|
-Hprobe=bench+probe \
|
||||||
-fn \
|
-fn \
|
||||||
-ft \
|
-ft \
|
||||||
-fthroughput='avg(float(n) / max(t, 1.0e-9))' \
|
-fthroughput='avg(float(n) / max(t, 1.0e-9))' \
|
||||||
@@ -641,6 +642,7 @@ bench-marks-diff: $(BENCH_CSV)
|
|||||||
-ft='max(float(bench_simtime)/1.0e9)' \
|
-ft='max(float(bench_simtime)/1.0e9)' \
|
||||||
-o-) \
|
-o-) \
|
||||||
-bprobe \
|
-bprobe \
|
||||||
|
-Hprobe=bench+probe \
|
||||||
-fthroughput='avg(float(n) / max(t, 1.0e-9))' \
|
-fthroughput='avg(float(n) / max(t, 1.0e-9))' \
|
||||||
$(SUMMARYFLAGS))
|
$(SUMMARYFLAGS))
|
||||||
|
|
||||||
@@ -660,6 +662,7 @@ bench-bottlenecks: $(BENCH_CSV)
|
|||||||
-fruntime='max(bench_runtime)' \
|
-fruntime='max(bench_runtime)' \
|
||||||
-o-) \
|
-o-) \
|
||||||
-bprobe \
|
-bprobe \
|
||||||
|
-Hprobe=bench+probe \
|
||||||
-fn \
|
-fn \
|
||||||
-ft \
|
-ft \
|
||||||
-fruntime \
|
-fruntime \
|
||||||
@@ -674,6 +677,7 @@ bench-ops: $(BENCH_CSV)
|
|||||||
commit,namelookup,$\
|
commit,namelookup,$\
|
||||||
write,stat,read \
|
write,stat,read \
|
||||||
-bprobe='%(case)s+%(probe)s' \
|
-bprobe='%(case)s+%(probe)s' \
|
||||||
|
-Hprobe=bench+probe \
|
||||||
-Fi='min(enumerate())' \
|
-Fi='min(enumerate())' \
|
||||||
-freads='bench_reads' \
|
-freads='bench_reads' \
|
||||||
-fprogs='bench_progs' \
|
-fprogs='bench_progs' \
|
||||||
@@ -692,6 +696,7 @@ bench-widths: $(BENCH_CSV)
|
|||||||
commit,namelookup,$\
|
commit,namelookup,$\
|
||||||
write,stat,read \
|
write,stat,read \
|
||||||
-bprobe='%(case)s+%(probe)s' \
|
-bprobe='%(case)s+%(probe)s' \
|
||||||
|
-Hprobe=bench+probe \
|
||||||
-Fi='min(enumerate())' \
|
-Fi='min(enumerate())' \
|
||||||
-freaded="avg(saturate(ffrac( \
|
-freaded="avg(saturate(ffrac( \
|
||||||
float(bench_readed)/float(bench_reads), \
|
float(bench_readed)/float(bench_reads), \
|
||||||
|
|||||||
+18
-13
@@ -599,13 +599,15 @@ def fold(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -662,7 +664,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -670,14 +673,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -822,20 +825,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -867,7 +870,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
|
|||||||
+18
-13
@@ -468,13 +468,15 @@ def fold(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -531,7 +533,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -539,14 +542,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -691,20 +694,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -736,7 +739,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
|
|||||||
+55
-20
@@ -1776,6 +1776,15 @@ def punescape(s, attrs=None):
|
|||||||
|
|
||||||
return re.sub(pattern, unescape, s)
|
return re.sub(pattern, unescape, s)
|
||||||
|
|
||||||
|
class PunescapeGetattr:
|
||||||
|
def __init__(self, r):
|
||||||
|
self.r = r
|
||||||
|
def __getitem__(self, k):
|
||||||
|
try:
|
||||||
|
return getattr(self.r, k)
|
||||||
|
except AttributeError:
|
||||||
|
raise KeyError(k)
|
||||||
|
|
||||||
def punescape_help():
|
def punescape_help():
|
||||||
print('mods:')
|
print('mods:')
|
||||||
print(' %-21s %s' % ('%%', 'A literal % character'))
|
print(' %-21s %s' % ('%%', 'A literal % character'))
|
||||||
@@ -1916,7 +1925,7 @@ def compile(fields_, results,
|
|||||||
for k, reverse in it.chain(sort or [], hot or []):
|
for k, reverse in it.chain(sort or [], hot or []):
|
||||||
# this defaults to typechecking sort/hot fields, which is
|
# this defaults to typechecking sort/hot fields, which is
|
||||||
# probably safer, if you really want to sort by strings you
|
# probably safer, if you really want to sort by strings you
|
||||||
# can use --by + --label to create hidden by fields
|
# can use -B/--hidden-by to create hidden by fields
|
||||||
if k and k not in by and k not in fields:
|
if k and k not in by and k not in fields:
|
||||||
fields.append(k)
|
fields.append(k)
|
||||||
# make sure all expr targets are in fields so they get typechecked
|
# make sure all expr targets are in fields so they get typechecked
|
||||||
@@ -2229,13 +2238,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -2292,7 +2303,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -2300,14 +2312,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -2452,20 +2464,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -2497,7 +2509,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -2911,6 +2925,8 @@ def main(csv_paths, *,
|
|||||||
children=None,
|
children=None,
|
||||||
hot=None,
|
hot=None,
|
||||||
notes=None,
|
notes=None,
|
||||||
|
hlabels=None,
|
||||||
|
tlabel=None,
|
||||||
**args):
|
**args):
|
||||||
# show mod help text?
|
# show mod help text?
|
||||||
if args.get('help_mods'):
|
if args.get('help_mods'):
|
||||||
@@ -3000,14 +3016,13 @@ def main(csv_paths, *,
|
|||||||
((k, v) for (k, v), reverse in (hot or [])))
|
((k, v) for (k, v), reverse in (hot or [])))
|
||||||
if v is not None]
|
if v is not None]
|
||||||
|
|
||||||
# figure out labels/by/fields
|
# figure out by/hidden/fields
|
||||||
labels__ = None
|
|
||||||
by__ = []
|
by__ = []
|
||||||
|
hidden__ = None
|
||||||
fields__ = []
|
fields__ = []
|
||||||
if by is not None and any(not hidden for (k, v), hidden in by):
|
|
||||||
labels__ = [k for (k, v), hidden in by if not hidden]
|
|
||||||
if by is not None:
|
if by is not None:
|
||||||
by__ = [k for (k, v), hidden in by]
|
by__ = [k for (k, v), hidden in by]
|
||||||
|
hidden__ = {k for (k, v), hidden in by if hidden}
|
||||||
if fields is not None:
|
if fields is not None:
|
||||||
fields__ = [k for (k, v), hidden in fields
|
fields__ = [k for (k, v), hidden in fields
|
||||||
if not hidden
|
if not hidden
|
||||||
@@ -3047,8 +3062,8 @@ def main(csv_paths, *,
|
|||||||
and not any(k == k_
|
and not any(k == k_
|
||||||
for _, expr in exprs
|
for _, expr in exprs
|
||||||
for k_ in expr.fields()))
|
for k_ in expr.fields()))
|
||||||
labels = labels__
|
|
||||||
by = by__
|
by = by__
|
||||||
|
hidden = hidden__
|
||||||
fields = fields__
|
fields = fields__
|
||||||
|
|
||||||
# filter exprs from sort/hot
|
# filter exprs from sort/hot
|
||||||
@@ -3145,9 +3160,15 @@ def main(csv_paths, *,
|
|||||||
table(Result, results, diff_results,
|
table(Result, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
|
hlabel=(lambda hlabels_: (lambda k:
|
||||||
|
punescape(hlabels_[k]) if k in hlabels_ else k)
|
||||||
|
)(dict(hlabels))
|
||||||
|
if hlabels else None,
|
||||||
|
tlabel=(lambda r: punescape(tlabel, PunescapeGetattr(r)))
|
||||||
|
if tlabel else None,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|
||||||
@@ -3374,6 +3395,20 @@ if __name__ == "__main__":
|
|||||||
const='notes',
|
const='notes',
|
||||||
action='append',
|
action='append',
|
||||||
help="Field to use for notes. Defaults to 'notes'.")
|
help="Field to use for notes. Defaults to 'notes'.")
|
||||||
|
parser.add_argument(
|
||||||
|
'-H', '--hlabel',
|
||||||
|
dest='hlabels',
|
||||||
|
action='append',
|
||||||
|
type=lambda x: (
|
||||||
|
lambda k, v: (
|
||||||
|
k.strip(),
|
||||||
|
v.strip())
|
||||||
|
)(*x.split('=', 1)),
|
||||||
|
help="Change the default header label for a given field. "
|
||||||
|
"Accepts %% modifiers.")
|
||||||
|
parser.add_argument(
|
||||||
|
'--tlabel',
|
||||||
|
help="Change the default TOTAL label. Accepts %% modifiers.")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--no-header',
|
'--no-header',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
|
|||||||
+21
-16
@@ -858,13 +858,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -921,7 +923,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -929,14 +932,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -1081,20 +1084,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -1126,7 +1129,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -1307,13 +1312,13 @@ def main(obj_paths, *,
|
|||||||
hot=None,
|
hot=None,
|
||||||
**args):
|
**args):
|
||||||
# figure out what fields we're interested in
|
# figure out what fields we're interested in
|
||||||
labels = None
|
hidden = None
|
||||||
if by is None:
|
if by is None:
|
||||||
if args.get('output') or args.get('output_json'):
|
if args.get('output') or args.get('output_json'):
|
||||||
by = CtxResult._by
|
by = CtxResult._by
|
||||||
elif depth is not None or hot is not None:
|
elif depth is not None or hot is not None:
|
||||||
by = ['z', 'i', 'function']
|
by = ['z', 'i', 'function']
|
||||||
labels = ['function']
|
hidden = {'z', 'i'}
|
||||||
else:
|
else:
|
||||||
by = ['function']
|
by = ['function']
|
||||||
|
|
||||||
@@ -1403,8 +1408,8 @@ def main(obj_paths, *,
|
|||||||
table(CtxResult, results, diff_results,
|
table(CtxResult, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|||||||
+18
-13
@@ -599,13 +599,15 @@ def fold(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -662,7 +664,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -670,14 +673,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -822,20 +825,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -867,7 +870,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
|
|||||||
+21
-16
@@ -957,13 +957,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -1020,7 +1022,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -1028,14 +1031,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -1180,20 +1183,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -1225,7 +1228,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -1515,7 +1520,7 @@ def main_(perf_paths, *,
|
|||||||
args['color'] = False
|
args['color'] = False
|
||||||
|
|
||||||
# figure out what fields we're interested in
|
# figure out what fields we're interested in
|
||||||
labels = None
|
hidden = None
|
||||||
if by is None:
|
if by is None:
|
||||||
if (args.get('annotate')
|
if (args.get('annotate')
|
||||||
or args.get('threshold')
|
or args.get('threshold')
|
||||||
@@ -1524,7 +1529,7 @@ def main_(perf_paths, *,
|
|||||||
by = PerfResult._by
|
by = PerfResult._by
|
||||||
elif depth is not None or hot is not None:
|
elif depth is not None or hot is not None:
|
||||||
by = ['z', 'function']
|
by = ['z', 'function']
|
||||||
labels = ['function']
|
hidden = {'z'}
|
||||||
else:
|
else:
|
||||||
by = ['function']
|
by = ['function']
|
||||||
|
|
||||||
@@ -1628,8 +1633,8 @@ def main_(perf_paths, *,
|
|||||||
table(PerfResult, results, diff_results,
|
table(PerfResult, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|||||||
+21
-16
@@ -931,13 +931,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -994,7 +996,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -1002,14 +1005,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -1154,20 +1157,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -1199,7 +1202,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -1501,7 +1506,7 @@ def main_(paths, *,
|
|||||||
args['color'] = False
|
args['color'] = False
|
||||||
|
|
||||||
# figure out what fields we're interested in
|
# figure out what fields we're interested in
|
||||||
labels = None
|
hidden = None
|
||||||
if by is None:
|
if by is None:
|
||||||
if (args.get('annotate')
|
if (args.get('annotate')
|
||||||
or args.get('threshold')
|
or args.get('threshold')
|
||||||
@@ -1513,7 +1518,7 @@ def main_(paths, *,
|
|||||||
by = PerfBdResult._by
|
by = PerfBdResult._by
|
||||||
elif depth is not None or hot is not None:
|
elif depth is not None or hot is not None:
|
||||||
by = ['z', 'function']
|
by = ['z', 'function']
|
||||||
labels = ['function']
|
hidden = {'z'}
|
||||||
else:
|
else:
|
||||||
by = ['function']
|
by = ['function']
|
||||||
|
|
||||||
@@ -1624,8 +1629,8 @@ def main_(paths, *,
|
|||||||
table(PerfBdResult, results, diff_results,
|
table(PerfBdResult, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|||||||
+21
-16
@@ -599,13 +599,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -662,7 +664,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -670,14 +673,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -822,20 +825,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -867,7 +870,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -1048,13 +1053,13 @@ def main(ci_paths,
|
|||||||
hot=None,
|
hot=None,
|
||||||
**args):
|
**args):
|
||||||
# figure out what fields we're interested in
|
# figure out what fields we're interested in
|
||||||
labels = None
|
hidden = None
|
||||||
if by is None:
|
if by is None:
|
||||||
if args.get('output') or args.get('output_json'):
|
if args.get('output') or args.get('output_json'):
|
||||||
by = StackResult._by
|
by = StackResult._by
|
||||||
elif depth is not None or hot is not None:
|
elif depth is not None or hot is not None:
|
||||||
by = ['z', 'function']
|
by = ['z', 'function']
|
||||||
labels = ['function']
|
hidden = ['z']
|
||||||
else:
|
else:
|
||||||
by = ['function']
|
by = ['function']
|
||||||
|
|
||||||
@@ -1141,8 +1146,8 @@ def main(ci_paths,
|
|||||||
table(StackResult, results, diff_results,
|
table(StackResult, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|||||||
+21
-16
@@ -747,13 +747,15 @@ def hotify(Result, results, *,
|
|||||||
def table(Result, results, diff_results=None, *,
|
def table(Result, results, diff_results=None, *,
|
||||||
by=None,
|
by=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
|
hidden=None,
|
||||||
sort=None,
|
sort=None,
|
||||||
labels=None,
|
|
||||||
depth=1,
|
depth=1,
|
||||||
hot=None,
|
hot=None,
|
||||||
percent=False,
|
percent=False,
|
||||||
all=False,
|
all=False,
|
||||||
compare=None,
|
compare=None,
|
||||||
|
hlabel=None,
|
||||||
|
tlabel=None,
|
||||||
no_header=False,
|
no_header=False,
|
||||||
small_header=False,
|
small_header=False,
|
||||||
no_total=False,
|
no_total=False,
|
||||||
@@ -810,7 +812,8 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# header
|
# header
|
||||||
if not no_header:
|
if not no_header:
|
||||||
header = ['%s%s' % (
|
header = ['%s%s' % (
|
||||||
','.join(labels if labels is not None else by),
|
','.join((hlabel(k) if hlabel is not None else k)
|
||||||
|
for k in by if hidden is None or k not in hidden),
|
||||||
' (%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))
|
||||||
@@ -818,14 +821,14 @@ def table(Result, results, diff_results=None, *,
|
|||||||
if not small_header else '']
|
if not small_header else '']
|
||||||
if diff_results is None or percent:
|
if diff_results is None or percent:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append(k)
|
header.append(hlabel(k) if hlabel is not None else k)
|
||||||
else:
|
else:
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('o'+k)
|
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('n'+k)
|
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||||
for k in fields:
|
for k in fields:
|
||||||
header.append('d'+k)
|
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||||
lines.append(header)
|
lines.append(header)
|
||||||
|
|
||||||
# delete these to try to catch typos below, we need to rebuild
|
# delete these to try to catch typos below, we need to rebuild
|
||||||
@@ -970,20 +973,20 @@ def table(Result, results, diff_results=None, *,
|
|||||||
# find comparable results
|
# find comparable results
|
||||||
diff_r = diff_table_.get(n)
|
diff_r = diff_table_.get(n)
|
||||||
|
|
||||||
# figure out a good label
|
# figure out a good name
|
||||||
if labels is not None:
|
if hidden is not None:
|
||||||
label = next(
|
name = next(
|
||||||
','.join(str(getattr(r_, k)
|
','.join(str(getattr(r_, k)
|
||||||
if getattr(r_, k) is not None
|
if getattr(r_, k) is not None
|
||||||
else '')
|
else '')
|
||||||
for k in labels)
|
for k in by if k not in hidden)
|
||||||
for r_ in [r, diff_r]
|
for r_ in [r, diff_r]
|
||||||
if r_ is not None)
|
if r_ is not None)
|
||||||
else:
|
else:
|
||||||
label = n
|
name = n
|
||||||
|
|
||||||
# build line
|
# build line
|
||||||
line = table_entry(label, r, diff_r)
|
line = table_entry(name, r, diff_r)
|
||||||
|
|
||||||
# add prefixes
|
# add prefixes
|
||||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||||
@@ -1015,7 +1018,9 @@ def table(Result, results, diff_results=None, *,
|
|||||||
else:
|
else:
|
||||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||||
lines.append(table_entry(
|
lines.append(table_entry(
|
||||||
'TOTAL' if not small_total else '',
|
'' if small_total
|
||||||
|
else tlabel(r) if tlabel is not None
|
||||||
|
else 'TOTAL',
|
||||||
r, diff_r))
|
r, diff_r))
|
||||||
|
|
||||||
# homogenize
|
# homogenize
|
||||||
@@ -1196,13 +1201,13 @@ def main(obj_paths, *,
|
|||||||
hot=None,
|
hot=None,
|
||||||
**args):
|
**args):
|
||||||
# figure out what fields we're interested in
|
# figure out what fields we're interested in
|
||||||
labels = None
|
hidden = None
|
||||||
if by is None:
|
if by is None:
|
||||||
if args.get('output') or args.get('output_json'):
|
if args.get('output') or args.get('output_json'):
|
||||||
by = StructResult._by
|
by = StructResult._by
|
||||||
elif depth is not None or hot is not None:
|
elif depth is not None or hot is not None:
|
||||||
by = ['z', 'i', 'struct']
|
by = ['z', 'i', 'struct']
|
||||||
labels = ['struct']
|
hidden = {'z', 'i'}
|
||||||
else:
|
else:
|
||||||
by = ['struct']
|
by = ['struct']
|
||||||
|
|
||||||
@@ -1292,8 +1297,8 @@ def main(obj_paths, *,
|
|||||||
table(StructResult, results, diff_results,
|
table(StructResult, results, diff_results,
|
||||||
by=by,
|
by=by,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
hidden=hidden,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
labels=labels,
|
|
||||||
depth=depth,
|
depth=depth,
|
||||||
**args)
|
**args)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user