/ casper / distributions.py
distributions.py
 1  import random, sys
 2  
 3  
 4  def normal_distribution(mean, standev):
 5      def f():
 6          return int(random.normalvariate(mean, standev))
 7  
 8      return f
 9  
10  
11  def exponential_distribution(mean):
12      def f():
13          total = 0
14          while 1:
15              total += 1
16              if not random.randrange(32):
17                  break
18          return int(total * 0.03125 * mean)
19  
20      return f
21  
22  
23  def convolve(*args):
24      def f():
25          total = 0
26          for arg in args:
27              total += arg()
28          return total
29  
30      return f
31  
32  
33  def transform(dist, xformer):
34      def f():
35          return xformer(dist())
36  
37      return f