1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
"""
Create plots for timings
Will create a temporary directory and put plots in PNG format there,
together with an index.html file.
"""
from __future__ import print_function
import os, sys, tempfile, re, socket, time
import datetime
from optparse import OptionParser
from collections import defaultdict
from matplotlib import pyplot, rcParams, dates
# plot setup
rcParams['figure.figsize'] = 5.0, 2.5
rcParams['font.size'] = 9
# command line options
parser = OptionParser()
parser.add_option("-b", "--browse", action="store_true", dest="browse")
parser.add_option("-q", "--quiet", action="store_true", dest="quiet")
options = parser.parse_args()[0]
# file with timing results
tabname = os.getenv("PYMOLTESTTIMINGS", "timings.tab")
# read file
db = defaultdict(lambda: defaultdict(list))
for line in open(tabname):
a = line.rstrip('\n').split("\t")
timestamp = float(a[0])
try:
mac = a[9] + a[5]
except:
mac = a[1]
mac = ':'.join(mac[i:i+2] for i in range(0, len(mac), 2))
value = float(a[2])
key = '%s(%s)' % (a[3], a[4])
db[key][mac].append((timestamp, value))
# helper function for unique PNG filenames
used_png = set()
def get_unused_png(key):
r = key = re.sub(r'[^-\w.]', '_', key)
i = 0
while r in used_png:
i += 1
r = key + '-%d' % i
return r + '.png'
# create output dir
outdir = tempfile.mkdtemp()
htmlout = open(os.path.join(outdir, "index.html"), "w")
print("<h1>PyMOL Benchmarks,", socket.gethostname(), file=htmlout)
print(time.strftime("%D-%T"), "</h1>", file=htmlout)
# make plots
for key in sorted(db):
data = db[key]
pyplot.clf()
fig, ax = pyplot.subplots(1)
maxy = 0.0
for mac in data:
x, y = zip(*data[mac])
x = list(map(datetime.datetime.fromtimestamp, x))
maxy = max(maxy, max(y))
ax.plot(x, y, "o-", label=mac[:290])
fig.autofmt_xdate()
ax.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))
ax.yaxis.set_label_text("Seconds")
ax.set_title(key)
pyplot.grid(True)
pyplot.ylim(0, maxy * 1.1)
pyplot.legend(loc="best")
pngname = get_unused_png(key)
pyplot.savefig(os.path.join(outdir, pngname), dpi=70)
print("<img src='%s'>" % (pngname), file=htmlout)
# done
if not options.quiet:
print(outdir)
# open index.html
if options.browse:
outhtml = os.path.join(outdir, "index.html")
if sys.platform.startswith("darwin"):
os.system("open " + outhtml)
else:
import webbrowser
webbrowser.open(outhtml)
|