heavytails
A pure-Python library of heavy-tailed probability distributions
heavytails implements continuous and discrete heavy-tailed distributions, tail
index estimators, and diagnostic utilities — using only the Python standard
library. Every density, quantile and sampler is derived from first principles,
so the implementation can be read, checked and taught rather than taken on faith.
It targets research, teaching and simulation work in risk, finance, insurance and extreme-value analysis.
Features
- No runtime dependencies. The library imports nothing outside
math,randomand friends, so it installs anywhere Python does. - Complete distribution interface. PDF/PMF, CDF, survival function, quantile
function and random sampling for every family, with survival functions computed
directly so they stay accurate far into the tail where
1 - cdf(x)has lost every significant digit. - Reproducible sampling through a deterministic RNG wrapper.
- Special functions from scratch — incomplete gamma and incomplete beta — plus a safeguarded-Newton numeric PPF for families with no closed form.
- Tail index estimation with Hill-family, robust, bias-reduced, threshold-averaged and peaks-over-threshold estimators.
- Parameter fitting by maximum likelihood and method of moments, with AIC/BIC model comparison.
- Diagnostics for log–log tail plots and QQ plots.
- A command-line interface for sampling, fitting, comparison and benchmarking.
- Typed throughout, with a
py.typedmarker so downstream type checkers see the annotations.
Installation
pip install heavytails
The command-line interface needs two extra packages; install it with the cli
extra:
pip install "heavytails[cli]"
To work on the library itself:
git clone https://github.com/DiogoRibeiro7/heavytails.git
cd heavytails
poetry install --with dev,docs
Requires Python 3.10 or newer.
Quick start
from heavytails import BurrXII, Pareto, hill_estimator
pareto = Pareto(alpha=1.5, xm=1.0)
pareto.pdf(2.0) # density
pareto.cdf(2.0) # distribution function
pareto.sf(10.0) # survival function: P(X > 10)
pareto.ppf(0.99) # 99th percentile
samples = pareto.rvs(10_000, seed=42)
# Recover the tail index from the sample. The estimators return the
# extreme-value index gamma = 1 / alpha, so invert it to read alpha back.
gamma = hill_estimator(samples, k=100) # ≈ 0.65
alpha = 1 / gamma # ≈ 1.53, against a true 1.5
burr = BurrXII(c=1.2, k=2.5, s=3.0)
burr.ppf(0.95)
Command line
heavytails list-distributions
heavytails sample pareto --params '{"alpha": 2.0, "xm": 1.0}' -n 1000 -o samples.txt
heavytails estimate-tail samples.txt --method hill
heavytails compare samples.txt
Run heavytails --help for the full command list.
Available distributions
Continuous
| Distribution | Module | Heavy-tail regime |
|---|---|---|
| Pareto | heavy_tails |
always |
| Cauchy | heavy_tails |
always |
| Student-t | heavy_tails |
small ν |
| Log-Normal | heavy_tails |
always |
| Weibull | heavy_tails |
k < 1 |
| Fréchet | heavy_tails |
always |
| GEV (Fréchet branch) | heavy_tails |
ξ > 0 |
| Generalized Pareto | extra_distributions |
ξ > 0 |
| Burr XII | extra_distributions |
always |
| Log-Logistic (Fisk) | extra_distributions |
always |
| Inverse-Gamma | extra_distributions |
always |
| Beta-Prime | extra_distributions |
always |
Discrete
| Distribution | Module | Heavy-tail regime |
|---|---|---|
| Zipf | discrete |
always |
| Yule–Simon | discrete |
always |
| Discrete Pareto | discrete |
always |
Every continuous family provides pdf, cdf, sf, ppf and rvs; every
discrete family provides pmf, cdf, ppf and rvs.
Estimation and diagnostics
| Module | Contents |
|---|---|
tail_index |
Hill-family, robust, bias-reduced and POT estimators |
plotting |
Log–log tail plots and QQ plots |
utilities |
Data I/O, automatic fitting and model comparison |
validation |
Mathematical and numerical validation of the families |
cli |
Command-line entry point |
Documentation
Full documentation, including the mathematical background, is at https://diogoribeiro7.github.io/heavytails.
To build it locally:
make docs-serve
Development
make install-dev # install every dependency group
make hooks # install the pre-commit hooks
make check # everything CI runs: lint, format, types, tests, security
Individual targets are listed by make help. Contributions are welcome — see
CONTRIBUTING.md for the branch flow, commit conventions and
review process, and ROADMAP.md for what is planned next.
Notable changes are recorded in CHANGELOG.md.
License
MIT License © 2025 Diogo Ribeiro. See LICENSE.
Citation
If you use this package in research or teaching, please cite it. GitHub's "Cite this repository" button reads CITATION.cff, or use:
Ribeiro, D. (2026). heavytails: A Pure-Python Library for Heavy-Tailed Probability Distributions (Version 0.3.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.22045594
Which DOI to use. 10.5281/zenodo.22045594
is the concept DOI: it always resolves to the most recent release, and citing
it means "this software, any version". Use it unless the exact version
matters. When reproducibility depends on the version you ran, cite that
version's own DOI instead -- for 0.3.0 that is
10.5281/zenodo.22050721. Every release
gets its own, listed on the Zenodo record.
@software{ribeiro_heavytails,
author = {Ribeiro, Diogo},
title = {heavytails: A Pure-Python Library for Heavy-Tailed
Probability Distributions},
publisher = {Zenodo},
doi = {10.5281/zenodo.22045594},
url = {https://doi.org/10.5281/zenodo.22045594}
}
Shared citation metadata is maintained in CITATION.cff; Zenodo-specific
archive metadata is maintained in .zenodo.json. Both list the papers the
library implements, so citing a specific estimator is a matter of copying the
entry rather than tracking it down.
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 heavytails-0.4.0.tar.gz.
File metadata
- Download URL: heavytails-0.4.0.tar.gz
- Upload date:
- Size: 286.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74112e4d1e639f5365f3a8578eff7c454a5b199988b216efb8079c884b9cd74c
|
|
| MD5 |
f4541d132eb4b1d77eed89127aa3edf6
|
|
| BLAKE2b-256 |
bc343290c2a02d91968007720b0a86fc51d411a7b4a6d53ffad358b288815aeb
|
Provenance
The following attestation bundles were made for heavytails-0.4.0.tar.gz:
Publisher:
ci.yml on DiogoRibeiro7/heavytails
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
heavytails-0.4.0.tar.gz -
Subject digest:
74112e4d1e639f5365f3a8578eff7c454a5b199988b216efb8079c884b9cd74c - Sigstore transparency entry: 2568461569
- Sigstore integration time:
-
Permalink:
DiogoRibeiro7/heavytails@5971ef957a3afd0536e8d44c07b5fd121a8ac39b -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/DiogoRibeiro7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@5971ef957a3afd0536e8d44c07b5fd121a8ac39b -
Trigger Event:
release
-
Statement type:
File details
Details for the file heavytails-0.4.0-py3-none-any.whl.
File metadata
- Download URL: heavytails-0.4.0-py3-none-any.whl
- Upload date:
- Size: 156.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1979c259d2b2426b6a22eb8a9c77b4c2962c1f54ec7fe010e3f141cd6d98313
|
|
| MD5 |
57f537dac71b4b4d8356fa9bf49059e1
|
|
| BLAKE2b-256 |
9d604118cceabd0d1ad4d67da377e79d1abf4d72adb33c170e280ee53d8c1492
|
Provenance
The following attestation bundles were made for heavytails-0.4.0-py3-none-any.whl:
Publisher:
ci.yml on DiogoRibeiro7/heavytails
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
heavytails-0.4.0-py3-none-any.whl -
Subject digest:
a1979c259d2b2426b6a22eb8a9c77b4c2962c1f54ec7fe010e3f141cd6d98313 - Sigstore transparency entry: 2568461573
- Sigstore integration time:
-
Permalink:
DiogoRibeiro7/heavytails@5971ef957a3afd0536e8d44c07b5fd121a8ac39b -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/DiogoRibeiro7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@5971ef957a3afd0536e8d44c07b5fd121a8ac39b -
Trigger Event:
release
-
Statement type: