1 from __future__ import absolute_import, division
7 def median(x, use_float=True):
8 # there exist better algorithms...
11 raise ValueError('empty sequence!')
12 left = (len(y) - 1)//2
14 sum = y[left] + y[right]
31 def clip(x, (low, high)):
47 raise ValueError('p must be in the interval (0.0, 1.0]')
50 return int(math.log1p(-random.random()) / math.log1p(-p)) + 1
52 def add_dicts(*dicts):
55 for k, v in d.iteritems():
56 res[k] = res.get(k, 0) + v
57 return dict((k, v) for k, v in res.iteritems() if v)
62 while x >= 100000 and count < len(prefixes) - 2:
65 s = '' if count == 0 else prefixes[count - 1]
66 return '%i' % (x,) + s
71 if random.random() >= b:
93 y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*math.exp(-x*x)
94 return sign*y # erf(-x) = -erf(x)
96 def ierf(z, steps=10):
98 for i in xrange(steps):
99 d = 2*math.e**(-guess**2)/math.sqrt(math.pi)
100 guess = guess - (erf(guess) - z)/d
103 def binomial_conf_interval(x, n, conf=0.95):
104 # approximate - Wilson score interval
105 z = math.sqrt(2)*ierf(conf)
108 topb = z * math.sqrt(p*(1-p)/n + z**2/4/n**2)
110 return (topa - topb)/bottom, (topa + topb)/bottom
112 def interval_to_center_radius((low, high)):
113 return (high+low)/2, (high-low)/2
117 return __builtin__.reversed(x)
119 return reversed(list(x))
121 if __name__ == '__main__':
125 print a, format(a) + 'H/s'
126 a = a * random.randrange(2, 5)