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