Skip to main content

Educational implementations of core Monte Carlo method algorithms

Project description

mc-lab

Educational implementations of core Monte Carlo method algorithms. The goal is learning, clarity, and numerical correctness over raw speed or micro-optimizations. Expect straightforward NumPy/SciPy-based code with helpful tests and a couple of demo notebooks.

What’s inside

  • Basic importance sampling
  • Rejection sampling and a few more advance rejection sampling methods
  • Normal sampling via Box–Muller (classic and polar) — src/mc_lab/box_mueller.py
  • Inverse transform sampling (analytical, numerical interpolation/root-finding, adaptive; plus alias method for discrete) — src/mc_lab/inverse_transform.py
  • Multivariate Gaussian sampling with Cholesky/eigendecomposition fallback — src/mc_lab/multivariate_gaussian.py
  • Tests in tests/ and a demo notebook in notebooks/

Clone the repository

git clone https://github.com/carsten-j/mc-lab.git
cd mc-lab

Setup for local development

Recommended (uses uv to manage a local .venv and sync dependencies):

# If you don’t have uv yet, see https://docs.astral.sh/uv/ for install options
uv sync
source .venv/bin/activate

Alternative (standard venv + pip):

python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .
# Dev tools (optional but recommended)
pip install pytest ruff ipykernel pre-commit

Verify the install:

python -c "import mc_lab; print(mc_lab.hello())"

Run tests and linting

With uv:

uv run pytest
# Format & lint (either use the Makefile below or direct commands)
uv run ruff format .
uv run ruff check --select I --fix
uv run ruff check --fix

With a plain venv:

pytest
ruff format .
ruff check --select I --fix
ruff check --fix
# Or via the Makefile at the repo root:
make format-fix
make lint-fix
make perftest   # run only tests marked with @pytest.mark.performance (prints output)

Quick usage example

import numpy as np
from mc_lab.multivariate_gaussian import sample_multivariate_gaussian

mu = np.array([0.0, 1.0])
Sigma = np.array([[1.0, 0.5], [0.5, 2.0]])
X = sample_multivariate_gaussian(mu, Sigma, n=1000, random_state=42)
print(X.shape)  # (1000, 2)

Notebooks

Demo notebooks live in notebooks/. If you want the environment available as a Jupyter kernel:

python -m ipykernel install --user --name mc-lab

Note: This is an educational project; APIs and implementations may evolve for clarity. If you need production-grade performance, consider specialized libraries or contribute optimizations guarded by tests.

Numba

The Box-Muller implementation can be used with numba for performance improvenments. See the installation notes for numba on how to set it up on your hardware or simply try

uv pip install numba

Collaboration

Open to collaboration and contributions. If you’re interested:

  • Open an issue to discuss ideas or report bugs.
  • Submit small, focused PRs with tests when public behavior changes.
  • For larger changes, start with a brief design proposal in an issue.

Course context

This project was initiated and developed while following the course “NMAK24010U Topics in Statistics” at the University of Copenhagen (UCPH) fall 2025.

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

mc_lab_edu-0.1.0.tar.gz (3.1 MB view details)

Uploaded Source

Built Distribution

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

mc_lab_edu-0.1.0-py3-none-any.whl (711.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mc_lab_edu-0.1.0.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for mc_lab_edu-0.1.0.tar.gz
Algorithm Hash digest
SHA256 24b2223cdf44bf32823a2a3be5653f1426756cba6b98269c941b81f7e3c4b3e6
MD5 dc29afd2628a2316d93d859fce87337b
BLAKE2b-256 2ccf3ff38d5e989ae5d87cd49244f9a0d62e37c04ccce0e328d70803700eab43

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mc_lab_edu-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 711.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for mc_lab_edu-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44d632348e4ca0cba8bf164aa847a5a6e36b84e35863ce9dceddf639624d50f7
MD5 807097b4aadb578f67f37cee731038c3
BLAKE2b-256 d27f94e91feed16efd84fae651adc65b745f7b06a00314e0b486cac1c15336c0

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