Skip to content

Commit 9c2a6b8

Browse files
authored
Revise the README (#823)
* Delete most links (they've been outdated for a while) * Polish readme * Polish the readme a bit
1 parent ab0b91c commit 9c2a6b8

2 files changed

Lines changed: 70 additions & 92 deletions

File tree

README.md

Lines changed: 69 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,90 @@
11
# probdiffeq
22

3-
[![Actions status](https://github.com/pnkraemer/probdiffeq/workflows/ci/badge.svg)](https://github.com/pnkraemer/probdiffeq/actions)
4-
[![image](https://img.shields.io/pypi/v/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
5-
[![image](https://img.shields.io/pypi/l/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
6-
[![image](https://img.shields.io/pypi/pyversions/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
3+
[![CI](https://github.com/pnkraemer/probdiffeq/workflows/ci/badge.svg)](https://github.com/pnkraemer/probdiffeq/actions)
4+
[![PyPI version](https://img.shields.io/pypi/v/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
5+
[![License](https://img.shields.io/pypi/l/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
6+
[![Python versions](https://img.shields.io/pypi/pyversions/probdiffeq.svg)](https://pypi.python.org/pypi/probdiffeq)
77

8-
## Probabilistic solvers for differential equations in JAX
8+
## Probabilistic ODE solvers in JAX
99

10-
ProbDiffEq implements adaptive probabilistic numerical solvers for initial value problems.
10+
**Probdiffeq** implements adaptive probabilistic numerical solvers for ordinary differential equations (ODEs). It builds on [JAX](https://jax.readthedocs.io/en/latest/), thus inheriting **automatic differentiation**, **vectorisation**, and **GPU acceleration**.
1111

12-
It inherits automatic differentiation, vectorisation, and GPU capability from JAX.
12+
## Features
1313

14-
**Features include:**
15-
16-
* ⚡ Calibration and step-size adaptation
17-
* ⚡ Stable implementation of filtering, smoothing, and other estimation strategies
18-
* ⚡ Custom information operators, dense output, and posterior sampling
19-
* ⚡ State-space model factorisations
20-
* ⚡ Physics-enhanced regression
21-
* ⚡ Taylor-series estimation with and without Jets
22-
* ⚡ Compatibility with other JAX-based libraries such as [Optax](https://optax.readthedocs.io/en/latest/index.html) or [BlackJAX](https://blackjax-devs.github.io/blackjax/).
23-
24-
25-
**Tutorials:**
26-
27-
* **AN EASY EXAMPLE:** [LINK](https://pnkraemer.github.io/probdiffeq/examples_quickstart/easy_example/)
28-
* **EXAMPLES:** [LINK](https://pnkraemer.github.io/probdiffeq/examples_solver_config/posterior_uncertainties/)
29-
* **CHOOSING A SOLVER:** [LINK](https://pnkraemer.github.io/probdiffeq/getting_started/choosing_a_solver/)
30-
* **API DOCUMENTATION:** [LINK](https://pnkraemer.github.io/probdiffeq/api_docs/ivpsolve/)
31-
* **ISSUE TRACKER:** [LINK](https://github.com/pnkraemer/probdiffeq/issues)
32-
* **BENCHMARKS:** [LINK](https://pnkraemer.github.io/probdiffeq/benchmarks/lotkavolterra/plot/)
14+
- ⚡ Calibration and step-size adaptation
15+
- ⚡ Stable implementations of filtering, smoothing, and other estimation strategies
16+
- ⚡ Custom information operators, dense output, and posterior sampling
17+
- ⚡ State-space model factorisations
18+
- ⚡ Parameter estimation
19+
- ⚡ Taylor-series estimation with and without Jets
20+
- ⚡ Seamless interoperability with [Optax](https://optax.readthedocs.io/en/latest/index.html), [BlackJAX](https://blackjax-devs.github.io/blackjax/), and other JAX-based libraries
21+
- ⚡ Numerous tutorials (basic and advanced) -- see the [documentation](https://pnkraemer.github.io/probdiffeq/)
3322

23+
---
3424

3525
## Installation
3626

37-
Get the most recent stable version from PyPi:
27+
Install the latest release from PyPI:
3828

39-
```
29+
```bash
4030
pip install probdiffeq
4131
```
42-
This installation assumes that [JAX](https://jax.readthedocs.io/en/latest/) is already available.
4332

44-
To install ProbDiffEq with `jax[cpu]`, run
45-
```commandline
33+
> This assumes [JAX](https://jax.readthedocs.io/en/latest/) is already installed.
34+
35+
To install with JAX (CPU backend):
36+
37+
```bash
4638
pip install probdiffeq[cpu]
4739
```
4840

41+
⚠️ **Note:** This is an active research project. Expect rough edges and breaking API changes.
42+
43+
---
44+
45+
## Benchmarks
4946

50-
**WARNING:**
51-
_**This is a research project. Expect rough edges and sudden API changes.**_
47+
We maintain benchmarks comparing **Probdiffeq** against other solvers and libraries, including [SciPy](https://scipy.org/), [JAX](https://jax.readthedocs.io/en/latest/), and [Diffrax](https://docs.kidger.site/diffrax/).
5248

53-
**VERSIONING:**
54-
As long as Probdiffeq is in its initial development phase (version 0.MINOR.PATCH), version numbers are increased as follows:
49+
Run benchmarks locally:
5550

56-
* Bugfixes and new features increase the PATCH version.
57-
* Breaking changes increase the MINOR version.
51+
```bash
52+
pip install .[example,test]
53+
make benchmarks-run
54+
```
5855

59-
See also: [semantic versioning](https://semver.org/).
6056

57+
---
6158

62-
## What's next?
59+
## Contributing
6360

64-
Start with the quickstart, continue with the `Solvers & Solutions` examples and only then move to the `Parameter estimation` examples and the API documentation.
61+
Contributions are very welcome!
62+
- Browse open issues (look for “good first issue”).
63+
- Check the developer documentation.
64+
- Open an issue for feature requests or ideas.
6565

66-
The examples show how to interact with the API and explain some valuable facts about probabilistic numerical solvers.
67-
They may be more instructive than the API docs.
66+
---
6867

69-
The advanced examples show applications of probabilistic numerical solvers, often in conjunction with external libraries.
70-
For example, [this notebook](https://pnkraemer.github.io/probdiffeq/advanced_examples/physics_enhanced_regression_1/) shows how to combine ProbDiffEq with [Optax](https://optax.readthedocs.io/en/latest/index.html), and [this notebook](https://pnkraemer.github.io/probdiffeq/advanced_examples/physics_enhanced_regression_2/) does the same with [BlackJAX](https://optax.readthedocs.io/en/latest/index.html).
68+
## Citing
7169

72-
## Citing this repository
73-
If you find Probdiffeq helpful for your research, please consider citing:
70+
If you use **Probdiffeq** in your research, please cite:
7471

7572
```bibtex
7673
@phdthesis{kramer2024implementing,
7774
title={Implementing probabilistic numerical solvers for differential equations},
78-
author={Kr{\"a}mer, Peter Nicholas},
75+
author={Kr{"a}mer, Peter Nicholas},
7976
year={2024},
80-
school={Universit{\"a}t T{\"u}bingen}
77+
school={Universit{"a}t T{"u}bingen}
8178
}
8279
```
83-
This thesis contains detailed information about the maths and algorithms behind what is implemented here.
84-
A PDF is available [at this link](https://tobias-lib.ub.uni-tuebingen.de/xmlui/handle/10900/152754).
80+
The [PDF](https://tobias-lib.ub.uni-tuebingen.de/xmlui/handle/10900/152754) explains the mathematics and algorithms behind this library.
81+
82+
For the *solve-and-save-at* functionality, cite:
8583

86-
If you use the solve-and-save-at functionality, please cite
8784
```bibtex
8885
@InProceedings{kramer2024adaptive,
8986
title = {Adaptive Probabilistic ODE Solvers Without Adaptive Memory Requirements},
90-
author = {Kr\"{a}mer, Nicholas},
87+
author = {Kr"{a}mer, Nicholas},
9188
booktitle = {Proceedings of the First International Conference on Probabilistic Numerics},
9289
pages = {12--24},
9390
year = {2025},
@@ -98,55 +95,36 @@ If you use the solve-and-save-at functionality, please cite
9895
url = {https://proceedings.mlr.press/v271/kramer25a.html}
9996
}
10097
```
101-
This article introduced the algorithm we use.
102-
The implementation is slightly different to what we would do for non-probabilistic solvers; see the paper.
103-
A PDF is available [here](https://arxiv.org/abs/2410.10530) and the paper's experiments are [here](https://github.com/pnkraemer/code-adaptive-prob-ode-solvers).
98+
Link to the paper: [PDF](https://arxiv.org/abs/2410.10530).
10499

100+
Link to the experiments:
101+
[Code for experiments](https://github.com/pnkraemer/code-adaptive-prob-ode-solvers).
105102

106-
_Probdiffeq's algorithms have been developed over many years and in multiple research papers.
107-
Linking concrete citation information for specific algorithms is a work in progress.
108-
Feel free to reach out if you need help determining which works to cite!_
103+
📌 Algorithms in Probdiffeq are based on multiple research papers. If you’re unsure which to cite, feel free to reach out.
109104

110-
## Contributing
111-
Contributions are welcome!
112-
Check the existing issues for a "good first issue" and consult the developer documentation.
105+
---
113106

114-
If you have a feature that you would like to see implemented, create an issue!
107+
## Versioning
115108

116-
## Benchmarks
109+
Probdiffeq follows **0.MINOR.PATCH** until its first stable release:
110+
- **PATCH** → bugfixes & new features
111+
- **MINOR** → breaking changes
117112

118-
ProbDiffEq curates a range of benchmarks that includes various library-internal configurations
119-
but also other packages like [SciPy](https://scipy.org/), [JAX](https://jax.readthedocs.io/en/latest/), or [Diffrax](https://docs.kidger.site/diffrax/).
120-
To run the benchmark locally, install all dependencies via
121-
```commandline
122-
pip install .[example,test]
123-
```
124-
and then either open Jupyter and go to `docs/benchmarks`
125-
or execute all benchmarks via
126-
```commandline
127-
make benchmarks-run
128-
```
129-
Be patient; it might take a while.
130-
Afterwards, open Jupyter to look at the result or build the documentation via
131-
```
132-
mkdocs serve
133-
```
134-
What do you find?
113+
See [semantic versioning](https://semver.org/).
114+
115+
---
135116

136-
## Similar projects
117+
## Related projects
137118

138-
* [Tornadox](https://github.com/pnkraemer/tornadox)
139-
* [ProbNumDiffEq.jl](https://nathanaelbosch.github.io/ProbNumDiffEq.jl/stable/)
140-
* [ProbNum](https://probnum.readthedocs.io/en/latest/)
141-
* [Diffrax](https://docs.kidger.site/diffrax/)
119+
- [Tornadox](https://github.com/pnkraemer/tornadox)
120+
- [ProbNumDiffEq.jl](https://nathanaelbosch.github.io/ProbNumDiffEq.jl/stable/)
121+
- [ProbNum](https://probnum.readthedocs.io/en/latest/)
142122

143-
Here's how to transition from those packages: [link](https://pnkraemer.github.io/probdiffeq/quickstart/transitioning_from_other_packages/).
123+
The docs include guidance on migrating from these packages. Missing something? Open an issue or pull request!
144124

145-
Is anything missing from this list? Please open an issue or make a pull request.
125+
---
146126

147127
## You might also like
148128

149-
* [diffeqzoo](https://diffeqzoo.readthedocs.io/en/latest/):
150-
A library, for example, implementations of differential equations in NumPy and JAX
151-
* [probfindiff](https://probfindiff.readthedocs.io/en/latest/):
152-
Probabilistic numerical finite differences in JAX.
129+
- [diffeqzoo](https://diffeqzoo.readthedocs.io/en/latest/) — reference implementations of differential equations in NumPy and JAX
130+
- [probfindiff](https://probfindiff.readthedocs.io/en/latest/) — probabilistic finite-difference methods in JAX

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ extra:
7373
name: pnkraemer
7474
generator: false
7575
nav:
76-
- Probabilistic solvers for differential equations in JAX: index.md
76+
- index.md
7777
- An easy example: examples_quickstart/quickstart.ipynb
7878
- Migration guide: migration_guide.md
7979
- Choosing a solver: choosing_a_solver.md

0 commit comments

Comments
 (0)