Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
TYP: transpose and matrix_transpose shape-typing
  • Loading branch information
jorenham committed Apr 2, 2026
commit 6376466ebcf039a6328f579f9bfaba68db06222d
17 changes: 8 additions & 9 deletions numpy/_core/fromnumeric.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -311,18 +311,17 @@ def swapaxes[ScalarT: np.generic](a: _ArrayLike[ScalarT], axis1: SupportsIndex,
@overload
def swapaxes(a: ArrayLike, axis1: SupportsIndex, axis2: SupportsIndex) -> NDArray[Any]: ...

# keep in sync with `ma.core.transpose`
#
@overload
def transpose[ScalarT: np.generic](
a: _ArrayLike[ScalarT],
axes: _ShapeLike | None = None,
) -> NDArray[ScalarT]: ...
def transpose[ArrayT: np.ndarray](a: ArrayT, axes: _ShapeLike | None = None) -> ArrayT: ...
@overload
def transpose(
a: ArrayLike,
axes: _ShapeLike | None = None,
) -> NDArray[Any]: ...
def transpose[ScalarT: np.generic](a: _ArrayLike[ScalarT], axes: _ShapeLike | None = None) -> NDArray[ScalarT]: ...
@overload
def transpose(a: ArrayLike, axes: _ShapeLike | None = None) -> NDArray[Any]: ...

#
@overload
def matrix_transpose[ArrayT: np.ndarray](x: ArrayT, /) -> ArrayT: ...
@overload
def matrix_transpose[ScalarT: np.generic](x: _ArrayLike[ScalarT], /) -> NDArray[ScalarT]: ...
@overload
Expand Down
6 changes: 4 additions & 2 deletions numpy/ma/core.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3571,9 +3571,11 @@ def putmask(a: np.ndarray, mask: _ArrayLikeBool_co, values: ArrayLike) -> None:

# keep in sync with `_core.fromnumeric.transpose`
@overload
def transpose[ScalarT: np.generic](a: _ArrayLike[ScalarT], axes: _ShapeLike | None = None) -> _MaskedArray[ScalarT]: ...
def transpose[ArrayT: np.ndarray](a: ArrayT, axes: _ShapeLike | None = None) -> ArrayT: ...
@overload
def transpose(a: ArrayLike, axes: _ShapeLike | None = None) -> _MaskedArray[Incomplete]: ...
def transpose[ScalarT: np.generic](a: _ArrayLike[ScalarT], axes: _ShapeLike | None = None) -> _MaskedArray[ScalarT]: ...
@overload # `_MaskedArray | np.ndarray` is equivalent to `np.ndarray`
def transpose(a: ArrayLike, axes: _ShapeLike | None = None) -> np.ndarray: ...

# keep in sync with `_core.fromnumeric.reshape`
@overload # shape: index
Expand Down
4 changes: 4 additions & 0 deletions numpy/typing/tests/data/reveal/fromnumeric.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ class NDArraySubclass(np.ndarray[tuple[Any, ...], np.dtype[np.complex128]]): ...

AR_b: npt.NDArray[np.bool]
AR_f4: npt.NDArray[np.float32]
AR_f4_1d: np.ndarray[tuple[int], np.dtype[np.float32]]
AR_f4_2d: np.ndarray[tuple[int, int], np.dtype[np.float32]]
AR_c16: npt.NDArray[np.complex128]
AR_u8: npt.NDArray[np.uint64]
AR_i8: npt.NDArray[np.int64]
Expand Down Expand Up @@ -68,6 +70,8 @@ assert_type(np.transpose(f4), npt.NDArray[np.float32])
assert_type(np.transpose(f), npt.NDArray[Any])
assert_type(np.transpose(AR_b), npt.NDArray[np.bool])
assert_type(np.transpose(AR_f4), npt.NDArray[np.float32])
assert_type(np.transpose(AR_f4_1d), np.ndarray[tuple[int], np.dtype[np.float32]])
assert_type(np.transpose(AR_f4_2d), np.ndarray[tuple[int, int], np.dtype[np.float32]])

assert_type(np.partition(b, 0, axis=None), npt.NDArray[np.bool])
assert_type(np.partition(f4, 0, axis=None), npt.NDArray[np.float32])
Expand Down
Loading