Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-scipy for openSUSE:Factory checked in at 2026-08-01 18:27:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-scipy (Old) and /work/SRC/openSUSE:Factory/.python-scipy.new.16738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-scipy" Sat Aug 1 18:27:49 2026 rev:88 rq:1368189 version:1.18.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-scipy/python-scipy.changes 2026-07-22 19:01:09.280926683 +0200 +++ /work/SRC/openSUSE:Factory/.python-scipy.new.16738/python-scipy.changes 2026-08-01 18:28:23.561876079 +0200 @@ -1,0 +2,6 @@ +Tue Jul 28 08:56:29 UTC 2026 - Guillaume GARDET <[email protected]> + +- Add patch to fix tests on aarch64: + * scipy-25571.patch + +------------------------------------------------------------------- New: ---- scipy-25571.patch ----------(New B)---------- New:- Add patch to fix tests on aarch64: * scipy-25571.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-scipy.spec ++++++ --- /var/tmp/diff_new_pack.dZIMxG/_old 2026-08-01 18:28:25.189931693 +0200 +++ /var/tmp/diff_new_pack.dZIMxG/_new 2026-08-01 18:28:25.189931693 +0200 @@ -54,6 +54,8 @@ Source0: https://files.pythonhosted.org/packages/source/s/scipy/scipy-%{version}.tar.gz # Create with pooch: `python3 scipy-%%{version}/scipy/datasets/_download_all.py scipy-datasets/scipy-data; tar czf scipy-datasets.tar.gz scipy-datasets` Source1: scipy-datasets.tar.gz +# PATCH-FIX-UPSTREAM - https://github.com/scipy/scipy/pull/25571 +Patch0: scipy-25571.patch BuildRequires: %{python_module Cython >= 3.2.0} BuildRequires: %{python_module devel >= 3.12} BuildRequires: %{python_module meson-python >= 0.15.0 with %python-meson-python < 0.22} ++++++ scipy-25571.patch ++++++ >From 5cd79b026a26e1d0cd0812d394f7dec4606f7900 Mon Sep 17 00:00:00 2001 From: wasimat404 <[email protected]> Date: Sun, 5 Jul 2026 08:21:01 +0000 Subject: [PATCH] TST: loosen signal test tolerances for FMA-contraction builds Tests fail under -march=znver5/skylake builds where FMA contraction changes floating-point rounding. Bump test_nyquist float32 atol to 2e-5, apply the float32 istft roundtrip tolerance regardless of platform since the drift is dtype-driven rather than i686-specific (also seen on aarch64, gh-25488), and give test_roundtrip_scaling an absolute tolerance since it compares against exact zeros where rtol has no effect. --- scipy/signal/tests/_scipy_spectral_test_shim.py | 10 +++++----- scipy/signal/tests/test_fir_filter_design.py | 2 +- scipy/signal/tests/test_spectral.py | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scipy/signal/tests/_scipy_spectral_test_shim.py b/scipy/signal/tests/_scipy_spectral_test_shim.py index 90bf71879aca..33bde3b8ddd8 100644 --- a/scipy/signal/tests/_scipy_spectral_test_shim.py +++ b/scipy/signal/tests/_scipy_spectral_test_shim.py @@ -17,7 +17,6 @@ wrappers highlight the different philosophies of the implementations, especially in the border handling. """ -import platform from typing import cast, Literal import numpy as np @@ -296,10 +295,11 @@ def istft_compare(Zxx, fs=1.0, window='hann', nperseg=None, noverlap=None, atol = np.finfo(x.dtype).resolution*2 # instead of default atol = 0 rtol = 1e-7 # default for np.allclose() - # Relax atol on 32-Bit platforms a bit to pass CI tests. - # - Not clear why there are discrepancies (in the FFT maybe?) - # - Not sure what changed on 'i686' since earlier on those test passed - if x.dtype == np.float32 and platform.machine() == 'i686': + # Relax tolerances for float32, which loses precision in the FFT + # roundtrip. Originally observed on i686; also seen on aarch64 and on + # builds using FMA contraction (gh-25488), so the drift is dtype-driven + # rather than platform-specific. + if x.dtype == np.float32: # float32 gets only used by TestSTFT.test_roundtrip_float32() so # we are using the tolerances from there to circumvent CI problems atol, rtol = 1e-4, 1e-5 diff --git a/scipy/signal/tests/test_fir_filter_design.py b/scipy/signal/tests/test_fir_filter_design.py index bec6f21d485f..aee4cb1ef751 100644 --- a/scipy/signal/tests/test_fir_filter_design.py +++ b/scipy/signal/tests/test_fir_filter_design.py @@ -770,7 +770,7 @@ def test_nyquist(self, N, dtype, xp): H_mag = xp.abs(rfft(h, N)) H_min_mag = xp.abs(rfft(h_min_sig, N)) error = H_mag - H_min_mag - atol = dict(float32=1e-5, float64=1e-13)[dtype] + atol = dict(float32=2e-5, float64=1e-13)[dtype] xp_assert_close(error, xp.zeros_like(error), atol=atol) diff --git a/scipy/signal/tests/test_spectral.py b/scipy/signal/tests/test_spectral.py index 54ecb4c45206..6194e5cc466e 100644 --- a/scipy/signal/tests/test_spectral.py +++ b/scipy/signal/tests/test_spectral.py @@ -1942,7 +1942,7 @@ def test_roundtrip_scaling(self): # Test round trip: x1 = istft(Zs, boundary=True, scaling='spectrum')[1] - assert_allclose(x1, x) + assert_allclose(x1, x, atol=np.finfo(x.dtype).resolution) # For a Hann-windowed 256 sample length FFT, we expect a peak at # frequency 64 (since it is 1/4 the length of X) with a height of 1 @@ -1972,7 +1972,7 @@ def test_roundtrip_scaling(self): # Test round trip: x1 = istft(Zp, input_onesided=False, boundary=True, scaling='psd')[1] - assert_allclose(x1, x) + assert_allclose(x1, x, atol=np.finfo(x.dtype).resolution) # The power of the one-sided psd-scaled STFT can be determined # analogously (note that the two sides are not of equal shape): @@ -1992,7 +1992,7 @@ def test_roundtrip_scaling(self): # Test round trip: x1 = istft(Zp0, input_onesided=True, boundary=True, scaling='psd')[1] - assert_allclose(x1, x) + assert_allclose(x1, x, atol=np.finfo(x.dtype).resolution) class TestSampledSpectralRepresentations:
