print.py revision 1547
11049Sbinkertn@umich.eduall = False
21049Sbinkertn@umich.edudescriptions = False
31049Sbinkertn@umich.edu
41049Sbinkertn@umich.educlass Value:
51049Sbinkertn@umich.edu    def __init__(self, value, precision, percent = False):
61049Sbinkertn@umich.edu        self.value = value
71049Sbinkertn@umich.edu        self.precision = precision
81049Sbinkertn@umich.edu        self.percent = percent
91049Sbinkertn@umich.edu    def __str__(self):
101049Sbinkertn@umich.edu        if isinstance(self.value, str):
111049Sbinkertn@umich.edu            if self.value.lower() == 'nan':
121049Sbinkertn@umich.edu                value = 'NaN'
131049Sbinkertn@umich.edu            if self.value.lower() == 'inf':
141049Sbinkertn@umich.edu                value = 'Inf'
151049Sbinkertn@umich.edu        else:
161049Sbinkertn@umich.edu            if self.precision >= 0:
171049Sbinkertn@umich.edu                format = "%%.%df" % self.precision
181049Sbinkertn@umich.edu            elif self.value == 0.0:
191049Sbinkertn@umich.edu                format = "%.0f"
201049Sbinkertn@umich.edu            elif self.value % 1.0 == 0.0:
211049Sbinkertn@umich.edu                format = "%.0f"
221049Sbinkertn@umich.edu            else:
231049Sbinkertn@umich.edu                format = "%f"
241049Sbinkertn@umich.edu            value = self.value
251049Sbinkertn@umich.edu            if self.percent:
261049Sbinkertn@umich.edu                value = value * 100.0
271049Sbinkertn@umich.edu            value = format % value
281049Sbinkertn@umich.edu
291049Sbinkertn@umich.edu        if self.percent:
301049Sbinkertn@umich.edu            value = value + "%"
311049Sbinkertn@umich.edu
321049Sbinkertn@umich.edu        return value
331049Sbinkertn@umich.edu
341049Sbinkertn@umich.educlass Print:
351049Sbinkertn@umich.edu    def __init__(self, **vals):
361049Sbinkertn@umich.edu        self.__dict__.update(vals)
371049Sbinkertn@umich.edu
381049Sbinkertn@umich.edu    def __str__(self):
391049Sbinkertn@umich.edu        value = Value(self.value, self.precision)
401049Sbinkertn@umich.edu        pdf = ''
411049Sbinkertn@umich.edu        cdf = ''
421049Sbinkertn@umich.edu        if self.__dict__.has_key('pdf'):
431049Sbinkertn@umich.edu            pdf = Value(self.pdf, 2, True)
441049Sbinkertn@umich.edu        if self.__dict__.has_key('cdf'):
451049Sbinkertn@umich.edu            cdf = Value(self.cdf, 2, True)
461049Sbinkertn@umich.edu
471049Sbinkertn@umich.edu        output = "%-40s %12s %8s %8s" % (self.name, value, pdf, cdf)
481049Sbinkertn@umich.edu
491049Sbinkertn@umich.edu        if descriptions and self.__dict__.has_key('desc') and self.desc:
501049Sbinkertn@umich.edu            output = "%s # %s" % (output, self.desc)
511049Sbinkertn@umich.edu
521049Sbinkertn@umich.edu        return output
531049Sbinkertn@umich.edu
541049Sbinkertn@umich.edu    def doprint(self):
551049Sbinkertn@umich.edu        if display_all:
561049Sbinkertn@umich.edu            return True
571049Sbinkertn@umich.edu        if self.value == 0.0 and (self.flags & flags_nozero):
581049Sbinkertn@umich.edu            return False
591049Sbinkertn@umich.edu        if isinstance(self.value, str):
601049Sbinkertn@umich.edu            if self.value == 'NaN' and (self.flags & flags_nonan):
611049Sbinkertn@umich.edu                return False
621049Sbinkertn@umich.edu        return True
631049Sbinkertn@umich.edu
641049Sbinkertn@umich.edu    def display(self):
651049Sbinkertn@umich.edu        if self.doprint():
661049Sbinkertn@umich.edu            print self
671049Sbinkertn@umich.edu
681049Sbinkertn@umich.educlass VectorDisplay:
691049Sbinkertn@umich.edu    def display(self):
701049Sbinkertn@umich.edu        p = Print()
711049Sbinkertn@umich.edu        p.flags = self.flags
721049Sbinkertn@umich.edu        p.precision = self.precision
731049Sbinkertn@umich.edu
741547Sbinkertn@umich.edu        if isinstance(self.value, (list, tuple)):
751049Sbinkertn@umich.edu            if not len(self.value):
761049Sbinkertn@umich.edu                return
771049Sbinkertn@umich.edu
781049Sbinkertn@umich.edu            mytotal = reduce(lambda x,y: float(x) + float(y), self.value)
791049Sbinkertn@umich.edu            mycdf = 0.0
801049Sbinkertn@umich.edu
811049Sbinkertn@umich.edu            value = self.value
821049Sbinkertn@umich.edu
831049Sbinkertn@umich.edu            if display_all:
841049Sbinkertn@umich.edu                subnames = [ '[%d]' % i for i in range(len(value)) ]
851049Sbinkertn@umich.edu            else:
861049Sbinkertn@umich.edu                subnames = [''] * len(value)
871049Sbinkertn@umich.edu
881049Sbinkertn@umich.edu            if self.__dict__.has_key('subnames'):
891049Sbinkertn@umich.edu                for i,each in enumerate(self.subnames):
901049Sbinkertn@umich.edu                    if len(each) > 0:
911049Sbinkertn@umich.edu                        subnames[i] = '.%s' % each
921049Sbinkertn@umich.edu
931049Sbinkertn@umich.edu            subdescs = [self.desc]*len(value)
941049Sbinkertn@umich.edu            if self.__dict__.has_key('subdescs'):
951049Sbinkertn@umich.edu                for i in xrange(min(len(value), len(self.subdescs))):
961049Sbinkertn@umich.edu                    subdescs[i] = self.subdescs[i]
971049Sbinkertn@umich.edu
981049Sbinkertn@umich.edu            for val,sname,sdesc in map(None, value, subnames, subdescs):
991049Sbinkertn@umich.edu                if mytotal > 0.0:
1001049Sbinkertn@umich.edu                    mypdf = float(val) / float(mytotal)
1011049Sbinkertn@umich.edu                    mycdf += mypdf
1021049Sbinkertn@umich.edu                    if (self.flags & flags_pdf):
1031049Sbinkertn@umich.edu                        p.pdf = mypdf
1041049Sbinkertn@umich.edu                        p.cdf = mycdf
1051049Sbinkertn@umich.edu
1061049Sbinkertn@umich.edu                if len(sname) == 0:
1071049Sbinkertn@umich.edu                    continue
1081049Sbinkertn@umich.edu
1091049Sbinkertn@umich.edu                p.name = self.name + sname
1101049Sbinkertn@umich.edu                p.desc = sdesc
1111049Sbinkertn@umich.edu                p.value = val
1121049Sbinkertn@umich.edu                p.display()
1131049Sbinkertn@umich.edu
1141049Sbinkertn@umich.edu            if (self.flags & flags_total):
1151049Sbinkertn@umich.edu                if (p.__dict__.has_key('pdf')): del p.__dict__['pdf']
1161049Sbinkertn@umich.edu                if (p.__dict__.has_key('cdf')): del p.__dict__['cdf']
1171049Sbinkertn@umich.edu                p.name = self.name + '.total'
1181049Sbinkertn@umich.edu                p.desc = self.desc
1191049Sbinkertn@umich.edu                p.value = mytotal
1201049Sbinkertn@umich.edu                p.display()
1211049Sbinkertn@umich.edu
1221049Sbinkertn@umich.edu        else:
1231049Sbinkertn@umich.edu            p.name = self.name
1241049Sbinkertn@umich.edu            p.desc = self.desc
1251049Sbinkertn@umich.edu            p.value = self.value
1261049Sbinkertn@umich.edu            p.display()
1271049Sbinkertn@umich.edu
128