Skip to main content

A random number generator - Tiny SplitMix64-based RNG utilities (non-cryptographic)

Project description

rndm

A tiny, dependency-free random number utility built on SplitMix64.

It provides:

  • Uniform integers without modulo bias (rejection sampling)
  • Fixed-precision uniform floats within a range
  • Optional independent streams via stream_id
  • Fast randbits(k) for bit generation

Not for cryptography. SplitMix64 is great for simulations, sampling, games, and testing—but not for security.

Install

From PyPI

pip install rndm

From source (GitHub)

pip install .

For development:

pip install -e ".[dev]"

Quick start

import rndm

# (optional) reseed; if you don't, it seeds automatically on first use
rndm.reseed()

# Uniform int in [0, 10] (inclusive by default)
x = rndm.time_based_random(0, 10)
print(x)

# Uniform int in [50, 1000), exclusive upper bound
y = rndm.time_based_random(50, 1000, inclusive=False)
print(y)

# Uniform float in [-1.0, 1.0] with precision inferred from inputs (1 decimal here)
z = rndm.time_based_random(-1.0, 1.0)
print(z)

# Force precision (e.g., 3 decimals)
w = rndm.time_based_random("0.000", "0.999", precision=3)
print(w)

# Independent streams
rndm.set_stream_id(123)
a1 = rndm.time_based_random(0, 10)
rndm.set_stream_id(456)
a2 = rndm.time_based_random(0, 10)

API

  • reseed(seed: int | None = None, stream_id: int | None = None) -> int
    Reseeds the generator. If seed is None, uses a mixed time-based seed. Returns the internal 64-bit state.

  • set_stream_id(stream_id: int) -> None
    Switches to a different independent stream (reseeds automatically).

  • randbits(k: int) -> int
    Returns an integer with k random bits.

  • time_based_random(min_value=0, max_value=1, inclusive=True, precision=None)

    • If both bounds are int, returns an int
    • Otherwise returns a float rounded to precision decimals (or inferred from inputs).
    • Uses rejection sampling (no % modulo reduction), so integer ranges are unbiased.

Benchmarks

The repository includes example benchmark outputs under https://github.com/bio-informatician/rndm/tree/main/benchmarks/:

  • Distribution plots: https://github.com/bio-informatician/rndm/tree/main/benchmarks/plots/
  • Bin counts (CSV): https://github.com/bio-informatician/rndm/tree/main/benchmarks/counts/
  • Summary table: summary

Example figures:

Chi-square summary

Speed summary

Development

Run tests:

pytest

Build a wheel + sdist:

python -m pip install --upgrade build
python -m build

License

MIT — see LICENSE.

Project details


Download files

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

Source Distribution

rndm-0.1.3.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rndm-0.1.3-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file rndm-0.1.3.tar.gz.

File metadata

  • Download URL: rndm-0.1.3.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.10

File hashes

Hashes for rndm-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4150cec7f51791334e4e1a54b994fc6aed7730b8cdfc1287510e6ee96f748e72
MD5 37e85b069efef032d8471a63a5c1226e
BLAKE2b-256 d5e9e4b013bd09231220dc61b3bc05ccaeac0c10da078d106a099f51d5cb0abe

See more details on using hashes here.

File details

Details for the file rndm-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: rndm-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.10

File hashes

Hashes for rndm-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 54518047a0c28b076479c9332c63ed832cf8c4b7fa30bca42d6f08f134b271a6
MD5 8f774400e37897c157d741525860c687
BLAKE2b-256 856dffe4485394d23777c444613cd44c0fe44bf309836605c27c8b00142d2503

See more details on using hashes here.

Supported by

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