Skip to content

Commit 4da5adf

Browse files
committed
✨ slightly improved numpy.fft.[i]fftshift signatures
1 parent 51c1706 commit 4da5adf

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

src/numpy-stubs/fft/_helper.pyi

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,47 @@
1-
from typing import Any, Literal as L, overload
1+
from typing import Any, Final, Literal as L, TypeAlias, overload
22
from typing_extensions import TypeVar
33

44
import numpy as np
55
from numpy._typing import ArrayLike, NDArray, _ArrayLike, _ArrayLikeComplex_co, _ArrayLikeFloat_co, _ShapeLike
66

77
__all__ = ["fftfreq", "fftshift", "ifftshift", "rfftfreq"]
88

9-
_SCT = TypeVar("_SCT", bound=np.generic)
9+
###
10+
11+
_ScalarT = TypeVar("_ScalarT", bound=np.generic)
12+
13+
_Device: TypeAlias = L["cpu"] | None
14+
_IntLike: TypeAlias = int | np.integer
15+
16+
###
17+
18+
integer_types: Final[tuple[type[int], type[np.integer]]] = ...
19+
20+
###
1021

11-
#
1222
@overload
13-
def fftshift(x: _ArrayLike[_SCT], axes: _ShapeLike | None = ...) -> NDArray[_SCT]: ...
23+
def fftshift(x: _ArrayLike[_ScalarT], axes: _ShapeLike | None = None) -> NDArray[_ScalarT]: ...
1424
@overload
15-
def fftshift(x: ArrayLike, axes: _ShapeLike | None = ...) -> NDArray[Any]: ...
25+
def fftshift(x: _ArrayLikeFloat_co, axes: _ShapeLike | None = None) -> NDArray[np.floating]: ...
26+
@overload
27+
def fftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ...
1628

1729
#
1830
@overload
19-
def ifftshift(x: _ArrayLike[_SCT], axes: _ShapeLike | None = ...) -> NDArray[_SCT]: ...
31+
def ifftshift(x: _ArrayLike[_ScalarT], axes: _ShapeLike | None = None) -> NDArray[_ScalarT]: ...
32+
@overload
33+
def ifftshift(x: _ArrayLikeFloat_co, axes: _ShapeLike | None = None) -> NDArray[np.floating]: ...
2034
@overload
21-
def ifftshift(x: ArrayLike, axes: _ShapeLike | None = ...) -> NDArray[Any]: ...
35+
def ifftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ...
2236

2337
#
2438
@overload
25-
def fftfreq(n: int | np.integer, d: _ArrayLikeFloat_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.floating]: ...
39+
def fftfreq(n: _IntLike, d: _ArrayLikeFloat_co = 1.0, device: _Device = None) -> NDArray[np.floating]: ...
2640
@overload
27-
def fftfreq(n: int | np.integer, d: _ArrayLikeComplex_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.inexact]: ...
41+
def fftfreq(n: _IntLike, d: _ArrayLikeComplex_co = 1.0, device: _Device = None) -> NDArray[np.inexact]: ...
2842

2943
#
3044
@overload
31-
def rfftfreq(n: int | np.integer, d: _ArrayLikeFloat_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.floating]: ...
45+
def rfftfreq(n: _IntLike, d: _ArrayLikeFloat_co = 1.0, device: _Device = None) -> NDArray[np.floating]: ...
3246
@overload
33-
def rfftfreq(n: int | np.integer, d: _ArrayLikeComplex_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.inexact]: ...
47+
def rfftfreq(n: _IntLike, d: _ArrayLikeComplex_co = 1.0, device: _Device = None) -> NDArray[np.inexact]: ...

test/static/accept/fft.pyi

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from typing import Any
21
from typing_extensions import assert_type
32

43
import numpy as np
@@ -9,10 +8,10 @@ AR_c16: npt.NDArray[np.complex128]
98
AR_LIKE_f8: list[float]
109

1110
assert_type(np.fft.fftshift(AR_f8), npt.NDArray[np.float64])
12-
assert_type(np.fft.fftshift(AR_LIKE_f8, axes=0), npt.NDArray[Any])
11+
assert_type(np.fft.fftshift(AR_LIKE_f8, axes=0), npt.NDArray[np.floating])
1312

1413
assert_type(np.fft.ifftshift(AR_f8), npt.NDArray[np.float64])
15-
assert_type(np.fft.ifftshift(AR_LIKE_f8, axes=0), npt.NDArray[Any])
14+
assert_type(np.fft.ifftshift(AR_LIKE_f8, axes=0), npt.NDArray[np.floating])
1615

1716
assert_type(np.fft.fftfreq(5, AR_f8), npt.NDArray[np.floating])
1817
assert_type(np.fft.fftfreq(np.int64(), AR_c16), npt.NDArray[np.inexact])

0 commit comments

Comments
 (0)