kooplearn is a Python library to learn evolution operators — also known as Koopman or Transfer operators — from data. kooplearn models can:
- Predict the evolution of states and observables.
- Estimate the eigenvalues and eigenfunctions of the learned evolution operators.
- Compute the Dynamic Mode Decomposition of states and observables.
- Learn neural-network representations
$x_t \mapsto \varphi(x_t)$ for evolution operators.
-
It is easy to use and strictly adheres to the scikit-learn API.
-
Kernel estimators are state-of-the-art:
kooplearnimplements the Reduced Rank Regressor from Kostic et al. 2022, which is provably better than the classical kernel DMD in estimating eigenvalues and eigenfunctions.- It also implements Nyström estimators and randomized estimators randomized for blazingly fast kernel learning.
-
Includes representation-learning losses (implemented both in Pytorch and JAX) to train neural-network Koopman embeddings.
-
Offers a collection of datasets for benchmarking evolution-operator learning algorithms.
To install the core version of kooplearn:
pip install kooplearnuv add kooplearnTo enable neural-network representations using kooplearn.torch or kooplearn.jax:
# Torch
pip install "kooplearn[torch]"
# JAX
pip install "kooplearn[jax]"# Torch
uv add "kooplearn[torch]"
# JAX
uv add "kooplearn[jax]"For development, clone the repository and install the package with all optional extras and dependency groups:
git clone https://github.com/Machine-Learning-Dynamical-Systems/kooplearn.git
cd kooplearn
uv sync --all-extras --all-groupsWith pip>=25.1, the equivalent editable install is:
python -m pip install -U pip
python -m pip install -e ".[torch,jax]" --group dev --group docs --group examplesRun the default test suite from the repository root with:
uv run pytestAfter installing with pip, use:
python -m pytestWe welcome contributions from the community. See CONTRIBUTING.md for development setup, testing, issue reports, and pull request guidance.
This project is licensed under the MIT License.
kooplearn is an joint effort between teams at the Italian Institute of Technology in Genoa and the École polytechnique in Paris. The main contributors to the project are (in alphabetical order):
- Vladimir Kostic
- Karim Lounici
- Giacomo Meanti
- Erfan Mirzaei
- Pietro Novelli
- Daniel Ordoñez-Apraez
- Grégoire Pacreau
- Massimiliano Pontil
- Giacomo Turri
The mantainer of this repo is Pietro Novelli.
@article{kooplearn,
title={kooplearn: A scikit-learn compatible library of algorithms for evolution operator learning},
author={Turri, Giacomo and Pacreau, Grégoire and Meanti, Giacomo and Devergne, Timothée and Ordoñez-Apraez, Daniel and Mirzaei, Erfan and Belucci, Bruno and Lounici, Karim and Kostic, Vladimir R. and Pontil, Massimiliano and Novelli, Pietro},
doi={10.21105/joss.10342},
url={https://doi.org/10.21105/joss.10342},
year={2026},
publisher={The Open Journal},
volume={11},
number={122},
pages={10342},
journal={Journal of Open Source Software},
}We hope you find kooplearn useful for your dynamical systems analysis. If you encounter any issues or have suggestions for improvements, please don't hesitate to raise an issue. Happy coding!