\section{Standard Module \sectcode{random}}
\label{module-random}
\stmodindex{random}

This module implements pseudo-random number generators for various
distributions: on the real line, there are functions to compute normal
or Gaussian, lognormal, negative exponential, gamma, and beta
distributions.  For generating distribution of angles, the circular
uniform and von Mises distributions are available.

The module exports the following functions, which are exactly
equivalent to those in the \code{whrandom} module: \code{choice},
\code{randint}, \code{random}, \code{uniform}.  See the documentation
for the \code{whrandom} module for these functions.

The following functions specific to the \code{random} module are also
defined, and all return real values.  Function parameters are named
after the corresponding variables in the distribution's equation, as
used in common mathematical practice; most of these equations can be
found in any statistics text.

\renewcommand{\indexsubitem}{(in module random)}
\begin{funcdesc}{betavariate}{alpha\, beta}
Beta distribution.  Conditions on the parameters are \code{alpha>-1}
and \code{beta>-1}.
Returned values will range between 0 and 1.
\end{funcdesc}

\begin{funcdesc}{cunifvariate}{mean\, arc}
Circular uniform distribution.  \var{mean} is the mean angle, and
\var{arc} is the range of the distribution, centered around the mean
angle.  Both values must be expressed in radians, and can range
between 0 and \code{pi}.  Returned values will range between
\code{mean - arc/2} and \code{mean + arc/2}.
\end{funcdesc}

\begin{funcdesc}{expovariate}{lambd}
Exponential distribution.  \var{lambd} is 1.0 divided by the desired mean.
(The parameter would be called ``lambda'', but that's also a reserved
word in Python.)  Returned values will range from 0 to positive infinity.
\end{funcdesc}

\begin{funcdesc}{gamma}{alpha\, beta}
Gamma distribution.  (\emph{Not} the gamma function!) 
Conditions on the parameters are \code{alpha>-1} and \code{beta>0}.
\end{funcdesc}

\begin{funcdesc}{gauss}{mu\, sigma}
Gaussian distribution.  \var{mu} is the mean, and \var{sigma} is the
standard deviation.  This is slightly faster than the
\code{normalvariate} function defined below.
\end{funcdesc}

\begin{funcdesc}{lognormvariate}{mu\, sigma}
Log normal distribution.  If you take the natural logarithm of this
distribution, you'll get a normal distribution with mean \var{mu} and
standard deviation \var{sigma}  \var{mu} can have any value, and \var{sigma}
must be greater than zero.  
\end{funcdesc}

\begin{funcdesc}{normalvariate}{mu\, sigma}
Normal distribution.  \var{mu} is the mean, and \var{sigma} is the
standard deviation.
\end{funcdesc}

\begin{funcdesc}{vonmisesvariate}{mu\, kappa}
\var{mu} is the mean angle, expressed in radians between 0 and pi,
and \var{kappa} is the concentration parameter, which must be greater
then or equal to zero.  If \var{kappa} is equal to zero, this
distribution reduces to a uniform random angle over the range 0 to
\code{2*pi}.
\end{funcdesc}


\begin{seealso}
\seemodule{whrandom}{the standard Python random number generator}
\end{seealso}
