wias is a Python library for data-driven identification of analytic systems in weak form based on the paper: A zero-one law for one-shot system identification
by Nicolas Boullé, Diana Halikias, Samuel E. Otto, and Alex Townsend.
- Weak-form assembly for first- and second-order ODE systems
- Sinusoidal test-function basis construction
- Column-pivoted QR solver (
CPQR_solver) for coefficient recovery - PDE support via optional Firedrake integration for finite-element weak-form assembly
- Recovery of linearly-parametrized matrix families
The identified model accurately reconstructs the chaotic Lorenz trajectory from noisy data.
Lorenz attractor: true vs recovered
The phase portrait and time series of the identified Duffing oscillator match the ground truth closely over long integration times.
Duffing oscillator: true vs recovered
More examples are available in the examples/ folder, including Allen–Cahn, Navier–Stokes, and Hankel/circulant matrix problems.
Compute zero level set of a parameter-to-recovery map to identify inputs that lie in the degenerate set and do not allow recovery of the underlying system.
pip install wias
or
git clone https://github.com/NBoulle/wias cd wias pip install .
PDE identification via wias.weak_assembly requires Firedrake. Follow the official installation instructions at https://www.firedrakeproject.org/install.html. Once installed, assemble_weak_library_rows becomes available automatically.
If you use wias in your research, please cite the following paper:
@article{boulle2026zero, title={A zero-one law for one-shot system identification}, author={Boull\'e, Nicolas and Halikias, Diana and Otto, Samuel E. and Townsend, Alex}, journal={arXiv preprint arXiv:2607.15832}, year={2026} }