#!/usr/bin/env python # # Copyright (c) 2018 Stefan Seefeld # All rights reserved. # # This file is part of Boost.uBLAS. It is made available under the # Boost Software License, Version 1.0. # (Consult LICENSE or http://www.boost.org/LICENSE_1_0.txt) import argparse import matplotlib.pyplot as plt import numpy as np class plot(object): def __init__(self, label, data): self.label = label self.data = data def load_file(filename): lines = open(filename, 'r').readlines() label = lines[0][1:-1].strip() lines = [l.strip() for l in lines] lines = [l.split('#', 1)[0] for l in lines] lines = [l for l in lines if l] data = [l.split() for l in lines] return plot(label, list(zip(*data))) def main(argv): parser = argparse.ArgumentParser(prog=argv[0], description='benchmark plotter') parser.add_argument('data', nargs='+', help='benchmark data to plot') parser.add_argument('--log', choices=['no', 'all', 'x', 'y'], help='use a logarithmic scale') args = parser.parse_args(argv[1:]) runs = [load_file(d) for d in args.data] plt.title('Benchmark plot') plt.xlabel('size') plt.ylabel('time (s)') if args.log == 'all': plot = plt.loglog elif args.log == 'x': plot = plt.semilogx elif args.log == 'y': plot = plt.semilogy else: plot = plt.plot plots = [plot(r.data[0], r.data[1], label=r.label) for r in runs] plt.legend() plt.show() return True if __name__ == '__main__': import sys sys.exit(0 if main(sys.argv) else 1)