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:
+18
-13
@@ -599,13 +599,15 @@ def fold(Result, results, *,
|
||||
def table(Result, results, diff_results=None, *,
|
||||
by=None,
|
||||
fields=None,
|
||||
hidden=None,
|
||||
sort=None,
|
||||
labels=None,
|
||||
depth=1,
|
||||
hot=None,
|
||||
percent=False,
|
||||
all=False,
|
||||
compare=None,
|
||||
hlabel=None,
|
||||
tlabel=None,
|
||||
no_header=False,
|
||||
small_header=False,
|
||||
no_total=False,
|
||||
@@ -662,7 +664,8 @@ def table(Result, results, diff_results=None, *,
|
||||
# header
|
||||
if not no_header:
|
||||
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)' % (
|
||||
sum(1 for n in table if n not in diff_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 diff_results is None or percent:
|
||||
for k in fields:
|
||||
header.append(k)
|
||||
header.append(hlabel(k) if hlabel is not None else k)
|
||||
else:
|
||||
for k in fields:
|
||||
header.append('o'+k)
|
||||
header.append('o'+(hlabel(k) if hlabel is not None else k))
|
||||
for k in fields:
|
||||
header.append('n'+k)
|
||||
header.append('n'+(hlabel(k) if hlabel is not None else k))
|
||||
for k in fields:
|
||||
header.append('d'+k)
|
||||
header.append('d'+(hlabel(k) if hlabel is not None else k))
|
||||
lines.append(header)
|
||||
|
||||
# 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
|
||||
diff_r = diff_table_.get(n)
|
||||
|
||||
# figure out a good label
|
||||
if labels is not None:
|
||||
label = next(
|
||||
# figure out a good name
|
||||
if hidden is not None:
|
||||
name = next(
|
||||
','.join(str(getattr(r_, k)
|
||||
if getattr(r_, k) is not None
|
||||
else '')
|
||||
for k in labels)
|
||||
for k in by if k not in hidden)
|
||||
for r_ in [r, diff_r]
|
||||
if r_ is not None)
|
||||
else:
|
||||
label = n
|
||||
name = n
|
||||
|
||||
# build line
|
||||
line = table_entry(label, r, diff_r)
|
||||
line = table_entry(name, r, diff_r)
|
||||
|
||||
# add prefixes
|
||||
line = [x if isinstance(x, tuple) else (x, []) for x in line]
|
||||
@@ -867,7 +870,9 @@ def table(Result, results, diff_results=None, *,
|
||||
else:
|
||||
diff_r = next(iter(fold(Result, diff_results, by=[])), Result())
|
||||
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))
|
||||
|
||||
# homogenize
|
||||
|
||||
Reference in New Issue
Block a user