Skip to content

linstabpy 1.0.0rc9

Pre-release
Pre-release

Choose a tag to compare

@ricardofrantz ricardofrantz released this 08 Oct 20:46
· 196 commits to main since this release

Release-hardening pass before 1.0.0.

Changed

  • Consolidated duplicated private helpers into shared modules: config lookup
    (cfg_get, as_bool) in utils/_solver_cfg, peak_rss_bytes() in
    utils/cost_metrics, the spatial Dirichlet helpers in
    boundary_conditions/dirichlet, the backend normalizer in
    linalg/backends, and one _matvec(operator, x, adjoint=...) in the
    solver router in place of a forward/adjoint pair. Net -142 lines with no
    behavior change; every module now imports the one canonical copy instead
    of carrying a private variant that could drift.

Fixed

  • Four call sites in solvers/router/stable_sweep.py still called the
    removed _adjoint_matvec after the mat-vec merge, so PETSc-backend sweeps
    raised NameError. These paths only execute where petsc4py is installed,
    which is why a PETSc-less checkout did not catch it.
  • Environment-absence tests (missing nvidia-smi, missing PETSc stack,
    missing repository .venv, empty PETSc options database) now simulate the
    absent component instead of asserting properties of the host machine. The
    full suite passes unmodified on CPU-only machines and on GPU nodes.
  • The Martini export tools now locate the upstream MATLAB code through
    LINSTAB2D_ROOT only, and the one parity test that reads a raw MATLAB
    fixture bundle takes its directory from LINSTABPY_MATLAB_FIXTURES_NPZ;
    the machine-specific fallback paths are gone, and the public-provenance
    scanner now rejects those path forms.

Verification

The tagged commit passes the full test suite with zero failures on both
supported stacks: 1574 tests pass on a CPU-only environment (MKL BLAS,
MUMPS) and 1584 on a GPU environment (CUDA-enabled PETSc with STRUMPACK
plus the cuDSS backend, on an NVIDIA RTX A6000). Every remaining skip
names either an optional backend absent from that environment or a
reference file that is not distributed with the repository, and between
the two environments every backend-gated test runs at least once.

The six examples (the five Martini flows plus the Example 0 derivative
protocol) were recomputed from scratch for this release — every cached
NPZ deleted first — through ./run_all_examples.sh, and all six pass.
Against the shipped MATLAB reference bundles, the Blasius and jet
resolvent gains agree to 1.7e-11 and 3.3e-12 relative, the cavity spectra
agree to 6e-6 with eigenvalue residuals below 2e-8, and the Example 3
temporal and spatial eigenpairs satisfy their discrete problems to
residuals of 5e-9 or better. (The Example 3 parity check required a
manifest repair that landed just after the tag, in 05fc7ac and
7167080; the artifacts it verifies are the ones recomputed here.)