diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex index 20f65df3015..d8cb2dee342 100644 --- a/Doc/lib/lib.tex +++ b/Doc/lib/lib.tex @@ -124,7 +124,6 @@ and how to embed it in other applications. \input{libmath} \input{libcmath} \input{librandom} -\input{libwhrandom} \input{libbisect} \input{libcollections} \input{libheapq} @@ -354,7 +353,6 @@ and how to embed it in other applications. %\input{libcmpcache} %\input{libcmp} %\input{libni} -%\input{librand} %\input{libregex} %\input{libregsub} diff --git a/Doc/lib/librand.tex b/Doc/lib/librand.tex deleted file mode 100644 index 9b2c685b034..00000000000 --- a/Doc/lib/librand.tex +++ /dev/null @@ -1,31 +0,0 @@ -\section{\module{rand} --- - None} -\declaremodule{standard}{rand} - -\modulesynopsis{None} - - -The \code{rand} module simulates the C library's \code{rand()} -interface, though the results aren't necessarily compatible with any -given library's implementation. While still supported for -compatibility, the \code{rand} module is now considered obsolete; if -possible, use the \code{whrandom} module instead. - - -\begin{funcdesc}{choice}{seq} -Returns a random element from the sequence \var{seq}. -\end{funcdesc} - -\begin{funcdesc}{rand}{} -Return a random integer between 0 and 32767, inclusive. -\end{funcdesc} - -\begin{funcdesc}{srand}{seed} -Set a starting seed value for the random number generator; \var{seed} -can be an arbitrary integer. -\end{funcdesc} - -\begin{seealso} - \seemodule{random}{Python's interface to random number generators.} - \seemodule{whrandom}{The random number generator used by default.} -\end{seealso} diff --git a/Doc/lib/libwhrandom.tex b/Doc/lib/libwhrandom.tex deleted file mode 100644 index c5df0ef7d06..00000000000 --- a/Doc/lib/libwhrandom.tex +++ /dev/null @@ -1,74 +0,0 @@ -\section{\module{whrandom} --- - Pseudo-random number generator} - -\declaremodule{standard}{whrandom} -\modulesynopsis{Floating point pseudo-random number generator.} - -\deprecated{2.1}{Use \refmodule{random} instead.} - -\note{This module was an implementation detail of the -\refmodule{random} module in releases of Python prior to 2.1. It is -no longer used. Please do not use this module directly; use -\refmodule{random} instead.} - -This module implements a Wichmann-Hill pseudo-random number generator -class that is also named \class{whrandom}. Instances of the -\class{whrandom} class conform to the Random Number Generator -interface described in section \ref{rng-objects}. They also offer the -following method, specific to the Wichmann-Hill algorithm: - -\begin{methoddesc}[whrandom]{seed}{\optional{x, y, z}} - Initializes the random number generator from the integers \var{x}, - \var{y} and \var{z}. When the module is first imported, the random - number is initialized using values derived from the current time. - If \var{x}, \var{y}, and \var{z} are either omitted or \code{0}, the - seed will be computed from the current system time. If one or two - of the parameters are \code{0}, but not all three, the zero values - are replaced by ones. This causes some apparently different seeds - to be equal, with the corresponding result on the pseudo-random - series produced by the generator. -\end{methoddesc} - -\begin{funcdesc}{choice}{seq} -Chooses a random element from the non-empty sequence \var{seq} and returns it. -\end{funcdesc} - -\begin{funcdesc}{randint}{a, b} -Returns a random integer \var{N} such that \code{\var{a}<=\var{N}<=\var{b}}. -\end{funcdesc} - -\begin{funcdesc}{random}{} -Returns the next random floating point number in the range [0.0 ... 1.0). -\end{funcdesc} - -\begin{funcdesc}{seed}{x, y, z} -Initializes the random number generator from the integers \var{x}, -\var{y} and \var{z}. When the module is first imported, the random -number is initialized using values derived from the current time. -\end{funcdesc} - -\begin{funcdesc}{uniform}{a, b} -Returns a random real number \var{N} such that \code{\var{a}<=\var{N}<\var{b}}. -\end{funcdesc} - -When imported, the \module{whrandom} module also creates an instance of -the \class{whrandom} class, and makes the methods of that instance -available at the module level. Therefore one can write either -\code{N = whrandom.random()} or: - -\begin{verbatim} -generator = whrandom.whrandom() -N = generator.random() -\end{verbatim} - -Note that using separate instances of the generator leads to -independent sequences of pseudo-random numbers. - -\begin{seealso} - \seemodule{random}{Generators for various random distributions and - documentation for the Random Number Generator - interface.} - \seetext{Wichmann, B. A. \& Hill, I. D., ``Algorithm AS 183: - An efficient and portable pseudo-random number generator'', - \citetitle{Applied Statistics} 31 (1982) 188-190.} -\end{seealso} diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex index aae2763e878..03efeb1ec3e 100644 --- a/Doc/tut/tut.tex +++ b/Doc/tut/tut.tex @@ -4653,7 +4653,7 @@ supplies classes for manipulating dates and times in both simple and complex ways. While date and time arithmetic is supported, the focus of the implementation is on efficient member extraction for output formatting and manipulation. The module also supports objects -that are time zone aware. +that are timezone aware. \begin{verbatim} # dates are easily constructed and formatted @@ -4777,7 +4777,7 @@ packages. For example: \item The \ulink{\module{xmlrpclib}}{../lib/module-xmlrpclib.html} and \ulink{\module{SimpleXMLRPCServer}}{../lib/module-SimpleXMLRPCServer.html} modules make implementing remote procedure calls into an almost trivial task. - Despite the names, no direct knowledge or handling of XML is needed. + Despite the modules names, no direct knowledge or handling of XML is needed. \item The \ulink{\module{email}}{../lib/module-email.html} package is a library for managing email messages, including MIME and other RFC 2822-based message documents. Unlike \module{smptlib} and \module{poplib} which actually send @@ -4805,9 +4805,9 @@ programming needs. These modules rarely occur in small scripts. \section{Output Formatting\label{output-formatting}} -The \ulink{\module{repr}}{../lib/module-repr.html} module provides an -version of \function{repr()} for abbreviated displays of large or deeply -nested containers: +The \ulink{\module{repr}}{../lib/module-repr.html} module provides a +version of \function{repr()} customized for abbreviated displays of large +or deeply nested containers: \begin{verbatim} >>> import repr @@ -5097,7 +5097,7 @@ with different performance trade-offs. The \ulink{\module{array}}{../lib/module-array.html} module provides an \class{array()} object that is like a list that stores only homogenous -data but stores it more compactly. The following example shows an array +data and stores it more compactly. The following example shows an array of numbers stored as two byte unsigned binary numbers (typecode \code{"H"}) rather than the usual 16 bytes per entry for regular lists of python int objects: diff --git a/Lib/whrandom.py b/Lib/whrandom.py deleted file mode 100644 index bc0d1a4520e..00000000000 --- a/Lib/whrandom.py +++ /dev/null @@ -1,144 +0,0 @@ -"""Wichman-Hill random number generator. - -Wichmann, B. A. & Hill, I. D. (1982) -Algorithm AS 183: -An efficient and portable pseudo-random number generator -Applied Statistics 31 (1982) 188-190 - -see also: - Correction to Algorithm AS 183 - Applied Statistics 33 (1984) 123 - - McLeod, A. I. (1985) - A remark on Algorithm AS 183 - Applied Statistics 34 (1985),198-200 - - -USE: -whrandom.random() yields double precision random numbers - uniformly distributed between 0 and 1. - -whrandom.seed(x, y, z) must be called before whrandom.random() - to seed the generator - -There is also an interface to create multiple independent -random generators, and to choose from other ranges. - - - -Multi-threading note: the random number generator used here is not -thread-safe; it is possible that nearly simultaneous calls in -different theads return the same random value. To avoid this, you -have to use a lock around all calls. (I didn't want to slow this -down in the serial case by using a lock here.) -""" - -import warnings -warnings.warn("the whrandom module is deprecated; please use the random module", - DeprecationWarning) - -# Translated by Guido van Rossum from C source provided by -# Adrian Baddeley. - - -class whrandom: - def __init__(self, x = 0, y = 0, z = 0): - """Initialize an instance. - Without arguments, initialize from current time. - With arguments (x, y, z), initialize from them.""" - self.seed(x, y, z) - - def seed(self, x = 0, y = 0, z = 0): - """Set the seed from (x, y, z). - These must be integers in the range [0, 256).""" - if not type(x) == type(y) == type(z) == type(0): - raise TypeError, 'seeds must be integers' - if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256): - raise ValueError, 'seeds must be in range(0, 256)' - if 0 == x == y == z: - # Initialize from current time - import time - t = long(time.time() * 256) - t = int((t&0xffffff) ^ (t>>24)) - t, x = divmod(t, 256) - t, y = divmod(t, 256) - t, z = divmod(t, 256) - # Zero is a poor seed, so substitute 1 - self._seed = (x or 1, y or 1, z or 1) - - def random(self): - """Get the next random number in the range [0.0, 1.0).""" - # This part is thread-unsafe: - # BEGIN CRITICAL SECTION - x, y, z = self._seed - # - x = (171 * x) % 30269 - y = (172 * y) % 30307 - z = (170 * z) % 30323 - # - self._seed = x, y, z - # END CRITICAL SECTION - # - return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0 - - def uniform(self, a, b): - """Get a random number in the range [a, b).""" - return a + (b-a) * self.random() - - def randint(self, a, b): - """Get a random integer in the range [a, b] including - both end points. - - (Deprecated; use randrange below.)""" - return self.randrange(a, b+1) - - def choice(self, seq): - """Choose a random element from a non-empty sequence.""" - return seq[int(self.random() * len(seq))] - - def randrange(self, start, stop=None, step=1, int=int, default=None): - """Choose a random item from range(start, stop[, step]). - - This fixes the problem with randint() which includes the - endpoint; in Python this is usually not what you want. - Do not supply the 'int' and 'default' arguments.""" - # This code is a bit messy to make it fast for the - # common case while still doing adequate error checking - istart = int(start) - if istart != start: - raise ValueError, "non-integer arg 1 for randrange()" - if stop is default: - if istart > 0: - return int(self.random() * istart) - raise ValueError, "empty range for randrange()" - istop = int(stop) - if istop != stop: - raise ValueError, "non-integer stop for randrange()" - if step == 1: - if istart < istop: - return istart + int(self.random() * - (istop - istart)) - raise ValueError, "empty range for randrange()" - istep = int(step) - if istep != step: - raise ValueError, "non-integer step for randrange()" - if istep > 0: - n = (istop - istart + istep - 1) / istep - elif istep < 0: - n = (istop - istart + istep + 1) / istep - else: - raise ValueError, "zero step for randrange()" - - if n <= 0: - raise ValueError, "empty range for randrange()" - return istart + istep*int(self.random() * n) - - -# Initialize from the current time -_inst = whrandom() -seed = _inst.seed -random = _inst.random -uniform = _inst.uniform -randint = _inst.randint -choice = _inst.choice -randrange = _inst.randrange diff --git a/Misc/NEWS b/Misc/NEWS index 32da2f76c74..43289c9fbef 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -21,6 +21,8 @@ Extension Modules Library ------- +- the deprecated whrandom module was removed. Use the random module instead. + - heapq.nsmallest() and heapq.nlargest() now support key= arguments with the same meaning as in list.sort().