display.py revision 1049:b175a798c8d4
112955Sgabeblack@google.comclass Value: 212955Sgabeblack@google.com def __init__(self, value, precision, percent = False): 312955Sgabeblack@google.com self.value = value 412955Sgabeblack@google.com self.precision = precision 512955Sgabeblack@google.com self.percent = percent 612955Sgabeblack@google.com def __str__(self): 712955Sgabeblack@google.com if isinstance(self.value, str): 812955Sgabeblack@google.com if self.value.lower() == 'nan': 912955Sgabeblack@google.com value = 'NaN' 1012955Sgabeblack@google.com if self.value.lower() == 'inf': 1112955Sgabeblack@google.com value = 'Inf' 1212955Sgabeblack@google.com else: 1312955Sgabeblack@google.com if self.precision >= 0: 1412955Sgabeblack@google.com format = "%%.%df" % self.precision 1512955Sgabeblack@google.com elif self.value == 0.0: 1612955Sgabeblack@google.com format = "%.0f" 1712955Sgabeblack@google.com elif self.value % 1.0 == 0.0: 1812955Sgabeblack@google.com format = "%.0f" 1912955Sgabeblack@google.com else: 2012955Sgabeblack@google.com format = "%f" 2112955Sgabeblack@google.com value = self.value 2212955Sgabeblack@google.com if self.percent: 2312955Sgabeblack@google.com value = value * 100.0 2412955Sgabeblack@google.com value = format % value 2512955Sgabeblack@google.com 2612955Sgabeblack@google.com if self.percent: 2712955Sgabeblack@google.com value = value + "%" 2812955Sgabeblack@google.com 2912955Sgabeblack@google.com return value 3012955Sgabeblack@google.com 3112955Sgabeblack@google.comclass Print: 3212955Sgabeblack@google.com def __init__(self, **vals): 3313193Sgabeblack@google.com self.__dict__.update(vals) 3412955Sgabeblack@google.com 3512955Sgabeblack@google.com def __str__(self): 3612955Sgabeblack@google.com value = Value(self.value, self.precision) 3712957Sgabeblack@google.com pdf = '' 3812955Sgabeblack@google.com cdf = '' 3912955Sgabeblack@google.com if self.__dict__.has_key('pdf'): 4013206Sgabeblack@google.com pdf = Value(self.pdf, 2, True) 4113063Sgabeblack@google.com if self.__dict__.has_key('cdf'): 4213206Sgabeblack@google.com cdf = Value(self.cdf, 2, True) 4312955Sgabeblack@google.com 4412955Sgabeblack@google.com output = "%-40s %12s %8s %8s" % (self.name, value, pdf, cdf) 4512955Sgabeblack@google.com 4612955Sgabeblack@google.com if descriptions and self.__dict__.has_key('desc') and self.desc: 4712955Sgabeblack@google.com output = "%s # %s" % (output, self.desc) 4812955Sgabeblack@google.com 4912955Sgabeblack@google.com return output 5012955Sgabeblack@google.com 5112955Sgabeblack@google.com def doprint(self): 5212955Sgabeblack@google.com if display_all: 5312955Sgabeblack@google.com return True 5412955Sgabeblack@google.com if self.value == 0.0 and (self.flags & flags_nozero): 5512955Sgabeblack@google.com return False 5612955Sgabeblack@google.com if isinstance(self.value, str): 5712955Sgabeblack@google.com if self.value == 'NaN' and (self.flags & flags_nonan): 5812957Sgabeblack@google.com return False 5912957Sgabeblack@google.com return True 6012955Sgabeblack@google.com 6112955Sgabeblack@google.com def display(self): 6212955Sgabeblack@google.com if self.doprint(): 6312955Sgabeblack@google.com print self 6412955Sgabeblack@google.com 6512955Sgabeblack@google.comclass VectorDisplay: 6612955Sgabeblack@google.com def display(self): 6712955Sgabeblack@google.com p = Print() 6812955Sgabeblack@google.com p.flags = self.flags 6912955Sgabeblack@google.com p.precision = self.precision 7012955Sgabeblack@google.com 7112955Sgabeblack@google.com if issequence(self.value): 7212955Sgabeblack@google.com if not len(self.value): 7312955Sgabeblack@google.com return 7412955Sgabeblack@google.com 7512955Sgabeblack@google.com mytotal = reduce(lambda x,y: float(x) + float(y), self.value) 7612955Sgabeblack@google.com mycdf = 0.0 7712955Sgabeblack@google.com 7812955Sgabeblack@google.com value = self.value 7912955Sgabeblack@google.com 8012955Sgabeblack@google.com if display_all: 8112955Sgabeblack@google.com subnames = [ '[%d]' % i for i in range(len(value)) ] 8212955Sgabeblack@google.com else: 8312955Sgabeblack@google.com subnames = [''] * len(value) 8412955Sgabeblack@google.com 8512955Sgabeblack@google.com if self.__dict__.has_key('subnames'): 8612955Sgabeblack@google.com for i,each in enumerate(self.subnames): 8712955Sgabeblack@google.com if len(each) > 0: 8812955Sgabeblack@google.com subnames[i] = '.%s' % each 8912955Sgabeblack@google.com 9012955Sgabeblack@google.com subdescs = [self.desc]*len(value) 9112955Sgabeblack@google.com if self.__dict__.has_key('subdescs'): 9212955Sgabeblack@google.com for i in xrange(min(len(value), len(self.subdescs))): 9312955Sgabeblack@google.com subdescs[i] = self.subdescs[i] 9412955Sgabeblack@google.com 9512955Sgabeblack@google.com for val,sname,sdesc in map(None, value, subnames, subdescs): 9612955Sgabeblack@google.com if mytotal > 0.0: 9712955Sgabeblack@google.com mypdf = float(val) / float(mytotal) 9813206Sgabeblack@google.com mycdf += mypdf 9913206Sgabeblack@google.com if (self.flags & flags_pdf): 10013206Sgabeblack@google.com p.pdf = mypdf 10113206Sgabeblack@google.com p.cdf = mycdf 10213206Sgabeblack@google.com 10313206Sgabeblack@google.com if len(sname) == 0: 10413206Sgabeblack@google.com continue 10513206Sgabeblack@google.com 10613206Sgabeblack@google.com p.name = self.name + sname 10713206Sgabeblack@google.com p.desc = sdesc 10813206Sgabeblack@google.com p.value = val 10913206Sgabeblack@google.com p.display() 11013206Sgabeblack@google.com 11113206Sgabeblack@google.com if (self.flags & flags_total): 11213206Sgabeblack@google.com if (p.__dict__.has_key('pdf')): del p.__dict__['pdf'] 11313206Sgabeblack@google.com if (p.__dict__.has_key('cdf')): del p.__dict__['cdf'] 11413206Sgabeblack@google.com p.name = self.name + '.total' 11513206Sgabeblack@google.com p.desc = self.desc 11613206Sgabeblack@google.com p.value = mytotal 11713206Sgabeblack@google.com p.display() 11813206Sgabeblack@google.com 11913206Sgabeblack@google.com else: 12013206Sgabeblack@google.com p.name = self.name 12113206Sgabeblack@google.com p.desc = self.desc 12213206Sgabeblack@google.com p.value = self.value 12313206Sgabeblack@google.com p.display() 12413206Sgabeblack@google.com 12513206Sgabeblack@google.com