Skip to content

Commit 0fb9f63

Browse files
committed
Add initial stubs for resampy including core functionality and metadata
1 parent 5fead6a commit 0fb9f63

6 files changed

Lines changed: 126 additions & 0 deletions

File tree

stubs/resampy/METADATA.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version = "0.4.*"
2+
upstream_repository = "https://github.com/bmcfee/resampy"

stubs/resampy/resampy/__init__.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import filters as filters
2+
from .core import *

stubs/resampy/resampy/core.pyi

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from collections.abc import Callable
2+
from typing import Any
3+
from typing_extensions import TypeAlias, TypeVar
4+
5+
import numpy as np
6+
7+
__all__ = ["resample", "resample_nu"]
8+
9+
_FloatArray = TypeVar("_FloatArray", bound=np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]])
10+
_FilterType: TypeAlias = str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]]
11+
12+
def resample(
13+
x: _FloatArray,
14+
sr_orig: float,
15+
sr_new: float,
16+
axis: int = -1,
17+
filter: _FilterType = "kaiser_best",
18+
parallel: bool = False,
19+
**kwargs: Any,
20+
) -> _FloatArray: ...
21+
def resample_nu(
22+
x: _FloatArray,
23+
sr_orig: float,
24+
t_out: _FloatArray,
25+
axis: int = -1,
26+
filter: _FilterType = "kaiser_best",
27+
parallel: bool = False,
28+
**kwargs: Any,
29+
) -> _FloatArray: ...

stubs/resampy/resampy/filters.pyi

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections.abc import Callable
2+
from typing import Any
3+
4+
import numpy as np
5+
6+
__all__ = ["get_filter", "clear_cache", "sinc_window"]
7+
8+
# Dictionary to cache loaded filters
9+
FILTER_CACHE: dict[str, tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]] = {}
10+
11+
# List of filter functions available
12+
FILTER_FUNCTIONS: list[str] = ["sinc_window"]
13+
14+
def sinc_window(
15+
num_zeros: int = 64,
16+
precision: int = 9,
17+
window: Callable[..., np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]]] | None = None,
18+
rolloff: float = 0.945,
19+
) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ...
20+
def get_filter(
21+
name_or_function: str | Callable[..., tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]],
22+
**kwargs: Any,
23+
) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ...
24+
def load_filter(filter_name: str) -> tuple[np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]], int, float]: ...
25+
def clear_cache() -> None: ...

stubs/resampy/resampy/interpn.pyi

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from typing import Any
2+
3+
import numba
4+
import numpy as np
5+
from numba import guvectorize
6+
7+
def _resample_loop(
8+
x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
9+
t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
10+
interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
11+
interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
12+
num_table: int,
13+
scale: float,
14+
y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
15+
) -> None: ...
16+
17+
# JIT-compiled parallel version of _resample_loop
18+
_resample_loop_p = ...
19+
20+
# JIT-compiled sequential version of _resample_loop
21+
_resample_loop_s = ...
22+
23+
@guvectorize(
24+
(
25+
numba.float32[:, :, :],
26+
numba.float32[:, :],
27+
numba.float32[:],
28+
numba.float32[:],
29+
numba.int32,
30+
numba.float32,
31+
numba.float32[:, :],
32+
),
33+
"(n),(m),(p),(p),(),()->(m)",
34+
nopython=True,
35+
)
36+
def resample_f_p(
37+
x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
38+
t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
39+
interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
40+
interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
41+
num_table: int,
42+
scale: float,
43+
y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
44+
) -> None: ...
45+
@guvectorize(
46+
(
47+
numba.float32[:, :, :],
48+
numba.float32[:, :],
49+
numba.float32[:],
50+
numba.float32[:],
51+
numba.int32,
52+
numba.float32,
53+
numba.float32[:, :],
54+
),
55+
"(n),(m),(p),(p),(),()->(m)",
56+
nopython=True,
57+
)
58+
def resample_f_s(
59+
x: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
60+
t_out: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
61+
interp_win: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
62+
interp_delta: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
63+
num_table: int,
64+
scale: float,
65+
y: np.ndarray[tuple[int, ...], np.dtype[np.floating[Any]]],
66+
) -> None: ...

stubs/resampy/resampy/version.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
short_version: str
2+
version: str

0 commit comments

Comments
 (0)