import sys
import re
time_re = re.compile("\s+time:\s*\[[0-9]+\.[0-9]+ [a-z]+ ([0-9]+\.[0-9]+ [a-z]+)")
bench_config_re = re.compile("\((.*),\s+(n = [0-9]+)")
def results():
config_str = None
nthreads_str = None
output = []
for line in sys.stdin:
if line.startswith("intern"):
bench_config_match = bench_config_re.search(line)
if bench_config_match is None:
print("Error parsing input: couldn't identify benchmark configuration in '{}'".format(line))
continue
config_str = bench_config_match.group(1)
nthreads_str = bench_config_match.group(2)
continue
m = time_re.match(line)
if m:
output += [(nthreads_str, config_str, m.group(1))]
return output
def reshape(table):
row_keys = sorted(list(set([row[0] for row in table])))
col_keys = sorted(list(set([row[1] for row in table])))
d = dict([((row[0], row[1]), row[2]) for row in table ])
result = [["" for _ in range(len(col_keys) + 1)] for _ in range(len(row_keys) + 1)]
result[0][0] = "nthreads"
for i, col_key in enumerate(col_keys):
result[0][i + 1] = col_key
for i, row_key in enumerate(row_keys):
result[i + 1][0] = row_key
for i, col_key in enumerate(col_keys):
for j, row_key in enumerate(row_keys):
result[j + 1][i + 1] = d[(row_key, col_key)]
return result
def table_to_gfm(table):
ncols = len(table[0])
col_lens = []
for i in range(ncols):
col_lens += [max([len(row[i]) for row in table])]
format_str = "|"
for _ in range(ncols):
format_str += "{}|"
format_str += "\n"
out = ""
out += format_str.format(*[h.center(col_lens[i]) for (i, h) in enumerate(table[0])])
out += format_str.format(*["".ljust(col_lens[i], "-") for (i, _) in enumerate(table[0])])
for row in table[1:]:
out += format_str.format(*([row[0].center(col_lens[0])] + [row[i].rjust(col_lens[i]) for i in range(1, ncols)]))
return out.strip()
if __name__ == '__main__':
table = results()
table = reshape(table)
print(table_to_gfm(table))