Performance & correctness
validation.py: replacedscipy.ndimage.generic_filterwith asliding_window_view-based local median inlocal_median_val/local_norm_median_val(~48x faster, identical results).lib.py: vectorizedreplace_nanswithsliding_window_view. This also fixes a latent bug where the convergence check aliasedreplaced_oldtoreplaced_newinstead of copying it, silently capping outlier inpainting to ~2 passes regardless ofmax_iter.pyprocess.py: switched the FFT cross-correlation path fromnumpy.ffttoscipy.fft— ~2-3x faster, bit-identical results, no new dependency.settings.py:use_vectorizednow defaults toTrue(verified numerically equivalent, ~30% faster);PIVSettings.__post_init__validateswindowsizes/overlapconsistency instead of failing deep insidewindef.
Cumulative effect on the bundled 4-pass multipass tutorial: ~4.5s -> ~1.5s.
Full Changelog: v0.25.4...v0.25.5