|
5 | 5 | import asciitable
|
6 | 6 | import prettytable
|
7 | 7 | import texttable
|
| 8 | +import sys |
| 9 | +import codecs |
8 | 10 |
|
9 | 11 | setup_code = r"""
|
10 | 12 | from csv import writer
|
@@ -51,23 +53,36 @@ def run_tabulate(table):
|
51 | 53 |
|
52 | 54 | """
|
53 | 55 |
|
54 |
| -methods = [("join with tabs and newlines", "join_table(table)"), |
55 |
| - ("csv to StringIO", "csv_table(table)"), |
56 |
| - ("asciitable (%s)" % asciitable.__version__, "run_asciitable(table)"), |
57 |
| - ("tabulate (%s)" % tabulate.__version__, "run_tabulate(table)"), |
58 |
| - ("PrettyTable (%s)" % prettytable.__version__, "run_prettytable(table)"), |
59 |
| - ("texttable (%s)" % texttable.__version__, "run_texttable(table)"), |
| 56 | +methods = [(u"join with tabs and newlines", "join_table(table)"), |
| 57 | + (u"csv to StringIO", "csv_table(table)"), |
| 58 | + (u"asciitable (%s)" % asciitable.__version__, "run_asciitable(table)"), |
| 59 | + (u"tabulate (%s)" % tabulate.__version__, "run_tabulate(table)"), |
| 60 | + (u"PrettyTable (%s)" % prettytable.__version__, "run_prettytable(table)"), |
| 61 | + (u"texttable (%s)" % texttable.__version__, "run_texttable(table)"), |
60 | 62 | ]
|
61 | 63 |
|
62 | 64 |
|
63 | 65 | def benchmark(n):
|
| 66 | + global methods |
| 67 | + if '--onlyself' in sys.argv[1:]: |
| 68 | + methods = [ m for m in methods if m[0].startswith("tabulate") ] |
| 69 | + else: |
| 70 | + methods = methods |
| 71 | + |
64 | 72 | results = [(desc, timeit(code, setup_code, number=n)/n * 1e6)
|
65 | 73 | for desc, code in methods]
|
66 | 74 | mintime = min(map(lambda x: x[1], results))
|
67 |
| - results = [(desc, t, t/mintime) for desc, t in results] |
68 |
| - print tabulate.tabulate(results, |
69 |
| - ["Table formatter", "time, μs", "rel. time"], |
70 |
| - "rst", floatfmt=".1f") |
71 |
| - |
72 |
| - |
73 |
| -benchmark(10000) |
| 75 | + results = [(desc, t, t/mintime) for desc, t in |
| 76 | + sorted(results, key=lambda x: x[1])] |
| 77 | + table = tabulate.tabulate(results, |
| 78 | + [u"Table formatter", u"time, μs", u"rel. time"], |
| 79 | + u"rst", floatfmt=".1f") |
| 80 | + print codecs.encode(table, "utf-8") |
| 81 | + |
| 82 | + |
| 83 | +if __name__ == "__main__": |
| 84 | + if sys.argv[1:]: |
| 85 | + n = int(sys.argv[1]) |
| 86 | + else: |
| 87 | + n = 10000 |
| 88 | + benchmark(n) |
0 commit comments