Development and Testing
Quick local checks
The normal test suite is deterministic and does not download external data:
python -m pytest -q
python -m pytest -q modulo_vki/test/test_fast_mpod.py
PYTHONWARNINGS=error::SyntaxWarning \
python -m compileall -f -q modulo_vki dev_tests
The fast-mPOD tests compare the fullK, bandK, fullSVD, and
randSVD backends, check reconstruction and temporal orthogonality, and
exercise the default installation without the optional Fortran extension.
Cross-version release regression
dev_tests/test_all_modal.py runs the decompositions on the external
2,000-snapshot JET-PIV tutorial dataset and stores one .npz result per
method. Run it once with the published 2.1.5 package and once with the 3.0.0
candidate, using separate environments and working directories:
python dev_tests/test_all_modal.py \
--version 2.1.5 \
--dataset-dir /path/to/tutorial-data \
--output-dir /tmp/modulo-regression
python dev_tests/test_all_modal.py \
--version 3.0.0 \
--dataset-dir /path/to/tutorial-data \
--output-dir /tmp/modulo-regression
The dataset directory must contain
Tutorial_2_JET_PIV/Ex_4_TR_PIV_Jet. The dataset is available from
https://osf.io/c28de/download.
Compare the shared outputs while allowing fast mPOD as the expected new candidate-only result:
python dev_tests/compare_all_modal.py \
/tmp/modulo-regression/2.1.5 \
/tmp/modulo-regression/3.0.0 \
--rtol 1e-5 --atol 1e-8 --allow-extra-candidate
The comparison exits with a non-zero status for missing files or keys, shape mismatches, non-finite values, or numerical differences outside tolerance. Real eigenvector signs and complex phases are aligned before comparison.
MODULO 3.0 release assessment
The final 3.0.0 release assessment produced zero maximum absolute difference between 2.1.5 and 3.0.0 for every saved JET-PIV result from DFT, POD, classical mPOD, filtered-covariance SPOD, and serial and parallel cross-spectral-density SPOD. The fast-mPOD result was the sole expected candidate-only artifact.
Tutorial_6_fast_mPOD.ipynb also executed without errors, produced 61 PDF
figures, and reproduced all committed numerical reference arrays. These
external-data checks complement the normal pytest suite and should be rerun
before a final release tag is created.