Skip to main content

Publication DOI Documentation Status MIT License Data

VENI-VINDy-VICI

A variational reduced-order modeling framework with uncertainty quantification [1].

graphical_abstract_gif

Examples

Tutorial notebook: Run the Roessler example on Colab Tutorial Roessler

For the other examples:

  1. Clone the repository and install the package locally (see installation instructions below)
  2. Download the data from Zenodo
  3. Copy the config.py.template file to config.py and adjust the paths to the data
  4. Then you can run the notebooks in the examples folder.

Data

Data for the reaction diffusion and Micro-Electro-Mechanical Systems (MEMS) example can be found in Zenodo.

Reference

The journal paper is available on Neural Networks, while you can find the preprint version on arXiv. If you use this project for academic work, please consider citing it

@article{conti2026veni,
  title={VENI, VINDy, VICI: a generative reduced-order modeling framework with uncertainty quantification},
  author={Conti, Paolo and Kneifl, Jonas and Manzoni, Andrea and Frangi, Attilio and Fehr, J{\"o}rg and Brunton, Steven L and Kutz, J Nathan},
  journal={Neural Networks},
  pages={108543},
  year={2026},
  publisher={Elsevier}
}

If you additionally want to cite this code, use Zenodo.

Framework

The framework discovers probabilistic governing equations from high-dimensional data in a low-dimensional latent space. It consists of three steps:

  • VENI (Variational Encoding of Noisy Inputs): a generative model utilizing variational autoencoders (VAEs) is applied to transform high-dimensional, noisy data into a low-dimensional latent space representation that is suitable to describe the dynamics of the system.
  • VINDy (Variational Identification of Nonlinear Dynamics): on the time series data expressed in the new set of latent coordinates, a probabilistic dynamical model of the system is learned by a variational version of SINDy (Sparse Identification of Nonlinear Dynamics) [2].
  • VICI (Variational Inference with Certainty Intervals): the resulting ROM allows to evolve the temporal system solution by variational inference on both the latent variable distribution and the dynamic model, given new parameter/force values and initial conditions. This, naturally, provides an estimate of the reliability of the prediction through certainty intervals.

Features

This repository implements the classic SINDy autoencoders [3] as well as its variational extension: the newly proposed VENI, VINDy, VICI framework [1].

  • Autoencoders (AEs) for dimensionality reduction
  • Variational autoencoders (VAEs) for probabilistic latent representations
  • SINDy layer to identify interpretable governing equations from data using standard backpropagation algorithms
  • VINDy layer to identify interpretable probabalistic governing equations, where coefficients are represented as distributions.
    • Direct uncertainty quantification on modeling terms
    • Sampling-based uncertainty quantification for time evolution of system states
  • Infuse preknowledge
    • Select priors
    • Fix certain weights
    • Model your system as second order system dx/ddt = f(x, xdt, mu)
  • Several callbacks
    • Thresholding coefficents w.r.t their magnitude or their probability density function around zero
    • Log the coefficients during training to monitor convergence

The individual contributions can be used standalone (plain SINDy or VINDy) or arbitrarily be combined with dimensionality reducition schemes (e.g. VAEs with SINDy, AE with VINDy, VAE with VINDy, ...)

Installation

You can either clone the repository and install the package locally or install it directly from PyPI.

PyPI

pip install vindy

Local

Clone this repository and install it to your local environment as package using pip:

git clone https://github.com/jkneifl/VENI-VINDy-VICI.git
cd VENI-VINDy-VICI

Then you can activate the environment in which you want to install the package, and use pip to perform the installation.

pip install -e .

⚠️ Please note that you need pip version 24.0 to install the repository in editable mode. Either upgrade pip to the latest version or install it without the -e argument

You can run the jupyter notebook for the Roessler system to check if the installation was successful. It is in the examples folder. Please note that you'll need to have jupyter installed in order to run the notebook.

References

[1] Paolo Conti, Jonas Kneifl, Andrea Manzoni, Attilio Frangi, Jörg Fehr, Steven L. Brunton, J. Nathan Kutz. VENI, VINDy, VICI -- a generative reduced-order modeling framework with uncertainty quantification. Neural Networks, 2026. doi.org/10.1016/j.neunet.2026.108543.

[2] S. L. Brunton, J. L. Proctor, J. N. Kutz, Discovering governing equations from data by sparse identification of nonlinear dynamical systems, Proceedings of the national academy of sciences 113 (15) (2016) 3932–3937. doi:10.1073/pnas.1517384113.

[3] Champion, K., Lusch, B., Kutz, J. N., & Brunton, S. L. (2019). Data-driven discovery of coordinates and governing equations. Proceedings of the National Academy of Sciences, 116(45), 22445-22451. doi:10.1073/pnas.1906995116.

Metadata

Release files for vindy 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vindy 1.0.1
File Size Uploaded
vindy-1.0.1.tar.gz 40.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vindy 1.0.1
File Interpreter ABI Platform
vindy-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 88.7 kB

Release files / vindy-1.0.1.tar.gz

Download URL vindy-1.0.1.tar.gz
Size 40.6 kB
Tags Source
SHA-256 checksum
How to use checksums
187d63d6fb3153b863a70d5d5974571c833dadf0dda7475bc829e2f139e18a90
BLAKE2b-256 checksum
How to use checksums
973efafd336a27a5c0ab2ab4a9545977d044ccf20c94d084156ae4f42b17213b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / vindy-1.0.1-py3-none-any.whl

Download URL vindy-1.0.1-py3-none-any.whl
Size 48.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0e4bf34bd750de195305c1c3e746e7da4ae881d366be51f9d11afaa62d4d5d00
BLAKE2b-256 checksum
How to use checksums
55d0286cccec745dc6044c6346c5a5a18a08973e3c846bec0c5a46f4c6c1b94e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page