#!/usr/bin/env python3

import sys
import re

sys.argv = sys.argv[1:]

colsep = 2

names = []
values = []
maxwidths = []
maxname = 0
filenames = []

for file in sys.argv:
	curvalues = []
	maxwidth = 0
	filenames.append(file)
	for line in open(file):
		line = line.rstrip('\n')
		items = line.split(':')
		if len(items) < 2:
			continue
		name = items[0].strip()
		value = items[1].strip().split(' ')[0]
		if name not in names:
			names.append(name)
		index = names.index(name)
		while len(curvalues) <= index:
			curvalues.append('')
		curvalues[index] = value
		if len(value) > maxwidth:
			maxwidth = len(value)
		if len(name) > maxname:
			maxname = len(name)
	values.append(curvalues)
	maxwidths.append(maxwidth)


basenames = {}
nameindices = []
for i in range(0, len(names)):
	name = names[i]
	base = re.sub("_[^_]*$", "", name)
	type = re.sub("^.*_", "", name)
	if base not in basenames:
		basenames[base] = len(nameindices)
		nameindices.append([])
	nameindices[basenames[base]].append(i)

newnames = []
newvalues = []
for indices in nameindices:
	for i in indices:
		newnames.append(names[i])
for v in values:
	curvalues = []
	for indices in nameindices:
		for i in indices:
			if i < len(v):
				curvalues.append(v[i])
			else:
				curvalues.append('')
	newvalues.append(curvalues)
names = newnames
values = newvalues

line = " " * maxname + " "
for i in range(0, len(filenames)):
	name = filenames[i]
	name = re.sub(".txt$", "", name)
	name = re.sub("^bench-", "", name)
	maxwidth = maxwidths[i]
	maxwidth = 5
	pad = colsep + maxwidth - len(name)
	if pad > 0:
		line = line + " " * pad
	line = line + name
#print(line)

for i in range(0, len(names)):
	name = names[i]
	base = re.sub("_[^_]*$", "", name)
	type = re.sub("^.*_", "", name)
	if type == "c":
		continue
	ref_name = base + "_c"
	if ref_name not in names:
		continue
	ref_idx = names.index(ref_name)
	line = name + ":"
	for j in range(len(name), maxname):
		line = line + " "
	for j in range(0, len(values)):
		maxwidth = maxwidths[j]
		if i >= len(values[j]):
			continue
		value = values[j][i]
		refvalue = values[j][ref_idx]
		if value != '':
			if float(value) > 0:
				speedup = float(refvalue)/float(value)
			else:
				speedup = 0
			speedupstr = "%5.2f" % speedup
		else:
			speedupstr = "     "
		line = line + "  " + speedupstr
	print(line)

