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 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 benchmarks/:

  • Distribution plots: benchmarks/plots/
  • Bin counts (CSV): benchmarks/counts/
  • Summary table: benchmarks/summary.csv

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.0.tar.gz (5.7 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.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rndm-0.1.0.tar.gz
  • Upload date:
  • Size: 5.7 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.0.tar.gz
Algorithm Hash digest
SHA256 970619fb35e0322c2bd0aca28b9a9163083d07c58115c01a78298c4f67eaf03a
MD5 8c770bdd96a475300bac1740cc9d3290
BLAKE2b-256 8852c562ade96780680eb5b028419b547996bc6355cd40d2035a226e264df61b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rndm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e51c9944425124baf3c0af28b9626a5662126351b940ea809f25c22742447c4
MD5 2b34559ac472fb3313cae136be0b2290
BLAKE2b-256 a9d040973dd9c52faa708f3d3ac1d2020540a91dddac2ac760a473310d8cbb5d

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