A reproducibility auditor for ML repositories
Project description
reprolint
A reproducibility auditor for machine learning repositories. reprolint statically analyzes a codebase using AST parsing and literature-backed checks to produce a scored reproducibility report — identifying missing seeds, unpinned dependencies, hardcoded paths, non-deterministic operations, untracked data, and missing environment captures.
Works as a CLI tool on local directories or public GitHub URLs, and integrates with GitHub Actions as a CI reproducibility gate.
Installation
uv tool install "git+https://github.com/YashTandon05/reprolint.git"
Usage
Audit a local repository
reprolint /path/to/your/ml/project
Audit a public GitHub repository
reprolint https://github.com/user/repo
Use as a CI gate (fail if score is below threshold)
reprolint . --min-score 60 --fail
Save the report to a file
reprolint . --output report.txt
Example output
reprolint — auditing myproject/
┌──────────────────────────┬───────────────┬────────┬───────┐
│ Check │ Category │ Result │ Score │
├──────────────────────────┼───────────────┼────────┼───────┤
│ Random seeds │ Stochasticity │ PASS │ 25/25 │
│ Dependency pinning │ Environment │ FAIL │ 7/20 │
│ Hardcoded paths │ Code Quality │ PASS │ 15/15 │
│ Deterministic execution │ Stochasticity │ FAIL │ 0/15 │
│ Data tracking │ Data Integrity│ PASS │ 15/15 │
│ Environment capture │ Environment │ FAIL │ 0/10 │
└──────────────────────────┴───────────────┴────────┴───────┘
Category breakdown
Environment ███░░░░░░░ 7/30 (23%)
Stochasticity ████████░░ 25/40 (63%)
Data Integrity ██████████ 15/15 (100%)
Code Quality ██████████ 15/15 (100%)
Overall score: 52/100
MODERATE — some reproducibility risk
Findings
[HIGH] 'torch>=2.0' is loose (not exactly pinned).
fix: Pin to an exact version (e.g. 'pkg==1.2.3') or commit a lock file.
[HIGH] A deep-learning framework is used but deterministic mode is never enabled.
fix: Call torch.use_deterministic_algorithms(True).
[HIGH] No environment capture found.
fix: Add a Dockerfile or environment.yml.
Checks
Each check is grounded in peer-reviewed literature or established conference reproducibility checklists.
| Check | Category | Max Score | Reference |
|---|---|---|---|
| Random seeds | Stochasticity | 25 | AAAI-25 Reproducibility Checklist |
| Dependency pinning | Environment | 20 | AAAI-25 Checklist; Sculley et al. (2015) |
| Hardcoded paths | Code Quality | 15 | Sculley et al. (2015) |
| Deterministic execution | Stochasticity | 15 | PyTorch reproducibility docs |
| Data tracking | Data Integrity | 15 | Sculley et al. (2015); Raff (2019) |
| Environment capture | Environment | 10 | AAAI-25 Checklist; Raff (2019) |
Scores are aggregated into a weighted total out of 100. Category weights reflect findings from Raff (2019), which showed that not all reproducibility factors are equally predictive.
GitHub Actions integration
Add this to your repository at .github/workflows/reprolint.yml to enforce a reproducibility threshold on every push and pull request:
name: Reproducibility Audit
on:
push:
branches: ["main", "master"]
pull_request:
branches: ["main", "master"]
jobs:
reprolint:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Install reprolint
run: uv tool install "git+https://github.com/YashTandon05/reprolint.git"
- name: Run reproducibility audit
run: reprolint . --min-score 60 --fail
References
- AAAI-25 Reproducibility Checklist. Association for the Advancement of Artificial Intelligence, 2024. https://aaai.org/conference/aaai/aaai-25/aaai-25-reproducibility-checklist/
- Sculley, D. et al. "Hidden Technical Debt in Machine Learning Systems." NeurIPS 28, 2015.
- Raff, E. "A Step Toward Quantifying Independently Reproducible Machine Learning Research." NeurIPS 32, 2019. arXiv:1909.06674.
- Pineau, J. et al. "Improving Reproducibility in Machine Learning Research." JMLR 22(164), 2021. arXiv:2003.12206.
- PyTorch Reproducibility Documentation. https://pytorch.org/docs/stable/notes/randomness.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reprolint-0.1.0.tar.gz.
File metadata
- Download URL: reprolint-0.1.0.tar.gz
- Upload date:
- Size: 38.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26fcc2dc8e0acf480d707d18d28c41df95c0663dd34b6af819325a802d989bfe
|
|
| MD5 |
722120e93246b7c0779c81b5eb77ef7d
|
|
| BLAKE2b-256 |
8c3d829759fcc5693486c5637255a0174966b90cf55a5ac6e12af2b5c7ff0dd0
|
File details
Details for the file reprolint-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reprolint-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16602257ed96228d3397f3a5691f805d5d7d45e0febea894899bd8b761b27093
|
|
| MD5 |
a7224e31aae5323afabdd4e8501581d6
|
|
| BLAKE2b-256 |
07abd003244886037dd700b1333a04758342b55ee6e0dbd7bceb26b93d675ab4
|