Do not create multiple DimValue instances of the same value
[can-benchmark.git] / gw-tests / genhtml / genhtml.py
index 8906e55..8a94dc8 100755 (executable)
@@ -4,8 +4,16 @@ import os;
 import dircache;
 import sys;
 import urllib
+import traceback
 
-class DimValue:
+class DimValue(object):
+    def __new__(cls, dim, value):
+        if value in dim:
+            print "OLD", value
+            return dim[value]
+        else:
+            print "NEW", value
+            return super(DimValue, cls).__new__(cls, dim, value)
     def __init__(self, dim, value):
        self.dim = dim
        self.value = value
@@ -50,16 +58,15 @@ class Dimension(dict):
     def getValue(self, index):
         return self[self.sortedKeys[index]]
 
-    def addValue(self, *values):
-       for value in values:
-           if value not in self:
-                if isinstance(value, DimValue):
-                    self[value.value] = value
-                else:
-                    raise Exception("Unsupported usage of addValue")
-                    #self[value] = DimValue(self, value)
-       self.sortedKeys = self.keys()
-       self.sortedKeys.sort()
+    def addValue(self, value):
+        if value not in self:
+            if isinstance(value, DimValue):
+                self[value.value] = value
+            else:
+                raise Exception("Unsupported usage of addValue")
+                #self[value] = DimValue(self, value)
+            self.sortedKeys = self.keys()
+            self.sortedKeys.sort()
     def val2str(self, v):
         return str(v)
     def htmlTableHeading(self, v):
@@ -122,7 +129,7 @@ class DimensionTraffic(Dimension):
             return v
     def htmlTableHeading(self, v):
         return self.val2str(v)
-class Test:
+class Test(object):
     @classmethod
     def isOnPath(cls, path):
        f = os.path.join(path, '.results')
@@ -156,11 +163,12 @@ class Test:
 <h1>%s</h1>"""  % (title, cdup, title)
         params = ["%s %s" % (v.dim, v) for v in self.values]
         print >>html, "Results for:", ", ".join(params)
-        print >>html, "<div class='box'><h4>Other views</h4>"
+        print >>html, "<div class='box'><h4>Other results</h4>"
        for d in self.tests.space:
             links = []
-            for v in d.values():
+            for v in d:
                 if v in self.values:
+                    print "XXX", repr(v)
                     links.append(str(v))
                 else:
                     vv = DimValues(self.values)
@@ -181,6 +189,15 @@ 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
@@ -233,13 +250,11 @@ class Tests(dict):
     def populate(self, rootpath):
        for root, dirs, files in os.walk(rootpath):
            if (root.find(rootpath) == 0):
-               coordinates = root[len(rootpath):].split("/")
+               path = root[len(rootpath):]
            else:
-               coordinates = rootpath.split("/")
+               path = rootpath
            if Test.isOnPath(root):
-                if len(coordinates) != len(self.space):
-                    raise KeyError("The number coordinates do not match the number of dimensions: " + str(coordinates))
-                dv = DimValues([DimValue(self.space[i], coordinates[i]) for i in xrange(len(coordinates))])
+                dv = self.space.path2dimValues(path)
                self.addTest(Test(root, dv, self))
     def generateHtml(self):
        for pair in self.space.iterDimensionPairs():
@@ -266,7 +281,7 @@ h4 { margin: 0; }
 
        os.system("source-highlight -d --output-dir=. ../*.sh > /dev/null")
 
-class Page:
+class Page(object):
     def __init__(self, dimPair, valsOther, tests):
        self.dimy, self.dimx = dimPair
        self.dimOther = [v.dim for v in valsOther]
@@ -297,7 +312,7 @@ class Page:
             print >>html, "<a href='%s'>Y axis</a>;&nbsp;&nbsp;" % \
                 Page((d, self.dimx), self.valsOther - d + self.dimy.getValue(0), self.tests).getName()
             links = []
-            for v in d.values():
+            for v in d:
                 if v in self.valsOther:
                     links.append(str(v))
                 else: