SF #1027105: HardwareRandom should be renamed OSRandom

Renamed the new generator at Trevor's recommendation.
The name HardwareRandom suggested a bit more than it
delivered (no radioactive decay detectors or such).
This commit is contained in:
Raymond Hettinger 2004-09-13 22:23:21 +00:00
parent 3e773fb622
commit 23f1241dc6
3 changed files with 24 additions and 20 deletions

View File

@ -61,10 +61,11 @@ Bookkeeping functions:
Optional argument \var{x} can be any hashable object.
If \var{x} is omitted or \code{None}, current system time is used;
current system time is also used to initialize the generator when the
module is first imported. If hardware random sources are available,
they are used instead of the system time (see the \function{os.urandom()}
module is first imported. If randomness sources are provided by the
operating system, they are used instead of the system time (see the
\function{os.urandom()}
function for details on availability). \versionchanged[formerly,
hardward sources were not used]{2.4}
operating system resources were not used]{2.4}
If \var{x} is not \code{None} or an int or long,
\code{hash(\var{x})} is used instead.
If \var{x} is an int or long, \var{x} is used directly.
@ -249,9 +250,10 @@ require care that two independent random sequences do not overlap.
yield no more than about 2**24 distinct internal states in all.
\end{funcdesc}
\begin{classdesc}{HardwareRandom}{\optional{seed}}
\begin{classdesc}{SystemRandom}{\optional{seed}}
Class that uses the \function{os.urandom()} function for generating
random numbers from hardware. Not available on all systems.
random numbers from sources provided by the operating system.
Not available on all systems.
Does not rely on software state and sequences are not reproducible.
Accordingly, the \method{seed()} and \method{jumpahead()} methods
have no effect and are ignored. The \method{getstate()} and

View File

@ -52,7 +52,7 @@ __all__ = ["Random","seed","random","uniform","randint","choice","sample",
"expovariate","vonmisesvariate","gammavariate",
"gauss","betavariate","paretovariate","weibullvariate",
"getstate","setstate","jumpahead", "WichmannHill", "getrandbits",
"HardwareRandom"]
"SystemRandom"]
NV_MAGICCONST = 4 * _exp(-0.5)/_sqrt(2.0)
TWOPI = 2.0*_pi
@ -99,8 +99,8 @@ class Random(_random.Random):
def seed(self, a=None):
"""Initialize internal state from hashable object.
None or no argument seeds from current time or from a hardware
randomness source if available.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If a is not None or an int or long, hash(a) is used instead.
"""
@ -603,8 +603,8 @@ class WichmannHill(Random):
def seed(self, a=None):
"""Initialize internal state from hashable object.
None or no argument seeds from current time or from a hardware
randomness source if available.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If a is not None or an int or long, hash(a) is used instead.
@ -744,10 +744,12 @@ class WichmannHill(Random):
z = (z + a) % 256 or 1
self.__whseed(x, y, z)
## -------------------- Hardware Random Source -------------------
## --------------- Operating System Random Source ------------------
class HardwareRandom(Random):
"""Alternate random number generator using hardware sources.
class SystemRandom(Random):
"""Alternate random number generator using sources provided
by the operating system (such as /dev/urandom on Unix or
CryptGenRandom on Windows).
Not available on all systems (see os.urandom() for details).
"""
@ -767,13 +769,13 @@ class HardwareRandom(Random):
return x >> (bytes * 8 - k) # trim excess bits
def _stub(self, *args, **kwds):
"Stub method. Not used for a hardware random number generator."
"Stub method. Not used for a system random number generator."
return None
seed = jumpahead = _stub
def _notimplemented(self, *args, **kwds):
"Method should not be called for a hardware random number generator."
raise NotImplementedError('Hardware entropy source does not have state.')
"Method should not be called for a system random number generator."
raise NotImplementedError('System entropy source does not have state.')
getstate = setstate = _notimplemented
## -------------------- test program --------------------

View File

@ -164,8 +164,8 @@ class WichmannHill_TestBasicOps(TestBasicOps):
self.assertRaises(UserWarning, self.gen.randrange, 2**60)
warnings.filters[:] = oldfilters
class HardwareRandom_TestBasicOps(TestBasicOps):
gen = random.HardwareRandom()
class SystemRandom_TestBasicOps(TestBasicOps):
gen = random.SystemRandom()
def test_autoseed(self):
# Doesn't need to do anything except not fail
@ -496,11 +496,11 @@ def test_main(verbose=None):
TestModule]
try:
random.HardwareRandom().random()
random.SystemRandom().random()
except NotImplementedError:
pass
else:
testclasses.append(HardwareRandom_TestBasicOps)
testclasses.append(SystemRandom_TestBasicOps)
test_support.run_unittest(*testclasses)