2771abb6ed
Make the database creation/removal/cleanup code use python Make formulas work with the database Add support to do some graphing, but needs more work Still need to work on vectors, 2d vectors, dists and vectordists --HG-- extra : convert_revision : 1a88320dcc036a3751e8a036770766dce76a568c
124 lines
3.7 KiB
Python
124 lines
3.7 KiB
Python
class Value:
|
|
def __init__(self, value, precision, percent = False):
|
|
self.value = value
|
|
self.precision = precision
|
|
self.percent = percent
|
|
def __str__(self):
|
|
if isinstance(self.value, str):
|
|
if self.value.lower() == 'nan':
|
|
value = 'NaN'
|
|
if self.value.lower() == 'inf':
|
|
value = 'Inf'
|
|
else:
|
|
if self.precision >= 0:
|
|
format = "%%.%df" % self.precision
|
|
elif self.value == 0.0:
|
|
format = "%.0f"
|
|
elif self.value % 1.0 == 0.0:
|
|
format = "%.0f"
|
|
else:
|
|
format = "%f"
|
|
value = self.value
|
|
if self.percent:
|
|
value = value * 100.0
|
|
value = format % value
|
|
|
|
if self.percent:
|
|
value = value + "%"
|
|
|
|
return value
|
|
|
|
class Print:
|
|
def __init__(self, **vals):
|
|
self.__dict__.update(vals)
|
|
|
|
def __str__(self):
|
|
value = Value(self.value, self.precision)
|
|
pdf = ''
|
|
cdf = ''
|
|
if self.__dict__.has_key('pdf'):
|
|
pdf = Value(self.pdf, 2, True)
|
|
if self.__dict__.has_key('cdf'):
|
|
cdf = Value(self.cdf, 2, True)
|
|
|
|
output = "%-40s %12s %8s %8s" % (self.name, value, pdf, cdf)
|
|
|
|
if descriptions and self.__dict__.has_key('desc') and self.desc:
|
|
output = "%s # %s" % (output, self.desc)
|
|
|
|
return output
|
|
|
|
def doprint(self):
|
|
if display_all:
|
|
return True
|
|
if self.value == 0.0 and (self.flags & flags_nozero):
|
|
return False
|
|
if isinstance(self.value, str):
|
|
if self.value == 'NaN' and (self.flags & flags_nonan):
|
|
return False
|
|
return True
|
|
|
|
def display(self):
|
|
if self.doprint():
|
|
print self
|
|
|
|
class VectorDisplay:
|
|
def display(self):
|
|
p = Print()
|
|
p.flags = self.flags
|
|
p.precision = self.precision
|
|
|
|
if issequence(self.value):
|
|
if not len(self.value):
|
|
return
|
|
|
|
mytotal = reduce(lambda x,y: float(x) + float(y), self.value)
|
|
mycdf = 0.0
|
|
|
|
value = self.value
|
|
|
|
if display_all:
|
|
subnames = [ '[%d]' % i for i in range(len(value)) ]
|
|
else:
|
|
subnames = [''] * len(value)
|
|
|
|
if self.__dict__.has_key('subnames'):
|
|
for i,each in enumerate(self.subnames):
|
|
if len(each) > 0:
|
|
subnames[i] = '.%s' % each
|
|
|
|
subdescs = [self.desc]*len(value)
|
|
if self.__dict__.has_key('subdescs'):
|
|
for i in xrange(min(len(value), len(self.subdescs))):
|
|
subdescs[i] = self.subdescs[i]
|
|
|
|
for val,sname,sdesc in map(None, value, subnames, subdescs):
|
|
if mytotal > 0.0:
|
|
mypdf = float(val) / float(mytotal)
|
|
mycdf += mypdf
|
|
if (self.flags & flags_pdf):
|
|
p.pdf = mypdf
|
|
p.cdf = mycdf
|
|
|
|
if len(sname) == 0:
|
|
continue
|
|
|
|
p.name = self.name + sname
|
|
p.desc = sdesc
|
|
p.value = val
|
|
p.display()
|
|
|
|
if (self.flags & flags_total):
|
|
if (p.__dict__.has_key('pdf')): del p.__dict__['pdf']
|
|
if (p.__dict__.has_key('cdf')): del p.__dict__['cdf']
|
|
p.name = self.name + '.total'
|
|
p.desc = self.desc
|
|
p.value = mytotal
|
|
p.display()
|
|
|
|
else:
|
|
p.name = self.name
|
|
p.desc = self.desc
|
|
p.value = self.value
|
|
p.display()
|
|
|