Skip to main content

Simple random number generators

Project description

Author:

Craig McQueen

Contact:
http://craig.mcqueen.id.au/

Simple pseudo-random number generators, from George Marsaglia.

Intro

The simplerandom package is provided, which contains modules containing classes for various simple pseudo-random number generators.

The algorithms were obtained from a newsgroup post by George Marsaglia [1]. The algorithms were specified in C in the newsgroup post. For the purpose of prototyping software in a high-level language such as Python, before writing it in faster C, it is useful to have identical algorithms implemented in both Python and C.

One module provides Python iterators, which generate simple unsigned 32-bit integers identical to their C counterparts.

Another module provides random classes that are sub-classed from the class Random in the random module of the standard Python library.

References

Modules Provided

Module

Description

simplerandom.iterators

Iterator classes, which generate unsigned 32-bit integers.

simplerandom.random

Classes that conform to standard Python random.Random API.

Random Number Generators Provided

In simplerandom.iterators, the following pseudo-random number generators are provided:

Generator

Notes

RandomCongIterator

RandomSHR3Iterator

RandomMWCIterator

From [1]. Slightly different algorithm from that in [2].

RandomKISSIterator

Combination of MWC, Cong and SHR3

RandomLFIB4Iterator

RandomSWBIterator

_RandomFibIterator

Not useful on its own, but can be used in a combination with other generators.

In simplerandom.random, the following pseudo-random number generators are provided:

Generator

Notes

RandomCong

RandomSHR3

RandomMWC

From [1]. Slightly different algorithm from that in [2].

RandomKISS

Combination of MWC, Cong and SHR3

RandomLFIB4

RandomSWB

Usage

Iterators

>>> import simplerandom.iterators as sri
>>> rng = sri.RandomKISSIterator(123958, 34987243, 3495825239, 2398172431)
>>> next(rng)
21111917L
>>> next(rng)
1327965872L
>>> next(rng)
2128842716L

Random class API

>>> import simplerandom.random as srr
>>> rng = srr.RandomKISS(258725234)
>>> rng.random()
0.30631872435766117
>>> rng.random()
0.43903576112750442
>>> rng.random()
0.69756297733927486

Supported Python Versions

Currently this has had basic testing on Ubuntu 10.04 32-bit and Windows XP 32-bit. It passes the basic simplerandom.iterators.test unit tests, as well as basic manual testing of simplerandom.random. A more thorough unit test suite is needed.

In Ubuntu, it has been tested on Python 2.6 and 3.1 and passes.

In Windows, it has been tested on Python 2.4, 2.5, 2.6, 2.7 and 3.1. It passes under these versions.

The pure Python code is expected to work on 64-bit platforms, but has not been tested. The Cython version of simplerandom.iterators should work on 64-bit platforms, but has not been tested.

Installation

The simplerandom package is installed using distutils. If you have the tools installed to build a Python extension module, run the following command:

python setup.py install

If you cannot build the C extension, you may install just the pure Python implementation, using the following command:

python setup.py build_py install --skip-build

Unit Testing

Basic unit testing of the iterators is in simplerandom.iterators.test. It duplicates the tests of the C algorithms given in the original newsgroup post [1]. It should print seven lines, all containing 0.

To run it on Python >=2.5:

python -m simplerandom.iterators.test

Alternatively, in the test directory run:

python test_iterators.py

A more thorough unit test suite is needed.

License

The code is released under the MIT license. See LICENSE.txt for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

simplerandom-0.7.1.zip (42.9 kB view hashes)

Uploaded Source

simplerandom-0.7.1.tar.gz (37.1 kB view hashes)

Uploaded Source

Built Distributions

simplerandom-0.7.1.win32-py3.2.msi (147.5 kB view hashes)

Uploaded Source

simplerandom-0.7.1.win32-py3.1.msi (147.5 kB view hashes)

Uploaded Source

simplerandom-0.7.1.win32-py2.7.msi (147.5 kB view hashes)

Uploaded Source

simplerandom-0.7.1.win32-py2.6.msi (147.5 kB view hashes)

Uploaded Source

simplerandom-0.7.1.win32-py2.5.msi (147.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page