Framework for recursive Bayesian estimation in Python.
Project description
PyRecEst
Recursive Bayesian Estimation for Python.
PyRecEst is a Python library for recursive Bayesian estimation on Euclidean spaces and manifolds. It uses a NumPy backend by default and can also run with PyTorch or JAX backends.
Features
PyRecEst provides tools for:
- distributions and densities on Euclidean spaces and manifolds;
- recursive Bayesian estimators, filters, and trackers;
- multi-target tracking (MTT) and extended object tracking (EOT);
- evaluation of filters and trackers; and
- sampling distributions and generating grids.
Which API Should I Start With?
| Task | Start with |
|---|---|
| Linear Euclidean Gaussian filtering | KalmanFilter and examples/basic/kalman_filter.py |
| Reusable transition and measurement models | examples/basic/kalman_filter_with_models.py |
| Nonlinear filtering | examples/basic/ukf_with_models.py or particle-filter examples |
| Multi-target tracking with clutter or missed detections | examples/basic/multi_target_tracking.py |
| Circular, spherical, or manifold-valued states | circular, hypertoroidal, and hyperspherical distribution modules |
| Backend-portable code | pyrecest.backend imports plus focused tests under each backend |
For more detail, see docs/choosing-an-api.md and docs/backend-compatibility.md.
Command Line And Reproducible Scenarios
After installation, use the lightweight CLI to inspect an environment or run a reproducible scenario:
pyrecest info
pyrecest backends --format markdown
pyrecest run-scenario scenarios/linear_gaussian_cv_1d/config.toml
The same scenario runner is available from a source checkout via
scripts/run_scenario.py. Scenario definitions live in scenarios/ and include
TOML configuration plus JSON golden outputs.
The pyrecest.diagnostics module defines common diagnostics containers for
innovation statistics, particle-filter health, and association decisions.
Installation
PyRecEst requires Python 3.11 or newer and earlier than Python 3.15.
Install the package from PyPI:
python -m pip install pyrecest
Optional backend and domain-specific dependencies can be installed with extras:
python -m pip install "pyrecest[pytorch_support]"
python -m pip install "pyrecest[jax_support]"
python -m pip install "pyrecest[healpy_support]"
python -m pip install "pyrecest[all_support]"
Pip normalizes extra names, so the equivalent hyphenated spellings such as
pyrecest[pytorch-support], pyrecest[jax-support],
pyrecest[healpy-support], and pyrecest[all-support] may also appear in
package-index metadata.
For development from a source checkout, use Poetry or the provided conda environment:
poetry install --with dev --all-extras
# or
conda env create -f environment.yml
Quickstart
The following example runs a one-dimensional constant-velocity Kalman filter.
It uses the backend abstraction exposed by pyrecest.backend, so the same code
can run on supported numerical backends.
from pyrecest.backend import array, diag
from pyrecest.filters import KalmanFilter
dt = 1.0
system_matrix = array([[1.0, dt], [0.0, 1.0]])
measurement_matrix = array([[1.0, 0.0]])
system_noise_cov = diag(array([0.05, 0.01]))
measurement_noise_cov = array([[0.25]])
measurements = [0.9, 2.0, 3.1, 3.9, 5.2]
kalman_filter = KalmanFilter((array([0.0, 1.0]), diag(array([1.0, 1.0]))))
for measurement in measurements:
kalman_filter.predict_linear(system_matrix, system_noise_cov)
kalman_filter.update_linear(
array([measurement]), measurement_matrix, measurement_noise_cov
)
print(kalman_filter.get_point_estimate())
Run the complete script with:
python examples/basic/kalman_filter.py
Documentation
The docs/ directory contains the first project documentation pages:
- Getting started covers installation, development setup, backend selection, and running examples.
- API overview maps the main packages and points to the most common public entry points.
- Backend compatibility explains the NumPy, PyTorch, and JAX support model and known limitations.
- Choosing an API maps task families to recommended filters, distributions, trackers, and examples.
- Distribution taxonomy summarizes the main representation families by domain and use case.
- Error handling documents the shared exception types and user-facing diagnostics policy.
- API reference contains generated package reference pages built with MkDocs and mkdocstrings.
- Task tutorials show common distribution, filtering, tracking, and evaluation workflows.
- Shapes and conventions documents common vector, matrix, measurement-set, batch, and manifold-coordinate shapes.
- Examples lists the executable examples and what each one demonstrates.
Build the documentation site locally with:
poetry install --with docs --without dev
poetry run mkdocs build --strict
Backends
PyRecEst imports pyrecest.backend dynamically. The default backend is NumPy.
Set PYRECEST_BACKEND before Python imports pyrecest to select another
backend:
PYRECEST_BACKEND=pytorch python examples/basic/kalman_filter.py
PYRECEST_BACKEND=jax python examples/basic/kalman_filter.py
Install the matching optional extra before using a non-default backend.
Examples and tests
examples/basic/kalman_filter.pycontains a small executable Kalman filter example.examples/basic/scgp_measurement_reliability.pydemonstrates reliability-weighted measurements for the full SCGP extended-object tracker.tests/contains additional usage examples for distributions, filters, smoothers, evaluation, sampling, metrics, and tracking utilities.
To run the test suite from a development environment:
python -m pytest
Citation
If you use PyRecEst in your research, please cite:
| BibTeX | BibLaTeX |
|---|---|
@misc{pfaff_pyrecest_2023,
author = {Florian Pfaff},
title = {PyRecEst: Recursive Bayesian Estimation for Python},
year = {2023},
howpublished = {\url{https://github.com/FlorianPfaff/PyRecEst}},
note = {MIT License}
}
|
@software{pfaff_pyrecest_2023_software,
author = {Florian Pfaff},
title = {PyRecEst: Recursive Bayesian Estimation for Python},
year = {2023},
url = {https://github.com/FlorianPfaff/PyRecEst},
license = {MIT},
keywords = {Bayesian filtering; manifolds; tracking; Python; NumPy; PyTorch; JAX}
}
|
Credits
- Florian Pfaff (pfaff@ias.uni-stuttgart.de)
PyRecEst borrows its structure from libDirectional and follows its code closely for many classes. libDirectional, a project to which Florian Pfaff contributed extensively, is available on GitHub. The backend implementations are based on those of geomstats.
License
PyRecEst is licensed under the MIT License.
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 pyrecest-2.3.0.tar.gz.
File metadata
- Download URL: pyrecest-2.3.0.tar.gz
- Upload date:
- Size: 686.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c2813b9bbe44d8b1702433bc84e1e681383b2f0ac28045e331efd6537754385
|
|
| MD5 |
5f43a0bd597ce7f7cdd79c9f5351c1ad
|
|
| BLAKE2b-256 |
634b3c5c28cac84a9ece645e8403f06a4a9bf396e171dc2ddd9d52348aa2e432
|
Provenance
The following attestation bundles were made for pyrecest-2.3.0.tar.gz:
Publisher:
publish-to-pypi.yml on FlorianPfaff/PyRecEst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyrecest-2.3.0.tar.gz -
Subject digest:
7c2813b9bbe44d8b1702433bc84e1e681383b2f0ac28045e331efd6537754385 - Sigstore transparency entry: 1753709488
- Sigstore integration time:
-
Permalink:
FlorianPfaff/PyRecEst@62d582c859aa990f107554741bde1995215ca523 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FlorianPfaff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@62d582c859aa990f107554741bde1995215ca523 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pyrecest-2.3.0-py3-none-any.whl.
File metadata
- Download URL: pyrecest-2.3.0-py3-none-any.whl
- Upload date:
- Size: 919.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3de435437f66f36f7074281885b9338e8f023e0dc82c03e5a94ac6b0a4b42957
|
|
| MD5 |
d31c261f741ec389c3c8a2cb361d9ebb
|
|
| BLAKE2b-256 |
531e6c436ebebff6a979cbc5ef818346613ec520439e1a9937c5ed0e355e5c69
|
Provenance
The following attestation bundles were made for pyrecest-2.3.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on FlorianPfaff/PyRecEst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyrecest-2.3.0-py3-none-any.whl -
Subject digest:
3de435437f66f36f7074281885b9338e8f023e0dc82c03e5a94ac6b0a4b42957 - Sigstore transparency entry: 1753709571
- Sigstore integration time:
-
Permalink:
FlorianPfaff/PyRecEst@62d582c859aa990f107554741bde1995215ca523 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FlorianPfaff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@62d582c859aa990f107554741bde1995215ca523 -
Trigger Event:
workflow_dispatch
-
Statement type: