Home / Software

Software

Open-source code from the lab, each package documented in a peer-reviewed paper. If you use it, please cite the paper: every page below gives the reference.

6Packages
6Papers
10Ensemble methods in TEDA
Architecture of PyTEDA-web: React front end, FastAPI back end, PostgreSQL, and TEDA with external models
PyTEDA-web: a React front end, a FastAPI back end that streams results, a PostgreSQL store, and TEDA doing the assimilation with Lorenz-96 built in and QG-Python and swesphere as external models.
Web platform · React + FastAPI · 2026

PyTEDA-web

Nino-Ruiz, E. D. · SoftwareX 34, 102738 · 2026

The web interface of TEDA. Configure an ensemble data assimilation experiment in the browser, launch it, watch the error curves arrive in real time, and keep every run in a database so methods can be compared later or exported as CSV.

About PyTEDA-web   GitHub   Paper

1.5-layer quasi-geostrophic model: potential vorticity and streamfunction
QG-Python running the 1.5-layer quasi-geostrophic model on a 193 × 193 grid: potential vorticity (left) and streamfunction (right).
Model · Python · 2026

QG-Python

Nino-Ruiz, E. D. · Geoscience Data Journal 13, e70107 · 2026 · pip install qg-python

A reproducible Python port of the 1.5-layer quasi-geostrophic model QG-C, with a direct sparse Helmholtz solver, RK4, Dormand-Prince and Leapfrog (RA and RAW filters) integrators under one API, and diagnostics for the linearized operator, its eigenspectrum and the maximum Lyapunov exponent. Comes with a published stability and filter sensitivity dataset.

About QG-Python   GitHub   PyPI   Paper

Shallow-water model on the sphere: zonal wind, meridional wind and depth anomaly of the two_jets regime
The two_jets regime of swesphere: zonal wind, meridional wind, and the departure of the fluid depth from its zonal mean, drawn as relief.
Model · Python · 2026

swesphere

Nino-Ruiz, E. D. · SoftwareX, submitted · 2026 · pip install swesphere

Shallow-water equations on the rotating sphere: a small geophysical flow for numerical experiments, verified against the standard test cases and reproducible from a container. Three documented regimes, a state-vector interface any external program can drive, and a pluggable time integrator. About two seconds per model day on one core.

About swesphere   GitHub   PyPI

TEDA

A lightweight, object-oriented Python toolbox for ensemble-based data assimilation. TEDA implements the filters and the Lorenz-96 model; larger models come from separate packages, QG-Python and swesphere, through the same state-vector interface. pip install pyteda

How easy is it to use?

from analysis.analysis_enkf_modified_cholesky \
    import AnalysisEnKFModifiedCholesky

model = Lorenz96()
background = Background(model, ensemble_size=20)
analysis = AnalysisEnKFModifiedCholesky(model, r=2)
observation = Observation(m=32, std_obs=0.01)

params = {'obs_freq': 0.1,
          'obs_times': 10,
          'inf_fact': 1.04}
simulation = Simulation(model, background,
                        analysis, observation,
                        params=params)
simulation.run()

# background and analysis errors per step
errb, erra = simulation.get_errors()

A model is anything with a state vector and a propagate call, so the same filters run on Lorenz-96, on the quasi-geostrophic model of QG-Python and on the shallow-water sphere of swesphere without changing a line of the assimilation code.

GitHub   Paper, SoftwareX 2025   ICCS 2022

If you use TEDA, please cite

Nino-Ruiz, E. D. (2025). TEDA: A lightweight Python framework for educational data assimilation. SoftwareX, 31, 102297. doi:10.1016/j.softx.2025.102297

Nino-Ruiz, E. D., & Valbuena, S. R. (2022). TEDA: A computational toolbox for teaching ensemble based data assimilation. In Computational Science, ICCS 2022, LNCS 13353. Springer. doi:10.1007/978-3-031-08760-8_60

Supported methods

ClassMethodReference
AnalysisEnKFEnKF with the full covariance matrixEvensen (2009)
AnalysisEnKFNaiveEnKF via an iterative Sherman-Morrison formulaNino-Ruiz, Sandu, Anderson (2015)
AnalysisEnKFCholeskyEnKF via Cholesky decompositionMandel (2006)
AnalysisEnKFModifiedCholeskyEnKF via modified Cholesky decompositionNino-Ruiz, Sandu, Deng (2018)
AnalysisEnKFShrinkagePrecisionEnKF with shrinkage precision matrixNino-Ruiz, Sandu (2015)
AnalysisEnKFBLocEnKF with B-localizationGreybush et al. (2011)
AnalysisEnSRFEnsemble square root filterTippett et al. (2003)
AnalysisETKFEnsemble transform Kalman filterBishop, Etherton, Majumdar (2001)
AnalysisLETKFLocal ensemble transform Kalman filterHunt, Kostelich, Szunyogh (2007)
AnalysisLEnKFLocal ensemble Kalman filterOtt et al. (2004)

Research packages

Code we use in our own experiments, packaged for reuse.

Research package · Python · SoftwareX 2023

AMLCS-DA

Data assimilation for atmospheric general circulation models. This is the package the lab uses for experiments with the SPEEDY model at near-operational resolutions, including ensemble-based methods for its leapfrog integration scheme.

Statistical package · SoftwareX 2025

Precision matrices via modified Cholesky decomposition

The aml_pred_assim package estimates precision (inverse covariance) matrices from small samples in high dimensions via a modified Cholesky decomposition. It downloads climate fields from the Copernicus Climate Data Store, builds the predecessor structure of each grid point and fits the sparse factors with ridge regression, saving everything to NetCDF.