Remove the deprecated whrandom module.
diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex
index 20f65df..d8cb2de 100644
--- a/Doc/lib/lib.tex
+++ b/Doc/lib/lib.tex
@@ -124,7 +124,6 @@
\input{libmath}
\input{libcmath}
\input{librandom}
-\input{libwhrandom}
\input{libbisect}
\input{libcollections}
\input{libheapq}
@@ -354,7 +353,6 @@
%\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 9b2c685..0000000
--- 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 c5df0ef..0000000
--- 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 aae2763..03efeb1 100644
--- a/Doc/tut/tut.tex
+++ b/Doc/tut/tut.tex
@@ -4653,7 +4653,7 @@
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 @@
\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 @@
\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 @@
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 bc0d1a4..0000000
--- 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 32da2f7..43289c9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -21,6 +21,8 @@
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().