Skip to content

Commit d82e440

Browse files
committed
TYP: Shape-typed np.resize annotations
1 parent db19c9c commit d82e440

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

numpy/_core/fromnumeric.pyi

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ __all__ = [
105105
_SCT = TypeVar("_SCT", bound=generic)
106106
_SCT_uifcO = TypeVar("_SCT_uifcO", bound=number[Any] | object_)
107107
_ArrayType = TypeVar("_ArrayType", bound=np.ndarray[Any, Any])
108+
_SizeType = TypeVar("_SizeType", bound=int)
108109
_ShapeType = TypeVar("_ShapeType", bound=tuple[int, ...])
109110
_ShapeType_co = TypeVar("_ShapeType_co", bound=tuple[int, ...], covariant=True)
110111

@@ -427,16 +428,23 @@ def searchsorted(
427428
sorter: None | _ArrayLikeInt_co = ..., # 1D int array
428429
) -> NDArray[intp]: ...
429430

431+
# unlike `reshape`, `resize` only accepts positive integers, so literal ints can be used
430432
@overload
431-
def resize(
432-
a: _ArrayLike[_SCT],
433-
new_shape: _ShapeLike,
434-
) -> NDArray[_SCT]: ...
433+
def resize(a: _ArrayLike[_SCT], new_shape: _SizeType) -> np.ndarray[tuple[_SizeType], np.dtype[_SCT]]: ...
435434
@overload
436-
def resize(
437-
a: ArrayLike,
438-
new_shape: _ShapeLike,
439-
) -> NDArray[Any]: ...
435+
def resize(a: _ArrayLike[_SCT], new_shape: SupportsIndex) -> np.ndarray[tuple[int], np.dtype[_SCT]]: ...
436+
@overload
437+
def resize(a: _ArrayLike[_SCT], new_shape: _ShapeType) -> np.ndarray[_ShapeType, np.dtype[_SCT]]: ...
438+
@overload
439+
def resize(a: _ArrayLike[_SCT], new_shape: Sequence[SupportsIndex]) -> NDArray[_SCT]: ...
440+
@overload
441+
def resize(a: ArrayLike, new_shape: _SizeType) -> np.ndarray[tuple[_SizeType], np.dtype[Any]]: ...
442+
@overload
443+
def resize(a: ArrayLike, new_shape: SupportsIndex) -> np.ndarray[tuple[int], np.dtype[Any]]: ...
444+
@overload
445+
def resize(a: ArrayLike, new_shape: _ShapeType) -> np.ndarray[_ShapeType, np.dtype[Any]]: ...
446+
@overload
447+
def resize(a: ArrayLike, new_shape: Sequence[SupportsIndex]) -> NDArray[Any]: ...
440448

441449
@overload
442450
def squeeze(

numpy/typing/tests/data/reveal/fromnumeric.pyi

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Tests for :mod:`_core.fromnumeric`."""
22

3-
from typing import Any, NoReturn
3+
from typing import Any, Literal as L, NoReturn
44

55
import numpy as np
66
import numpy.typing as npt
@@ -102,11 +102,11 @@ assert_type(np.searchsorted(AR_f4[0], 0), np.intp)
102102
assert_type(np.searchsorted(AR_b[0], [0]), npt.NDArray[np.intp])
103103
assert_type(np.searchsorted(AR_f4[0], [0]), npt.NDArray[np.intp])
104104

105-
assert_type(np.resize(b, (5, 5)), npt.NDArray[np.bool])
106-
assert_type(np.resize(f4, (5, 5)), npt.NDArray[np.float32])
107-
assert_type(np.resize(f, (5, 5)), npt.NDArray[Any])
108-
assert_type(np.resize(AR_b, (5, 5)), npt.NDArray[np.bool])
109-
assert_type(np.resize(AR_f4, (5, 5)), npt.NDArray[np.float32])
105+
assert_type(np.resize(b, (5, 5)), np.ndarray[tuple[L[5], L[5]], np.dtype[np.bool]])
106+
assert_type(np.resize(f4, (5, 5)), np.ndarray[tuple[L[5], L[5]], np.dtype[np.float32]])
107+
assert_type(np.resize(f, (5, 5)), np.ndarray[tuple[L[5], L[5]], np.dtype[Any]])
108+
assert_type(np.resize(AR_b, (5, 5)), np.ndarray[tuple[L[5], L[5]], np.dtype[np.bool]])
109+
assert_type(np.resize(AR_f4, (5, 5)), np.ndarray[tuple[L[5], L[5]], np.dtype[np.float32]])
110110

111111
assert_type(np.squeeze(b), np.bool)
112112
assert_type(np.squeeze(f4), np.float32)

0 commit comments

Comments
 (0)