import csv from optparse import OptionParser def read_data(filename): f = open(filename) reader = csv.reader(f, quoting=csv.QUOTE_MINIMAL) rows = [row for row in reader] f.close() return rows name_mapping = { "pyrolog-no-jit": "own-interp", "pyrolog-jit-with-compile": "own-JIT", "pyrolog-jit-warm": "own-JIT warm", "pyrolog-jit": "own-JIT warm", "ciao": "Ciao", "swi": "SWI", "sicstus-compiled": "SICStus", "sicstus-interpreted": "SICStus-interp", } def getname(n): return name_mapping.get(n, n) def format_textable(data, options): output = [] output.append(r"\begin{tabular}{|l||%s} \hline" % ('r|' * len(data[0]), )) output.append(r"\textbf{Benchmark} & %s \\ \hline" % ( "&".join(getname(n) for n in data[0][1:]), )) for row in data[1:]: rowdata = [r"\textbf{%s}" % (row[0].replace("_", "\\_"), )] for i, elt in enumerate(row[1:]): if float(elt) == 0: elt = "--" elif options.memory: elt = r"%s MB" % (round(float(elt), 1), ) elif data[0][i + 1] == "tuprolog": elt = r"%s \textbf{s}" % (round(float(elt)/1000, 1), ) else: elt = "%02d ms" % (round(float(elt), -1), ) rowdata.append(elt) output.append(" & ".join(rowdata) + r" \\ \hline") output.append(r"\end{tabular}") return "\n".join(output) def setup_optparser(): parser = OptionParser() parser.add_option("--csv-file", action='store', dest='filename', default="bench.csv") parser.add_option("--makepdf", action="store_true", help='Produce a pdf file of the table', dest="makepdf", default=False) parser.add_option("--memory", action="store_true", help='The numbers are memory measurements', dest="memory", default=False) return parser texcontent = r""" \documentclass[11pt,a4paper]{article} \begin{document} {\footnotesize %s } \end{document} """ def make_pdf(table): import tempfile, py, os d = py.path.local(tempfile.mkdtemp()) tex = d.join("temp.tex") tex.write(texcontent % table) os.system("pdflatex %s" % (tex, )) def main(): parser = setup_optparser() (options, args) = parser.parse_args() data = read_data(options.filename) table = format_textable(data, options) print table if options.makepdf: make_pdf(table) if __name__ == '__main__': main()