1 from __future__ import absolute_import, division
6 def median(x, use_float=True):
7 # there exist better algorithms...
10 raise ValueError('empty sequence!')
11 left = (len(y) - 1)//2
13 sum = y[left] + y[right]
30 def clip(x, (low, high)):
46 raise ValueError('p must be in the interval (0.0, 1.0]')
49 return int(math.log1p(-random.random()) / math.log1p(-p)) + 1
54 for k, v in d.iteritems():
55 res[k] = res.get(k, 0) + v
56 return dict((k, v) for k, v in res.iteritems() if v)
61 while x >= 100000 and count < len(prefixes) - 2:
64 s = '' if count == 0 else prefixes[count - 1]
65 return '%i' % (x,) + s
70 if random.random() >= b:
75 def ierf(z, steps=10):
77 for i in xrange(steps):
78 d = 2*math.e**(-guess**2)/math.sqrt(math.pi)
79 guess = guess - (math.erf(guess) - z)/d
82 def binomial_conf_interval(x, n, conf=0.95):
83 # approximate - Wilson score interval
84 z = math.sqrt(2)*ierf(conf)
87 topb = z * math.sqrt(p*(1-p)/n + z**2/4/n**2)
89 return (topa - topb)/bottom, (topa + topb)/bottom
91 def interval_to_center_radius((low, high)):
92 return (high+low)/2, (high-low)/2
94 if __name__ == '__main__':
98 print a, format(a) + 'H/s'
99 a = a * random.randrange(2, 5)