Files
dotfiles/overlays/patches/scipy/README.md
T

71 lines
2.8 KiB
Markdown

# SciPy STFT test tolerances
The x86-64-v3 build can produce small floating-point residuals in inverse-STFT
comparisons and scaling round trips. The original bounds reject these results,
including residuals around `4e-17` where a round trip expects zero for a signal
with amplitude 2.
## Scope and behavior
`stft-test-tolerances.patch` changes only the signal tests:
- The inverse-STFT comparison in `_scipy_spectral_test_shim.py` uses
`max(1e-7, 2 * np.finfo(x.dtype).eps)` as its relative tolerance. Float64
keeps the original bound, and the existing i686 override remains.
- Three scaling round trips in `test_spectral.py` gain an absolute tolerance
of one epsilon for the input dtype, allowing small residuals near zero.
The tests remain enabled, and the production STFT implementation is unchanged.
## Reproduction and focused checks
From this directory, apply the patch to a disposable SciPy 1.18.0 checkout:
```sh
patch --fuzz=0 -d /path/to/scipy -p1 < stft-test-tolerances.patch
```
Build and install that tree with SciPy's test dependencies. From outside the
source directory, run the installed tests:
```sh
python -m pytest --pyargs scipy.signal.tests.test_spectral \
-k 'roundtrip_float32 or roundtrip_scaling' -q
```
Use the same compiler flags and numerical libraries for before/after runs.
The earlier reproduction called `TestSTFT.test_roundtrip_float32` and
`TestSTFT.test_roundtrip_scaling` against the x86-64-v3 libraries, then loaded
patched copies of the test modules. Both failed with the original bounds
and passed with the adjusted bounds.
## Upstream status
[SciPy issue #25488](https://github.com/scipy/scipy/issues/25488) records
related test failures with architecture-specific compiler flags. It is
context for the local tolerance repair; this exact patch has not been
submitted upstream during this work.
## Local NixOS integration and build results
[`../default.nix`](../default.nix) loads [`default.nix`](default.nix) through
`pythonPackagesExtensions`, preserving the package's existing patches.
The override also covers SciPy used to test other Python dependencies,
including pgvector in portal's shared Python environment.
From the repository root:
```sh
nix build --no-link -L .#nixosConfigurations.portal-1.pkgs.python314Packages.scipy
```
The original remote build of patched SciPy 1.18.0 passed 87,723 tests, with
8,342 skips, 300 expected failures, and 22 unexpected passes. The patch and
override have been restored byte-for-byte from commit `24cbf74f`; those counts
describe the earlier full build.
Restoration checks confirmed that the patch applies to the pinned source
without fuzz, portal's evaluated SciPy retains its existing patch and install
checks, and pgvector uses the patched SciPy. A full package or system rebuild
was not repeated for this restoration.