Ability to check formulas
authorAli Saidi <saidi@eecs.umich.edu>
Tue, 18 Jan 2005 22:55:35 +0000 (17:55 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Tue, 18 Jan 2005 22:55:35 +0000 (17:55 -0500)
--HG--
extra : convert_revision : 68a2a19cceb4a8cf8a2798ee5c019d25c0fca3cc

util/stats/info.py
util/stats/stats.py

index d11619765c476de5140c74db6ec0e71d7b4a91bd..644c15264d0441d901a8ec7ad7b6aa98ffe31128 100644 (file)
@@ -3,6 +3,8 @@ import operator, re, types
 
 source = None
 display_run = 0
+global globalTicks
+globalTicks = None
 
 def issequence(t):
     return isinstance(t, types.TupleType) or isinstance(t, types.ListType)
@@ -130,6 +132,7 @@ def cmp(a, b):
         return 1
 
 class Statistic(object):
+
     def __init__(self, data):
         self.__dict__.update(data.__dict__)
         if not self.__dict__.has_key('value'):
@@ -138,9 +141,25 @@ class Statistic(object):
             self.__dict__['bins'] = None
         if not self.__dict__.has_key('ticks'):
             self.__dict__['ticks'] = None
+        if 'vc' not in self.__dict__:
+            self.vc = {}
 
     def __getattribute__(self, attr):
+        if attr == 'ticks':
+            if self.__dict__['ticks'] != globalTicks:
+                self.__dict__['value'] = None
+                self.__dict__['ticks'] = globalTicks
+            return self.__dict__['ticks']
         if attr == 'value':
+            if self.__dict__['ticks'] != globalTicks:
+                if self.__dict__['ticks'] != None and \
+                                    len(self.__dict__['ticks']) == 1:
+                    self.vc[self.__dict__['ticks'][0]] = self.__dict__['value']
+                self.__dict__['ticks'] = globalTicks
+                if len(globalTicks) == 1 and self.vc.has_key(globalTicks[0]):
+                    self.__dict__['value'] = self.vc[globalTicks[0]]
+                else:
+                    self.__dict__['value'] = None
             if self.__dict__['value'] == None:
                 self.__dict__['value'] = self.getValue()
             return self.__dict__['value']
@@ -152,11 +171,12 @@ class Statistic(object):
             if attr == 'bins':
                 if value is not None:
                     value = source.getBin(value)
-            elif attr == 'ticks' and type(value) is str:
-                value = [ int(x) for x in value.split() ]
+            #elif attr == 'ticks' and type(value) is str:
+            #    value = [ int(x) for x in value.split() ]
 
             self.__dict__[attr] = value
             self.__dict__['value'] = None
+            self.vc = {}
         else:
             super(Statistic, self).__setattr__(attr, value)
 
index 62819c3978dc2493c8ee09a8c740a14ab9aee317..892ad143e36e59d967a073d309a2a95f32954509 100755 (executable)
@@ -2,6 +2,7 @@
 from __future__ import division
 import re, sys, math
 
+
 def usage():
     print '''\
 Usage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
@@ -257,18 +258,18 @@ def commands(options, command, args):
         for stat in stats:
 
             print "%s:" % stat.name
-            print "%-30s %12s %12s %4s %5s %5s %5s" % \
-                  ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP")
-            print "%-30s %12s %12s %4s %5s %5s %5s" % \
-                  ("------------------------------", "------------",
-                   "------------", "----", "-----", "-----", "-----")
+            print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
+                  ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV")
+            print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
+                  ("--------------------", "------------",
+                   "------------", "----", "-----", "-----", "-----", "------")
             #loop through all the selected runs
             for run in runs:
                 info.display_run = run.run;
                 runTicks = info.source.retTicks([ run ])
                 #throw away the first one, it's 0
                 runTicks.pop(0)
-                stat.ticks = runTicks
+                info.globalTicks = runTicks
                 avg = float(stat)
                 stdev = 0
                 numoutsideavg  = 0
@@ -277,7 +278,8 @@ def commands(options, command, args):
 
                 #loop through all the various ticks for each run
                 for tick in runTicks:
-                    stat.ticks = str(tick)
+                    #stat.ticks = str(tick)
+                    info.globalTicks = [ tick ]
                     val = float(stat)
                     if (val < (avg * .9)) or (val > (avg * 1.1)):
                         numoutsideavg += 1
@@ -285,17 +287,18 @@ def commands(options, command, args):
 
                 stdev = math.sqrt(stdev / len(runTicks))
                 for tick in runTicks:
-                    stat.ticks = str(tick)
+                    info.globalTicks = [ tick ]
                     val = float(stat)
                     if (val < (avg - stdev)) or (val > (avg + stdev)):
                         numoutside1std += 1
                     if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))):
                         numoutside2std += 1
 
-                print "%-30s %12s %12s %4s %5s %5s %5s" % \
+                print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
                       (run.name, "%.1f" % avg, "%.1f" % stdev,
                        "%d" % numoutsideavg, "%d" % numoutside1std,
-                       "%d" % numoutside2std, "%d" % len(runTicks))
+                       "%d" % numoutside2std, "%d" % len(runTicks),
+                       "%.1f" % (stdev/avg*100))
         return
 
 
@@ -320,7 +323,7 @@ def commands(options, command, args):
             else:
                 if options.ticks:
                    print 'only displaying sample %s' % options.ticks
-                   stat.ticks = options.ticks
+                   info.globalTicks = [ int(x) for x in options.ticks.split() ]
 
                 if options.binned:
                     print 'kernel ticks'