1:mod:`random` --- Generate pseudo-random numbers
2================================================
3
4.. module:: random
5   :synopsis: Generate pseudo-random numbers with various common distributions.
6
7**Source code:** :source:`Lib/random.py`
8
9--------------
10
11This module implements pseudo-random number generators for various
12distributions.
13
14For integers, uniform selection from a range. For sequences, uniform selection
15of a random element, a function to generate a random permutation of a list
16in-place, and a function for random sampling without replacement.
17
18On the real line, there are functions to compute uniform, normal (Gaussian),
19lognormal, negative exponential, gamma, and beta distributions. For generating
20distributions of angles, the von Mises distribution is available.
21
22Almost all module functions depend on the basic function :func:`.random`, which
23generates a random float uniformly in the semi-open range [0.0, 1.0).  Python
24uses the Mersenne Twister as the core generator.  It produces 53-bit precision
25floats and has a period of 2\*\*19937-1.  The underlying implementation in C is
26both fast and threadsafe.  The Mersenne Twister is one of the most extensively
27tested random number generators in existence.  However, being completely
28deterministic, it is not suitable for all purposes, and is completely unsuitable
29for cryptographic purposes.
30
31The functions supplied by this module are actually bound methods of a hidden
32instance of the :class:`random.Random` class.  You can instantiate your own
33instances of :class:`Random` to get generators that don't share state.  This is
34especially useful for multi-threaded programs, creating a different instance of
35:class:`Random` for each thread, and using the :meth:`jumpahead` method to make
36it likely that the generated sequences seen by each thread don't overlap.
37
38Class :class:`Random` can also be subclassed if you want to use a different
39basic generator of your own devising: in that case, override the :meth:`~Random.random`,
40:meth:`~Random.seed`, :meth:`~Random.getstate`, :meth:`~Random.setstate` and
41:meth:`~Random.jumpahead` methods.  Optionally, a new generator can supply a
42:meth:`~Random.getrandbits` method --- this
43allows :meth:`randrange` to produce selections over an arbitrarily large range.
44
45.. versionadded:: 2.4
46   the :meth:`getrandbits` method.
47
48As an example of subclassing, the :mod:`random` module provides the
49:class:`WichmannHill` class that implements an alternative generator in pure
50Python.  The class provides a backward compatible way to reproduce results from
51earlier versions of Python, which used the Wichmann-Hill algorithm as the core
52generator.  Note that this Wichmann-Hill generator can no longer be recommended:
53its period is too short by contemporary standards, and the sequence generated is
54known to fail some stringent randomness tests.  See the references below for a
55recent variant that repairs these flaws.
56
57.. versionchanged:: 2.3
58   MersenneTwister replaced Wichmann-Hill as the default generator.
59
60The :mod:`random` module also provides the :class:`SystemRandom` class which
61uses the system function :func:`os.urandom` to generate random numbers
62from sources provided by the operating system.
63
64.. warning::
65
66   The pseudo-random generators of this module should not be used for
67   security purposes.  Use :func:`os.urandom` or :class:`SystemRandom` if
68   you require a cryptographically secure pseudo-random number generator.
69
70
71Bookkeeping functions:
72
73
74.. function:: seed(a=None)
75
76   Initialize internal state of the random number generator.
77
78   ``None`` or no argument seeds from current time or from an operating
79   system specific randomness source if available (see the :func:`os.urandom`
80   function for details on availability).
81
82   If *a* is not ``None`` or an :class:`int` or a :class:`long`, then
83   ``hash(a)`` is used instead.  Note that the hash values for some types
84   are nondeterministic when :envvar:`PYTHONHASHSEED` is enabled.
85
86   .. versionchanged:: 2.4
87      formerly, operating system resources were not used.
88
89.. function:: getstate()
90
91   Return an object capturing the current internal state of the generator.  This
92   object can be passed to :func:`setstate` to restore the state.
93
94   .. versionadded:: 2.1
95
96   .. versionchanged:: 2.6
97      State values produced in Python 2.6 cannot be loaded into earlier versions.
98
99
100.. function:: setstate(state)
101
102   *state* should have been obtained from a previous call to :func:`getstate`, and
103   :func:`setstate` restores the internal state of the generator to what it was at
104   the time :func:`getstate` was called.
105
106   .. versionadded:: 2.1
107
108
109.. function:: jumpahead(n)
110
111   Change the internal state to one different from and likely far away from the
112   current state.  *n* is a non-negative integer which is used to scramble the
113   current state vector.  This is most useful in multi-threaded programs, in
114   conjunction with multiple instances of the :class:`Random` class:
115   :meth:`setstate` or :meth:`seed` can be used to force all instances into the
116   same internal state, and then :meth:`jumpahead` can be used to force the
117   instances' states far apart.
118
119   .. versionadded:: 2.1
120
121   .. versionchanged:: 2.3
122      Instead of jumping to a specific state, *n* steps ahead, ``jumpahead(n)``
123      jumps to another state likely to be separated by many steps.
124
125
126.. function:: getrandbits(k)
127
128   Returns a python :class:`long` int with *k* random bits. This method is supplied
129   with the MersenneTwister generator and some other generators may also provide it
130   as an optional part of the API. When available, :meth:`getrandbits` enables
131   :meth:`randrange` to handle arbitrarily large ranges.
132
133   .. versionadded:: 2.4
134
135Functions for integers:
136
137
138.. function:: randrange(stop)
139              randrange(start, stop[, step])
140
141   Return a randomly selected element from ``range(start, stop, step)``.  This is
142   equivalent to ``choice(range(start, stop, step))``, but doesn't actually build a
143   range object.
144
145   .. versionadded:: 1.5.2
146
147
148.. function:: randint(a, b)
149
150   Return a random integer *N* such that ``a <= N <= b``.
151
152Functions for sequences:
153
154
155.. function:: choice(seq)
156
157   Return a random element from the non-empty sequence *seq*. If *seq* is empty,
158   raises :exc:`IndexError`.
159
160
161.. function:: shuffle(x[, random])
162
163   Shuffle the sequence *x* in place. The optional argument *random* is a
164   0-argument function returning a random float in [0.0, 1.0); by default, this is
165   the function :func:`.random`.
166
167   Note that for even rather small ``len(x)``, the total number of permutations of
168   *x* is larger than the period of most random number generators; this implies
169   that most permutations of a long sequence can never be generated.
170
171
172.. function:: sample(population, k)
173
174   Return a *k* length list of unique elements chosen from the population sequence.
175   Used for random sampling without replacement.
176
177   .. versionadded:: 2.3
178
179   Returns a new list containing elements from the population while leaving the
180   original population unchanged.  The resulting list is in selection order so that
181   all sub-slices will also be valid random samples.  This allows raffle winners
182   (the sample) to be partitioned into grand prize and second place winners (the
183   subslices).
184
185   Members of the population need not be :term:`hashable` or unique.  If the population
186   contains repeats, then each occurrence is a possible selection in the sample.
187
188   To choose a sample from a range of integers, use an :func:`xrange` object as an
189   argument.  This is especially fast and space efficient for sampling from a large
190   population:  ``sample(xrange(10000000), 60)``.
191
192The following functions generate specific real-valued distributions. Function
193parameters are named after the corresponding variables in the distribution's
194equation, as used in common mathematical practice; most of these equations can
195be found in any statistics text.
196
197
198.. function:: random()
199
200   Return the next random floating point number in the range [0.0, 1.0).
201
202
203.. function:: uniform(a, b)
204
205   Return a random floating point number *N* such that ``a <= N <= b`` for
206   ``a <= b`` and ``b <= N <= a`` for ``b < a``.
207
208   The end-point value ``b`` may or may not be included in the range
209   depending on floating-point rounding in the equation ``a + (b-a) * random()``.
210
211
212.. function:: triangular(low, high, mode)
213
214   Return a random floating point number *N* such that ``low <= N <= high`` and
215   with the specified *mode* between those bounds.  The *low* and *high* bounds
216   default to zero and one.  The *mode* argument defaults to the midpoint
217   between the bounds, giving a symmetric distribution.
218
219   .. versionadded:: 2.6
220
221
222.. function:: betavariate(alpha, beta)
223
224   Beta distribution.  Conditions on the parameters are ``alpha > 0`` and
225   ``beta > 0``. Returned values range between 0 and 1.
226
227
228.. function:: expovariate(lambd)
229
230   Exponential distribution.  *lambd* is 1.0 divided by the desired
231   mean.  It should be nonzero.  (The parameter would be called
232   "lambda", but that is a reserved word in Python.)  Returned values
233   range from 0 to positive infinity if *lambd* is positive, and from
234   negative infinity to 0 if *lambd* is negative.
235
236
237.. function:: gammavariate(alpha, beta)
238
239   Gamma distribution.  (*Not* the gamma function!)  Conditions on the
240   parameters are ``alpha > 0`` and ``beta > 0``.
241
242   The probability distribution function is::
243
244                 x ** (alpha - 1) * math.exp(-x / beta)
245       pdf(x) =  --------------------------------------
246                   math.gamma(alpha) * beta ** alpha
247
248
249.. function:: gauss(mu, sigma)
250
251   Gaussian distribution.  *mu* is the mean, and *sigma* is the standard
252   deviation.  This is slightly faster than the :func:`normalvariate` function
253   defined below.
254
255
256.. function:: lognormvariate(mu, sigma)
257
258   Log normal distribution.  If you take the natural logarithm of this
259   distribution, you'll get a normal distribution with mean *mu* and standard
260   deviation *sigma*.  *mu* can have any value, and *sigma* must be greater than
261   zero.
262
263
264.. function:: normalvariate(mu, sigma)
265
266   Normal distribution.  *mu* is the mean, and *sigma* is the standard deviation.
267
268
269.. function:: vonmisesvariate(mu, kappa)
270
271   *mu* is the mean angle, expressed in radians between 0 and 2\*\ *pi*, and *kappa*
272   is the concentration parameter, which must be greater than or equal to zero.  If
273   *kappa* is equal to zero, this distribution reduces to a uniform random angle
274   over the range 0 to 2\*\ *pi*.
275
276
277.. function:: paretovariate(alpha)
278
279   Pareto distribution.  *alpha* is the shape parameter.
280
281
282.. function:: weibullvariate(alpha, beta)
283
284   Weibull distribution.  *alpha* is the scale parameter and *beta* is the shape
285   parameter.
286
287
288Alternative Generators:
289
290.. class:: WichmannHill([seed])
291
292   Class that implements the Wichmann-Hill algorithm as the core generator. Has all
293   of the same methods as :class:`Random` plus the :meth:`whseed` method described
294   below.  Because this class is implemented in pure Python, it is not threadsafe
295   and may require locks between calls.  The period of the generator is
296   6,953,607,871,644 which is small enough to require care that two independent
297   random sequences do not overlap.
298
299
300.. function:: whseed([x])
301
302   This is obsolete, supplied for bit-level compatibility with versions of Python
303   prior to 2.1. See :func:`seed` for details.  :func:`whseed` does not guarantee
304   that distinct integer arguments yield distinct internal states, and can yield no
305   more than about 2\*\*24 distinct internal states in all.
306
307
308.. class:: SystemRandom([seed])
309
310   Class that uses the :func:`os.urandom` function for generating random numbers
311   from sources provided by the operating system. Not available on all systems.
312   Does not rely on software state and sequences are not reproducible. Accordingly,
313   the :meth:`seed` and :meth:`jumpahead` methods have no effect and are ignored.
314   The :meth:`getstate` and :meth:`setstate` methods raise
315   :exc:`NotImplementedError` if called.
316
317   .. versionadded:: 2.4
318
319Examples of basic usage::
320
321   >>> random.random()        # Random float x, 0.0 <= x < 1.0
322   0.37444887175646646
323   >>> random.uniform(1, 10)  # Random float x, 1.0 <= x < 10.0
324   1.1800146073117523
325   >>> random.randint(1, 10)  # Integer from 1 to 10, endpoints included
326   7
327   >>> random.randrange(0, 101, 2)  # Even integer from 0 to 100
328   26
329   >>> random.choice('abcdefghij')  # Choose a random element
330   'c'
331
332   >>> items = [1, 2, 3, 4, 5, 6, 7]
333   >>> random.shuffle(items)
334   >>> items
335   [7, 3, 2, 5, 6, 4, 1]
336
337   >>> random.sample([1, 2, 3, 4, 5],  3)  # Choose 3 elements
338   [4, 1, 5]
339
340
341
342.. seealso::
343
344   M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally
345   equidistributed uniform pseudorandom number generator", ACM Transactions on
346   Modeling and Computer Simulation Vol. 8, No. 1, January pp.3--30 1998.
347
348   Wichmann, B. A. & Hill, I. D., "Algorithm AS 183: An efficient and portable
349   pseudo-random number generator", Applied Statistics 31 (1982) 188-190.
350
351   `Complementary-Multiply-with-Carry recipe
352   <http://code.activestate.com/recipes/576707/>`_ for a compatible alternative
353   random number generator with a long period and comparatively simple update
354   operations.
355