"
stats.sort()
for i in stats:
lines = open(i).readlines()
def fixupLine(l):
comment = l.find("#")
if comment >= 0:
l = l[:comment-1]
if l.find("cmdline=") == 0:
l = "cmdline=..." % str(l[8:])
return l
lines = [fixupLine(l) for l in lines]
print >>html, "
""" % (title, cdup, title)
params = ["%s %s" % (v.dim, v) for v in self.values]
print >>html, "Results for:", ", ".join(params)
print >>html, "
Other results
"
for d in self.tests.space:
links = []
for v in d:
if v in self.values:
links.append("%s"%str(v))
else:
vv = DimValues(self.values)
vv.replace(v)
try:
href = cdup + urllib.quote(self.tests[vv.key()].path+"/results.html")
links.append("%s"%(href, str(v)))
except KeyError:
links.append("%s"%str(v))
print >>html, "
"
for i in additionalImgs:
print >>html, self.fullImgLink(i)
os.chdir(cwd)
print >>html, ""
print >>html, "Raw data "
print >>html, "Script source " % (cdup+self.name+".sh.html")
print >>html, "Back to top " % cdup
html.close()
class Space(list):
"""List of Dimensions()s (order matters)"""
def __init__(self, *dimensions):
self.extend(list(dimensions))
def path2dimValues(self, path):
coordinates = path.split("/")
if len(coordinates) != len(self):
raise KeyError("The number coordinates do not match the number of dimensions: " + str(coordinates))
dv = DimValues([DimValue(self[i], coordinates[i]) \
for i in xrange(len(coordinates))])
return dv
def iterValues(self):
idx = [0 for i in xrange(len(self))]
done=False
while not done:
values=DimValues()
for i in xrange(len(self)):
values.append(self[i].values()[idx[i]])
yield values
done=True
for i in xrange(len(self)):
idx[i] += 1
if idx[i] < len(self[i]):
done=False
break
idx[i] = 0
def reorder(self, dimValues):
reordered = DimValues()
for d in self:
for v in dimValues:
if v.dim == d:
reordered.append(v)
return reordered
def iterDimensionPairs(self):
for i in xrange(len(self)):
for j in xrange(i+1, len(self)):
yield (self[i], self[j])
yield (self[j], self[i])
def iterRemainingDimensions(self, dimensionPair):
for d in self:
if d not in dimensionPair:
yield d
class Tests(dict):
"""Represents all tests organized along several dimensions"""
def __init__(self, rootpath, space):
dict.__init__(self)
self.space = space
if (rootpath):
self.populate(rootpath)
def getTest(self, key):
if len(key) != len(self.space):
raise KeyError("The coordinates in key do not match the dimension of the space")
realkey = self.space.reorder(key)
return self[realkey.key()]
def addTest(self, test):
self[test.values.key()] = test
def populate(self, rootpath):
for root, dirs, files in os.walk(rootpath):
if (root.find(rootpath) == 0):
path = root[len(rootpath):]
else:
path = rootpath
if Test.isOnPath(root):
dv = self.space.path2dimValues(path)
self.addTest(Test(root, dv, self))
def generateHtml(self):
for pair in self.space.iterDimensionPairs():
remDims = Space(*tuple([d for d in self.space.iterRemainingDimensions(pair)]))
for vals in remDims.iterValues():
page = Page(pair, vals, self)
print page.getName()
page.generate()
try:
os.remove("index.html")
except OSError: pass
os.symlink(page.getName(), "index.html")
css = open("style.css", "w")
print >>css, """img { border: 0; }
table { border-collapse: collapse; }
th, td { border: 1px solid lightgray; padding: 4px;}
h4 { margin: 0; }
.otherview { margin: 1ex 0}
.otherview .value { color: black; padding: 0ex 1ex; -moz-border-radius: 1ex; border-radius: 1ex;}
.otherview .value a { color: inherit; text-decoration: none; }
.otherview .other:hover { background: #eee; }
.otherview .missing { color: gray; }
.otherview .current { background: #ccc; }
"""
css.close()
for test in self.values():
print test.path
test.generateHtml()
os.system("source-highlight -d --output-dir=. ../*.sh > /dev/null")
class Page(object):
def __init__(self, dimPair, valsOther, tests):
self.dimy, self.dimx = dimPair
self.dimOther = [v.dim for v in valsOther]
self.valsOther = tests.space.reorder(valsOther)
self.tests = tests
def getName(self):
return "%s-vs-%s-for-%s.html"%(self.dimy.type, self.dimx.type,
"-".join([v.value for v in self.valsOther]))
def generate(self):
html = open(self.getName(), "w")
title = "CAN gateway timing analysis"
print >> html, """
%s
%s
""" % (title, title)
params = ["%s %s" % (v.dim, v) for v in self.valsOther]
print >>html, "
"
for v in d:
if v in self.valsOther:
links.append("%s"%str(v))
else:
vv = DimValues(self.valsOther)
vv.replace(v)
links.append("%s"%(urllib.quote(Page((self.dimy, self.dimx), vv, self.tests).getName()), str(v)))
print >>html, " ".join(links)
print >>html, "
"
print >>html, "
"
print >>html, "
%s → %s ↓
" % (self.dimx.name, self.dimy.name)
for x in self.dimx:
print >>html, "
%s
" % x.htmlTableHeading()
print >>html, "
"
for y in self.dimy:
print >>html, "
%s
" % y.htmlTableHeading()
for x in self.dimx:
print >>html, "