diff --git a/src/numpy-stubs/fft/_helper.pyi b/src/numpy-stubs/fft/_helper.pyi index 224b566d..690619ff 100644 --- a/src/numpy-stubs/fft/_helper.pyi +++ b/src/numpy-stubs/fft/_helper.pyi @@ -1,4 +1,4 @@ -from typing import Any, Literal as L, overload +from typing import Any, Final, Literal as L, TypeAlias, overload from typing_extensions import TypeVar import numpy as np @@ -6,28 +6,42 @@ from numpy._typing import ArrayLike, NDArray, _ArrayLike, _ArrayLikeComplex_co, __all__ = ["fftfreq", "fftshift", "ifftshift", "rfftfreq"] -_SCT = TypeVar("_SCT", bound=np.generic) +### + +_ScalarT = TypeVar("_ScalarT", bound=np.generic) + +_Device: TypeAlias = L["cpu"] | None +_IntLike: TypeAlias = int | np.integer + +### + +integer_types: Final[tuple[type[int], type[np.integer]]] = ... + +### -# @overload -def fftshift(x: _ArrayLike[_SCT], axes: _ShapeLike | None = ...) -> NDArray[_SCT]: ... +def fftshift(x: _ArrayLike[_ScalarT], axes: _ShapeLike | None = None) -> NDArray[_ScalarT]: ... @overload -def fftshift(x: ArrayLike, axes: _ShapeLike | None = ...) -> NDArray[Any]: ... +def fftshift(x: _ArrayLikeFloat_co, axes: _ShapeLike | None = None) -> NDArray[np.floating]: ... +@overload +def fftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ... # @overload -def ifftshift(x: _ArrayLike[_SCT], axes: _ShapeLike | None = ...) -> NDArray[_SCT]: ... +def ifftshift(x: _ArrayLike[_ScalarT], axes: _ShapeLike | None = None) -> NDArray[_ScalarT]: ... +@overload +def ifftshift(x: _ArrayLikeFloat_co, axes: _ShapeLike | None = None) -> NDArray[np.floating]: ... @overload -def ifftshift(x: ArrayLike, axes: _ShapeLike | None = ...) -> NDArray[Any]: ... +def ifftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ... # @overload -def fftfreq(n: int | np.integer, d: _ArrayLikeFloat_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.floating]: ... +def fftfreq(n: _IntLike, d: _ArrayLikeFloat_co = 1.0, device: _Device = None) -> NDArray[np.floating]: ... @overload -def fftfreq(n: int | np.integer, d: _ArrayLikeComplex_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.inexact]: ... +def fftfreq(n: _IntLike, d: _ArrayLikeComplex_co = 1.0, device: _Device = None) -> NDArray[np.inexact]: ... # @overload -def rfftfreq(n: int | np.integer, d: _ArrayLikeFloat_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.floating]: ... +def rfftfreq(n: _IntLike, d: _ArrayLikeFloat_co = 1.0, device: _Device = None) -> NDArray[np.floating]: ... @overload -def rfftfreq(n: int | np.integer, d: _ArrayLikeComplex_co = ..., device: L["cpu"] | None = ...) -> NDArray[np.inexact]: ... +def rfftfreq(n: _IntLike, d: _ArrayLikeComplex_co = 1.0, device: _Device = None) -> NDArray[np.inexact]: ... diff --git a/src/numpy-stubs/fft/helper.pyi b/src/numpy-stubs/fft/helper.pyi new file mode 100644 index 00000000..edca6c82 --- /dev/null +++ b/src/numpy-stubs/fft/helper.pyi @@ -0,0 +1,19 @@ +from typing import Any +from typing_extensions import deprecated + +from numpy._typing import ArrayLike, NDArray, _ShapeLike + +from ._helper import _Device, _IntLike, integer_types as integer_types + +__all__ = ["fftfreq", "fftshift", "ifftshift", "rfftfreq"] + +### + +@deprecated("Please use `numpy.fft.fftshift` instead.") +def fftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ... +@deprecated("Please use `numpy.fft.ifftshift` instead.") +def ifftshift(x: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ... +@deprecated("Please use `numpy.fft.fftfreq` instead.") +def fftfreq(n: _IntLike, d: ArrayLike = 1.0, device: _Device = None) -> NDArray[Any]: ... +@deprecated("Please use `numpy.fft.rfftfreq` instead.") +def rfftfreq(n: _IntLike, d: ArrayLike = 1.0, device: _Device = None) -> NDArray[Any]: ... diff --git a/test/static/accept/fft.pyi b/test/static/accept/fft.pyi index e96a888a..1335ffcc 100644 --- a/test/static/accept/fft.pyi +++ b/test/static/accept/fft.pyi @@ -1,4 +1,3 @@ -from typing import Any from typing_extensions import assert_type import numpy as np @@ -9,10 +8,10 @@ AR_c16: npt.NDArray[np.complex128] AR_LIKE_f8: list[float] assert_type(np.fft.fftshift(AR_f8), npt.NDArray[np.float64]) -assert_type(np.fft.fftshift(AR_LIKE_f8, axes=0), npt.NDArray[Any]) +assert_type(np.fft.fftshift(AR_LIKE_f8, axes=0), npt.NDArray[np.floating]) assert_type(np.fft.ifftshift(AR_f8), npt.NDArray[np.float64]) -assert_type(np.fft.ifftshift(AR_LIKE_f8, axes=0), npt.NDArray[Any]) +assert_type(np.fft.ifftshift(AR_LIKE_f8, axes=0), npt.NDArray[np.floating]) assert_type(np.fft.fftfreq(5, AR_f8), npt.NDArray[np.floating]) assert_type(np.fft.fftfreq(np.int64(), AR_c16), npt.NDArray[np.inexact]) diff --git a/tool/.mypyignore-todo b/tool/.mypyignore-todo index abc62d36..bc57663c 100644 --- a/tool/.mypyignore-todo +++ b/tool/.mypyignore-todo @@ -8,12 +8,12 @@ numpy(\..+)?\.floating.as_integer_ratio numpy(\..+)?\.complexfloating.__hash__ numpy(\..+)?\.complexfloating.__complex__ -numpy.compat -numpy.compat.py3k - numpy._pyinstaller.hook-numpy + numpy.ctypeslib._ctypeslib -numpy.fft.helper + +numpy.compat +numpy.compat.py3k numpy.distutils