From eb6042f5683bae4382a67d768c2dcb31b9fd7962 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 6 Jan 2026 22:40:39 +0100 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20`signal`:=20improve=20`detrend`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scipy-stubs/signal/_signaltools.pyi | 49 ++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/scipy-stubs/signal/_signaltools.pyi b/scipy-stubs/signal/_signaltools.pyi index 2a1f0efe..7469e5f8 100644 --- a/scipy-stubs/signal/_signaltools.pyi +++ b/scipy-stubs/signal/_signaltools.pyi @@ -79,7 +79,6 @@ _FiltFiltMethod: TypeAlias = L["pad", "gust"] _ResidualKind: TypeAlias = L["lowpass", "all"] _FilterType: TypeAlias = L["iir", "fir"] | dlti -_F16_64: TypeAlias = np.float64 | np.float32 | np.float16 _C64_128: TypeAlias = np.complex128 | np.complex64 _ToResampleWindow: TypeAlias = Callable[[onp.Array1D[_InexactT]], onp.ToFloat1D] | onp.ToFloat1D | _ToWindow @@ -1009,19 +1008,55 @@ def hilbert2( ### -# TODO(jorenham): improve -@overload +# +@overload # f64 def detrend( - data: onp.ToFloatND, axis: int = -1, type: _TrendType = "linear", bp: int | onp.ToJustIntND = 0, overwrite_data: bool = False -) -> onp.ArrayND[_F16_64]: ... -@overload + data: onp.ToIntND | onp.ToJustFloat64_ND, + axis: int = -1, + type: _TrendType = "linear", + bp: int | onp.ToJustIntND = 0, + overwrite_data: bool = False, +) -> onp.ArrayND[np.float64]: ... +@overload # f16 +def detrend( + data: onp.ToJustFloat16_ND, + axis: int = -1, + type: _TrendType = "linear", + bp: int | onp.ToJustIntND = 0, + overwrite_data: bool = False, +) -> onp.ArrayND[np.float16]: ... +@overload # f32 +def detrend( + data: onp.ToJustFloat32_ND, + axis: int = -1, + type: _TrendType = "linear", + bp: int | onp.ToJustIntND = 0, + overwrite_data: bool = False, +) -> onp.ArrayND[np.float32]: ... +@overload # c64 +def detrend( + data: onp.ToJustComplex64_ND, + axis: int = -1, + type: _TrendType = "linear", + bp: int | onp.ToJustIntND = 0, + overwrite_data: bool = False, +) -> onp.ArrayND[np.complex128]: ... +@overload # c128 +def detrend( + data: onp.ToJustComplex128_ND, + axis: int = -1, + type: _TrendType = "linear", + bp: int | onp.ToJustIntND = 0, + overwrite_data: bool = False, +) -> onp.ArrayND[np.complex128]: ... +@overload # fallback def detrend( data: onp.ToComplexND, axis: int = -1, type: _TrendType = "linear", bp: int | onp.ToJustIntND = 0, overwrite_data: bool = False, -) -> onp.ArrayND[_C64_128 | _F16_64]: ... +) -> onp.ArrayND[Any]: ... # TODO(jorenham): improve @overload From 1b41f51d50c1ff18b2445066e024dc4e539a6a15 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 6 Jan 2026 22:44:20 +0100 Subject: [PATCH 2/4] =?UTF-8?q?=E2=9C=A8=20`signal`:=20improve=20`unique?= =?UTF-8?q?=5Froots`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scipy-stubs/signal/_signaltools.pyi | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/scipy-stubs/signal/_signaltools.pyi b/scipy-stubs/signal/_signaltools.pyi index 7469e5f8..3219228d 100644 --- a/scipy-stubs/signal/_signaltools.pyi +++ b/scipy-stubs/signal/_signaltools.pyi @@ -1058,15 +1058,19 @@ def detrend( overwrite_data: bool = False, ) -> onp.ArrayND[Any]: ... -# TODO(jorenham): improve -@overload +# +@overload # f64 def unique_roots( - p: onp.ToFloat1D, tol: float = 0.001, rtype: _ResidueType = "min" -) -> tuple[onp.Array1D[npc.floating], onp.Array1D[np.int_]]: ... -@overload + p: onp.ToInt1D | onp.ToJustFloat64_1D, tol: float = 0.001, rtype: _ResidueType = "min" +) -> tuple[onp.Array1D[np.float64], onp.Array1D[np.int_]]: ... +@overload # c128 +def unique_roots( + p: onp.ToJustComplex128_1D, tol: float = 0.001, rtype: _ResidueType = "min" +) -> tuple[onp.Array1D[np.complex128], onp.Array1D[np.int_]]: ... +@overload # T: inexact def unique_roots( - p: onp.ToComplex1D, tol: float = 0.001, rtype: _ResidueType = "min" -) -> tuple[onp.Array1D[npc.inexact], onp.Array1D[np.int_]]: ... + p: onp.ToArray1D[_InexactT, _InexactT], tol: float = 0.001, rtype: _ResidueType = "min" +) -> tuple[onp.Array1D[_InexactT], onp.Array1D[np.int_]]: ... # def residue( From 8156f55b8fe887729f0ee1d127b459f9fc5bc1db Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 6 Jan 2026 22:50:58 +0100 Subject: [PATCH 3/4] =?UTF-8?q?=E2=9C=A8=20`signal`:=20improve=20`decimate?= =?UTF-8?q?`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scipy-stubs/signal/_signaltools.pyi | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/scipy-stubs/signal/_signaltools.pyi b/scipy-stubs/signal/_signaltools.pyi index 3219228d..de0aa4b7 100644 --- a/scipy-stubs/signal/_signaltools.pyi +++ b/scipy-stubs/signal/_signaltools.pyi @@ -1281,15 +1281,28 @@ def resample_poly( cval: float | None = None, ) -> onp.ArrayND[Any, _WorkaroundForPyright]: ... -# TODO(jorenham): improve -@overload +# `float16` is upcast to `float64`, while `float32` (and `float64`) retain their dtype +@overload # f64 def decimate( - x: onp.ToFloatND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True -) -> onp.ArrayND[npc.floating]: ... -@overload + x: onp.ToArrayND[float, np.float64 | np.float16 | npc.integer | np.bool_], + q: int, + n: int | None = None, + ftype: _FilterType = "iir", + axis: int = -1, + zero_phase: bool = True, +) -> onp.ArrayND[np.float64]: ... +@overload # f32 def decimate( - x: onp.ToComplexND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True -) -> onp.ArrayND[npc.inexact]: ... + x: onp.ToJustFloat32_ND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True +) -> onp.ArrayND[np.float32]: ... +@overload # c128 +def decimate( + x: onp.ToJustComplex128_ND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True +) -> onp.ArrayND[np.complex128]: ... +@overload # c64 +def decimate( + x: onp.ToJustComplex64_ND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True +) -> onp.ArrayND[np.complex64]: ... # TODO(jorenham): improve @overload From 87d80b606f56fe71739df483f4bd337746c959af Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 6 Jan 2026 22:57:31 +0100 Subject: [PATCH 4/4] =?UTF-8?q?=E2=9C=A8=20`signal`:=20improve=20`vectorst?= =?UTF-8?q?rength`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scipy-stubs/signal/_signaltools.pyi | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scipy-stubs/signal/_signaltools.pyi b/scipy-stubs/signal/_signaltools.pyi index de0aa4b7..d86d6869 100644 --- a/scipy-stubs/signal/_signaltools.pyi +++ b/scipy-stubs/signal/_signaltools.pyi @@ -1304,15 +1304,11 @@ def decimate( x: onp.ToJustComplex64_ND, q: int, n: int | None = None, ftype: _FilterType = "iir", axis: int = -1, zero_phase: bool = True ) -> onp.ArrayND[np.complex64]: ... -# TODO(jorenham): improve -@overload -def vectorstrength(events: onp.ToFloat1D, period: onp.ToFloat) -> _Tuple2[npc.floating]: ... -@overload -def vectorstrength(events: onp.ToFloat1D, period: onp.ToFloat1D) -> _Tuple2[onp.Array1D[npc.floating]]: ... -@overload -def vectorstrength(events: onp.ToComplex1D, period: onp.ToComplex) -> _Tuple2[npc.inexact]: ... -@overload -def vectorstrength(events: onp.ToComplex1D, period: onp.ToComplex1D) -> _Tuple2[onp.Array1D[npc.inexact]]: ... +# complex periods are always cast to float64, and therefore not supported here +@overload # 0d +def vectorstrength(events: float | onp.ToFloat1D, period: float) -> _Tuple2[np.float64]: ... +@overload # 1d +def vectorstrength(events: float | onp.ToFloat1D, period: onp.ToFloat1D) -> _Tuple2[onp.Array1D[np.float64]]: ... # @overload