From 0fb9f63dd0e98652bbb0abd0eb59fc5d3b3d0690 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Thu, 29 Jan 2026 11:25:57 -0500 Subject: [PATCH 01/19] Add initial stubs for resampy including core functionality and metadata --- stubs/resampy/METADATA.toml | 2 + stubs/resampy/resampy/__init__.pyi | 2 + stubs/resampy/resampy/core.pyi | 29 +++++++++++++ stubs/resampy/resampy/filters.pyi | 25 +++++++++++ stubs/resampy/resampy/interpn.pyi | 66 ++++++++++++++++++++++++++++++ stubs/resampy/resampy/version.pyi | 2 + 6 files changed, 126 insertions(+) create mode 100644 stubs/resampy/METADATA.toml create mode 100644 stubs/resampy/resampy/__init__.pyi create mode 100644 stubs/resampy/resampy/core.pyi create mode 100644 stubs/resampy/resampy/filters.pyi create mode 100644 stubs/resampy/resampy/interpn.pyi create mode 100644 stubs/resampy/resampy/version.pyi diff --git a/stubs/resampy/METADATA.toml b/stubs/resampy/METADATA.toml new file mode 100644 index 000000000000..eb832549ab13 --- /dev/null +++ b/stubs/resampy/METADATA.toml @@ -0,0 +1,2 @@ +version = "0.4.*" +upstream_repository = "https://github.com/bmcfee/resampy" diff --git a/stubs/resampy/resampy/__init__.pyi b/stubs/resampy/resampy/__init__.pyi new file mode 100644 index 000000000000..92d287f8a8fb --- /dev/null +++ b/stubs/resampy/resampy/__init__.pyi @@ -0,0 +1,2 @@ +from . import filters as filters +from .core import * diff --git a/stubs/resampy/resampy/core.pyi b/stubs/resampy/resampy/core.pyi new file mode 100644 index 000000000000..83a0da5fe2a9 --- /dev/null +++ b/stubs/resampy/resampy/core.pyi @@ -0,0 +1,29 @@ +from collections.abc import Callable +from typing import Any +from typing_extensions import TypeAlias, TypeVar + +import numpy as np + +__all__ = ["resample", "resample_nu"] + +_FloatArray = TypeVar("_FloatArray", bound=np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]]) +_FilterType: TypeAlias = str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] + +def resample( + x: _FloatArray, + sr_orig: float, + sr_new: float, + axis: int = -1, + filter: _FilterType = "kaiser_best", + parallel: bool = False, + **kwargs: Any, +) -> _FloatArray: ... +def resample_nu( + x: _FloatArray, + sr_orig: float, + t_out: _FloatArray, + axis: int = -1, + filter: _FilterType = "kaiser_best", + parallel: bool = False, + **kwargs: Any, +) -> _FloatArray: ... diff --git a/stubs/resampy/resampy/filters.pyi b/stubs/resampy/resampy/filters.pyi new file mode 100644 index 000000000000..2ea4688451c4 --- /dev/null +++ b/stubs/resampy/resampy/filters.pyi @@ -0,0 +1,25 @@ +from collections.abc import Callable +from typing import Any + +import numpy as np + +__all__ = ["get_filter", "clear_cache", "sinc_window"] + +# Dictionary to cache loaded filters +FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] = {} + +# List of filter functions available +FILTER_FUNCTIONS: list[str] = ["sinc_window"] + +def sinc_window( + num_zeros: int = 64, + precision: int = 9, + window: Callable[..., np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]]] | None = None, + rolloff: float = 0.945, +) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... +def get_filter( + name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]], + **kwargs: Any, +) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... +def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... +def clear_cache() -> None: ... diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi new file mode 100644 index 000000000000..13765dc6dba3 --- /dev/null +++ b/stubs/resampy/resampy/interpn.pyi @@ -0,0 +1,66 @@ +from typing import Any + +import numba +import numpy as np +from numba import guvectorize + +def _resample_loop( + x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + num_table: int, + scale: float, + y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], +) -> None: ... + +# JIT-compiled parallel version of _resample_loop +_resample_loop_p = ... + +# JIT-compiled sequential version of _resample_loop +_resample_loop_s = ... + +@guvectorize( + ( + numba.float32[:, :, :], + numba.float32[:, :], + numba.float32[:], + numba.float32[:], + numba.int32, + numba.float32, + numba.float32[:, :], + ), + "(n),(m),(p),(p),(),()->(m)", + nopython=True, +) +def resample_f_p( + x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + num_table: int, + scale: float, + y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], +) -> None: ... +@guvectorize( + ( + numba.float32[:, :, :], + numba.float32[:, :], + numba.float32[:], + numba.float32[:], + numba.int32, + numba.float32, + numba.float32[:, :], + ), + "(n),(m),(p),(p),(),()->(m)", + nopython=True, +) +def resample_f_s( + x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + num_table: int, + scale: float, + y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], +) -> None: ... diff --git a/stubs/resampy/resampy/version.pyi b/stubs/resampy/resampy/version.pyi new file mode 100644 index 000000000000..ce09f8d9b25d --- /dev/null +++ b/stubs/resampy/resampy/version.pyi @@ -0,0 +1,2 @@ +short_version: str +version: str From c910ff9462bffbe3cf492275487883b53bffb4a8 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Thu, 29 Jan 2026 15:48:29 -0500 Subject: [PATCH 02/19] METADATA: add requires --- stubs/resampy/METADATA.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/stubs/resampy/METADATA.toml b/stubs/resampy/METADATA.toml index eb832549ab13..d09e841b4347 100644 --- a/stubs/resampy/METADATA.toml +++ b/stubs/resampy/METADATA.toml @@ -1,2 +1,3 @@ version = "0.4.*" upstream_repository = "https://github.com/bmcfee/resampy" +requires = ["numba", "numpy"] From 4f8383c57b0bb4e8698bb8d5d6d517762b9cadee Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:44:50 -0500 Subject: [PATCH 03/19] Update stubs/resampy/METADATA.toml Co-authored-by: Semyon Moroz --- stubs/resampy/METADATA.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stubs/resampy/METADATA.toml b/stubs/resampy/METADATA.toml index d09e841b4347..fc703115ffa8 100644 --- a/stubs/resampy/METADATA.toml +++ b/stubs/resampy/METADATA.toml @@ -1,3 +1,4 @@ version = "0.4.*" upstream_repository = "https://github.com/bmcfee/resampy" -requires = ["numba", "numpy"] +# Requires a version of numpy with a `py.typed` file +requires = ["numpy>=1.20"] From 3b0c8f888962c59354c52347bbff67940f99c93e Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:45:06 -0500 Subject: [PATCH 04/19] Update stubs/resampy/resampy/version.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/version.pyi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stubs/resampy/resampy/version.pyi b/stubs/resampy/resampy/version.pyi index ce09f8d9b25d..24179934d795 100644 --- a/stubs/resampy/resampy/version.pyi +++ b/stubs/resampy/resampy/version.pyi @@ -1,2 +1,4 @@ -short_version: str -version: str +from typing import Final + +short_version: Final[str] +version: Final[str] From 2801ee472f3e4c47c31f1a4935e291ea037727f0 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:45:28 -0500 Subject: [PATCH 05/19] Update stubs/resampy/resampy/__init__.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/__init__.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stubs/resampy/resampy/__init__.pyi b/stubs/resampy/resampy/__init__.pyi index 92d287f8a8fb..d92b3a5de56e 100644 --- a/stubs/resampy/resampy/__init__.pyi +++ b/stubs/resampy/resampy/__init__.pyi @@ -1,2 +1,3 @@ +from .version import version as __version__ from . import filters as filters from .core import * From 541d8e843e5ee697608417f2f98448fb339223db Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:46:43 -0500 Subject: [PATCH 06/19] Update stubs/resampy/resampy/filters.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/filters.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/resampy/resampy/filters.pyi b/stubs/resampy/resampy/filters.pyi index 2ea4688451c4..bdaf8c9795a9 100644 --- a/stubs/resampy/resampy/filters.pyi +++ b/stubs/resampy/resampy/filters.pyi @@ -6,10 +6,10 @@ import numpy as np __all__ = ["get_filter", "clear_cache", "sinc_window"] # Dictionary to cache loaded filters -FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] = {} +FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] # List of filter functions available -FILTER_FUNCTIONS: list[str] = ["sinc_window"] +FILTER_FUNCTIONS: list[str] def sinc_window( num_zeros: int = 64, From 52b6063025ae158ddcc4b86080f2d17c0d11f5c2 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:47:43 -0500 Subject: [PATCH 07/19] Update stubs/resampy/resampy/interpn.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/interpn.pyi | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index 13765dc6dba3..046b50289bd8 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -20,19 +20,6 @@ _resample_loop_p = ... # JIT-compiled sequential version of _resample_loop _resample_loop_s = ... -@guvectorize( - ( - numba.float32[:, :, :], - numba.float32[:, :], - numba.float32[:], - numba.float32[:], - numba.int32, - numba.float32, - numba.float32[:, :], - ), - "(n),(m),(p),(p),(),()->(m)", - nopython=True, -) def resample_f_p( x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], @@ -42,19 +29,6 @@ def resample_f_p( scale: float, y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], ) -> None: ... -@guvectorize( - ( - numba.float32[:, :, :], - numba.float32[:, :], - numba.float32[:], - numba.float32[:], - numba.int32, - numba.float32, - numba.float32[:, :], - ), - "(n),(m),(p),(p),(),()->(m)", - nopython=True, -) def resample_f_s( x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], From a6ecd3c38d7760d6acebde03ea725389af76b05c Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Fri, 30 Jan 2026 23:47:50 -0500 Subject: [PATCH 08/19] Update stubs/resampy/resampy/interpn.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/interpn.pyi | 2 -- 1 file changed, 2 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index 046b50289bd8..b2cfc0b0f165 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -1,8 +1,6 @@ from typing import Any -import numba import numpy as np -from numba import guvectorize def _resample_loop( x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], From d0405af65c70f59ea9dfc9af2afc61988de7e0d3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 31 Jan 2026 04:50:50 +0000 Subject: [PATCH 09/19] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/resampy/resampy/__init__.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/stubs/resampy/resampy/__init__.pyi b/stubs/resampy/resampy/__init__.pyi index d92b3a5de56e..92d287f8a8fb 100644 --- a/stubs/resampy/resampy/__init__.pyi +++ b/stubs/resampy/resampy/__init__.pyi @@ -1,3 +1,2 @@ -from .version import version as __version__ from . import filters as filters from .core import * From e1c3fd0e12881c36611d558b4b73c83ec36c88a8 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 01:17:08 -0500 Subject: [PATCH 10/19] Create stubtest_allowlist.txt --- stubs/resampy/@tests/stubtest_allowlist.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 stubs/resampy/@tests/stubtest_allowlist.txt diff --git a/stubs/resampy/@tests/stubtest_allowlist.txt b/stubs/resampy/@tests/stubtest_allowlist.txt new file mode 100644 index 000000000000..38f34f4b449b --- /dev/null +++ b/stubs/resampy/@tests/stubtest_allowlist.txt @@ -0,0 +1,2 @@ +resampy.interpn.resample_f_p +resampy.interpn.resample_f_s From 1f86e1741ce288988bac83c0889b953d4e744ede Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 21:15:15 -0500 Subject: [PATCH 11/19] Update stubs/resampy/resampy/core.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/core.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/resampy/resampy/core.pyi b/stubs/resampy/resampy/core.pyi index 83a0da5fe2a9..e02169c5ebe4 100644 --- a/stubs/resampy/resampy/core.pyi +++ b/stubs/resampy/resampy/core.pyi @@ -6,8 +6,8 @@ import numpy as np __all__ = ["resample", "resample_nu"] -_FloatArray = TypeVar("_FloatArray", bound=np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]]) -_FilterType: TypeAlias = str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] +_FloatArray = TypeVar("_FloatArray", bound=np.ndarray[tuple[int, ...], np.dtype[np.floating]]) +_FilterType: TypeAlias = str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]] def resample( x: _FloatArray, From e6c29a6bd1175df3128d1de0a4b6d28ebe08db62 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 21:15:51 -0500 Subject: [PATCH 12/19] Update stubs/resampy/resampy/filters.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/filters.pyi | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/stubs/resampy/resampy/filters.pyi b/stubs/resampy/resampy/filters.pyi index bdaf8c9795a9..457f4890093f 100644 --- a/stubs/resampy/resampy/filters.pyi +++ b/stubs/resampy/resampy/filters.pyi @@ -6,7 +6,7 @@ import numpy as np __all__ = ["get_filter", "clear_cache", "sinc_window"] # Dictionary to cache loaded filters -FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] +FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]] # List of filter functions available FILTER_FUNCTIONS: list[str] @@ -14,12 +14,12 @@ FILTER_FUNCTIONS: list[str] def sinc_window( num_zeros: int = 64, precision: int = 9, - window: Callable[..., np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]]] | None = None, + window: Callable[..., np.ndarray[tuple[int, ...], np.dtype[np.floating]]] | None = None, rolloff: float = 0.945, -) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... +) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... def get_filter( - name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]], - **kwargs: Any, -) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... -def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ... + name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]], + **kwargs, +) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... +def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... def clear_cache() -> None: ... From 930e97118dc46e818d3d2e78771ba9835a3fdd30 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 21:16:14 -0500 Subject: [PATCH 13/19] Update stubs/resampy/resampy/interpn.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/interpn.pyi | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index b2cfc0b0f165..f8de24fc40ec 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -19,20 +19,20 @@ _resample_loop_p = ... _resample_loop_s = ... def resample_f_p( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], num_table: int, scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], ) -> None: ... def resample_f_s( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], num_table: int, scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], ) -> None: ... From 7158cefcfa322f9aa369b7c24ab7c3c780da013b Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 21:17:00 -0500 Subject: [PATCH 14/19] Update stubs/resampy/resampy/interpn.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/interpn.pyi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index f8de24fc40ec..b5160f46cc6f 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -3,13 +3,13 @@ from typing import Any import numpy as np def _resample_loop( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], + interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], num_table: int, scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], + y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], ) -> None: ... # JIT-compiled parallel version of _resample_loop From 48f39967c23d487b3228f048fc204da149ccb664 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 02:19:39 +0000 Subject: [PATCH 15/19] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/resampy/resampy/filters.pyi | 4 +--- stubs/resampy/resampy/interpn.pyi | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/stubs/resampy/resampy/filters.pyi b/stubs/resampy/resampy/filters.pyi index 457f4890093f..e17f0685b46b 100644 --- a/stubs/resampy/resampy/filters.pyi +++ b/stubs/resampy/resampy/filters.pyi @@ -1,5 +1,4 @@ from collections.abc import Callable -from typing import Any import numpy as np @@ -18,8 +17,7 @@ def sinc_window( rolloff: float = 0.945, ) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... def get_filter( - name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]], - **kwargs, + name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]], **kwargs ) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... def clear_cache() -> None: ... diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index b5160f46cc6f..4dacdefe1273 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -1,5 +1,3 @@ -from typing import Any - import numpy as np def _resample_loop( From bbbbbd5add4f240e830eb39e4ec8069bb55eac64 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 31 Jan 2026 21:51:52 -0500 Subject: [PATCH 16/19] Update stubs/resampy/resampy/interpn.pyi Co-authored-by: Semyon Moroz --- stubs/resampy/resampy/interpn.pyi | 7 ------- 1 file changed, 7 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index 4dacdefe1273..4a1b389a190d 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -9,13 +9,6 @@ def _resample_loop( scale: float, y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], ) -> None: ... - -# JIT-compiled parallel version of _resample_loop -_resample_loop_p = ... - -# JIT-compiled sequential version of _resample_loop -_resample_loop_s = ... - def resample_f_p( x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], From 5796fdedb8df72bdd2dec540bde60db218f2881e Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sun, 1 Feb 2026 00:01:03 -0500 Subject: [PATCH 17/19] Better filter typing. Real kwargs types. --- stubs/resampy/resampy/core.pyi | 17 ++++++++++++----- stubs/resampy/resampy/filters.pyi | 22 ++++++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/stubs/resampy/resampy/core.pyi b/stubs/resampy/resampy/core.pyi index e02169c5ebe4..5d13c9ba241c 100644 --- a/stubs/resampy/resampy/core.pyi +++ b/stubs/resampy/resampy/core.pyi @@ -1,13 +1,20 @@ from collections.abc import Callable -from typing import Any -from typing_extensions import TypeAlias, TypeVar +from typing import TypedDict, type_check_only +from typing_extensions import TypeAlias, TypeVar, Unpack import numpy as np __all__ = ["resample", "resample_nu"] _FloatArray = TypeVar("_FloatArray", bound=np.ndarray[tuple[int, ...], np.dtype[np.floating]]) -_FilterType: TypeAlias = str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]] + +_FilterType: TypeAlias = str | Callable[[int], np.ndarray[tuple[int], np.dtype[np.float64]]] + +@type_check_only +class _FilterKwArgs(TypedDict, total=False): + num_zeros: int + precision: int + rolloff: float def resample( x: _FloatArray, @@ -16,7 +23,7 @@ def resample( axis: int = -1, filter: _FilterType = "kaiser_best", parallel: bool = False, - **kwargs: Any, + **kwargs: Unpack[_FilterKwArgs], ) -> _FloatArray: ... def resample_nu( x: _FloatArray, @@ -25,5 +32,5 @@ def resample_nu( axis: int = -1, filter: _FilterType = "kaiser_best", parallel: bool = False, - **kwargs: Any, + **kwargs: Unpack[_FilterKwArgs], ) -> _FloatArray: ... diff --git a/stubs/resampy/resampy/filters.pyi b/stubs/resampy/resampy/filters.pyi index e17f0685b46b..fc391dd0054a 100644 --- a/stubs/resampy/resampy/filters.pyi +++ b/stubs/resampy/resampy/filters.pyi @@ -1,23 +1,33 @@ from collections.abc import Callable +from typing import TypedDict, type_check_only +from typing_extensions import TypeAlias, Unpack import numpy as np __all__ = ["get_filter", "clear_cache", "sinc_window"] # Dictionary to cache loaded filters -FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]] +FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int], np.dtype[np.float64]], int, float]] # List of filter functions available FILTER_FUNCTIONS: list[str] +_FilterType: TypeAlias = str | Callable[[int], np.ndarray[tuple[int], np.dtype[np.float64]]] + +@type_check_only +class _FilterKwArgs(TypedDict, total=False): + num_zeros: int + precision: int + rolloff: float + def sinc_window( num_zeros: int = 64, precision: int = 9, - window: Callable[..., np.ndarray[tuple[int, ...], np.dtype[np.floating]]] | None = None, + window: Callable[[int], np.ndarray[tuple[int], np.dtype[np.float64]]] | None = None, rolloff: float = 0.945, -) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... +) -> tuple[np.ndarray[tuple[int], np.dtype[np.float64]], int, float]: ... def get_filter( - name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]], **kwargs -) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... -def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating]], int, float]: ... + name_or_function: _FilterType, **kwargs: Unpack[_FilterKwArgs] +) -> tuple[np.ndarray[tuple[int], np.dtype[np.float64]], int, float]: ... +def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int], np.dtype[np.float64]], int, float]: ... def clear_cache() -> None: ... From 84782b7680768b8b813d2de70ca89f5f6c2defe6 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sun, 1 Feb 2026 00:26:25 -0500 Subject: [PATCH 18/19] Remove internal API: `_resample_loop`. --- stubs/resampy/resampy/interpn.pyi | 9 --------- 1 file changed, 9 deletions(-) diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index 4a1b389a190d..2ebde7d9b7df 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -1,14 +1,5 @@ import numpy as np -def _resample_loop( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - num_table: int, - scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], -) -> None: ... def resample_f_p( x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], From f308524863efd45977dafbc4048fd6946d2fa084 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sun, 1 Feb 2026 00:56:45 -0500 Subject: [PATCH 19/19] Remove internal API. --- stubs/resampy/@tests/stubtest_allowlist.txt | 1 + stubs/resampy/resampy/interpn.pyi | 21 +-------------------- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/stubs/resampy/@tests/stubtest_allowlist.txt b/stubs/resampy/@tests/stubtest_allowlist.txt index 38f34f4b449b..0f1a287ded50 100644 --- a/stubs/resampy/@tests/stubtest_allowlist.txt +++ b/stubs/resampy/@tests/stubtest_allowlist.txt @@ -1,2 +1,3 @@ +# The functions are part of the internal API. resampy.interpn.resample_f_p resampy.interpn.resample_f_s diff --git a/stubs/resampy/resampy/interpn.pyi b/stubs/resampy/resampy/interpn.pyi index 2ebde7d9b7df..37c2f6a9c89a 100644 --- a/stubs/resampy/resampy/interpn.pyi +++ b/stubs/resampy/resampy/interpn.pyi @@ -1,20 +1 @@ -import numpy as np - -def resample_f_p( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - num_table: int, - scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], -) -> None: ... -def resample_f_s( - x: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating]], - num_table: int, - scale: float, - y: np.ndarray[tuple[int, ...], np.dtype[np.floating]], -) -> None: ... +# [This page intentionally left blank.]