Skip to content

Commit d61bd4a

Browse files
jorenhamMaanasArora
authored andcommitted
TYP: fix mypy & pyright errors in np.matrix
1 parent e9ad875 commit d61bd4a

File tree

1 file changed

+116
-73
lines changed

1 file changed

+116
-73
lines changed

numpy/__init__.pyi

Lines changed: 116 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ from typing import (
215215
# if not available at runtime. This is because the `typeshed` stubs for the standard
216216
# library include `typing_extensions` stubs:
217217
# https://github.com/python/typeshed/blob/main/stdlib/typing_extensions.pyi
218-
from _typeshed import StrOrBytesPath, SupportsFlush, SupportsLenAndGetItem, SupportsWrite
218+
from _typeshed import Incomplete, StrOrBytesPath, SupportsFlush, SupportsLenAndGetItem, SupportsWrite
219219
from typing_extensions import CapsuleType, TypeVar
220220

221221
from numpy import (
@@ -5253,146 +5253,189 @@ class poly1d:
52535253
) -> poly1d: ...
52545254

52555255
class matrix(ndarray[_2DShapeT_co, _DTypeT_co]):
5256-
__array_priority__: ClassVar[float]
5256+
__array_priority__: ClassVar[float] = 10.0 # pyright: ignore[reportIncompatibleMethodOverride]
5257+
52575258
def __new__(
5258-
subtype,
5259+
subtype, # pyright: ignore[reportSelfClsParameterName]
52595260
data: ArrayLike,
52605261
dtype: DTypeLike = ...,
52615262
copy: builtins.bool = ...,
5262-
) -> matrix[_2D, Any]: ...
5263+
) -> matrix[_2D, Incomplete]: ...
52635264
def __array_finalize__(self, obj: object) -> None: ...
52645265

5265-
@overload
5266+
@overload # type: ignore[override]
52665267
def __getitem__(
5267-
self,
5268-
key: (
5269-
SupportsIndex
5270-
| _ArrayLikeInt_co
5271-
| tuple[SupportsIndex | _ArrayLikeInt_co, ...]
5272-
),
5273-
/,
5274-
) -> Any: ...
5268+
self, key: SupportsIndex | _ArrayLikeInt_co | tuple[SupportsIndex | _ArrayLikeInt_co, ...], /
5269+
) -> Incomplete: ...
52755270
@overload
5276-
def __getitem__(
5277-
self,
5278-
key: slice | EllipsisType | SupportsIndex | _ArrayLikeInt_co | tuple[slice | EllipsisType | _ArrayLikeInt_co | SupportsIndex | None, ...] | None,
5279-
/,
5280-
) -> matrix[_2D, _DTypeT_co]: ...
5271+
def __getitem__(self, key: _ToIndices, /) -> matrix[_2D, _DTypeT_co]: ...
52815272
@overload
5282-
def __getitem__(self: NDArray[void], key: str, /) -> matrix[_2D, dtype]: ...
5273+
def __getitem__(self: matrix[Any, dtype[void]], key: str, /) -> matrix[_2D, dtype]: ...
52835274
@overload
5284-
def __getitem__(self: NDArray[void], key: list[str], /) -> matrix[_2DShapeT_co, dtype[void]]: ...
5275+
def __getitem__(self: matrix[Any, dtype[void]], key: list[str], /) -> matrix[_2DShapeT_co, _DTypeT_co]: ... # pyright: ignore[reportIncompatibleMethodOverride]
52855276

5286-
def __mul__(self, other: ArrayLike, /) -> matrix[_2D, Any]: ...
5287-
def __rmul__(self, other: ArrayLike, /) -> matrix[_2D, Any]: ...
5288-
def __imul__(self, other: ArrayLike, /) -> matrix[_2DShapeT_co, _DTypeT_co]: ...
5289-
def __pow__(self, other: ArrayLike, mod: None = None, /) -> matrix[_2D, Any]: ...
5290-
def __rpow__(self, other: ArrayLike, mod: None = None, /) -> matrix[_2D, Any]: ...
5291-
def __ipow__(self, other: ArrayLike, /) -> matrix[_2DShapeT_co, _DTypeT_co]: ...
5277+
#
5278+
def __mul__(self, other: ArrayLike, /) -> matrix[_2D, Incomplete]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5279+
def __rmul__(self, other: ArrayLike, /) -> matrix[_2D, Incomplete]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5280+
def __imul__(self, other: ArrayLike, /) -> Self: ...
5281+
5282+
#
5283+
def __pow__(self, other: ArrayLike, mod: None = None, /) -> matrix[_2D, Incomplete]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5284+
def __rpow__(self, other: ArrayLike, mod: None = None, /) -> matrix[_2D, Incomplete]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5285+
def __ipow__(self, other: ArrayLike, /) -> Self: ... # type: ignore[misc, override]
52925286

5287+
# keep in sync with `prod` and `mean`
5288+
@overload # type: ignore[override]
5289+
def sum(self, axis: None = None, dtype: DTypeLike | None = None, out: None = None) -> Incomplete: ...
52935290
@overload
5294-
def sum(self, axis: None = ..., dtype: DTypeLike = ..., out: None = ...) -> Any: ...
5291+
def sum(self, axis: _ShapeLike, dtype: DTypeLike | None = None, out: None = None) -> matrix[_2D, Incomplete]: ...
52955292
@overload
5296-
def sum(self, axis: _ShapeLike, dtype: DTypeLike = ..., out: None = ...) -> matrix[_2D, Any]: ...
5293+
def sum(self, axis: _ShapeLike | None, dtype: DTypeLike | None, out: _ArrayT) -> _ArrayT: ...
52975294
@overload
5298-
def sum(self, axis: _ShapeLike | None = ..., dtype: DTypeLike = ..., out: _ArrayT = ...) -> _ArrayT: ...
5295+
def sum(self, axis: _ShapeLike | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
52995296

5297+
# keep in sync with `sum` and `mean`
5298+
@overload # type: ignore[override]
5299+
def prod(self, axis: None = None, dtype: DTypeLike | None = None, out: None = None) -> Incomplete: ...
53005300
@overload
5301-
def mean(self, axis: None = ..., dtype: DTypeLike = ..., out: None = ...) -> Any: ...
5301+
def prod(self, axis: _ShapeLike, dtype: DTypeLike | None = None, out: None = None) -> matrix[_2D, Incomplete]: ...
53025302
@overload
5303-
def mean(self, axis: _ShapeLike, dtype: DTypeLike = ..., out: None = ...) -> matrix[_2D, Any]: ...
5303+
def prod(self, axis: _ShapeLike | None, dtype: DTypeLike | None, out: _ArrayT) -> _ArrayT: ...
53045304
@overload
5305-
def mean(self, axis: _ShapeLike | None = ..., dtype: DTypeLike = ..., out: _ArrayT = ...) -> _ArrayT: ...
5305+
def prod(self, axis: _ShapeLike | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53065306

5307+
# keep in sync with `sum` and `prod`
5308+
@overload # type: ignore[override]
5309+
def mean(self, axis: None = None, dtype: DTypeLike | None = None, out: None = None) -> Incomplete: ...
53075310
@overload
5308-
def std(self, axis: None = ..., dtype: DTypeLike = ..., out: None = ..., ddof: float = ...) -> Any: ...
5311+
def mean(self, axis: _ShapeLike, dtype: DTypeLike | None = None, out: None = None) -> matrix[_2D, Incomplete]: ...
53095312
@overload
5310-
def std(self, axis: _ShapeLike, dtype: DTypeLike = ..., out: None = ..., ddof: float = ...) -> matrix[_2D, Any]: ...
5313+
def mean(self, axis: _ShapeLike | None, dtype: DTypeLike | None, out: _ArrayT) -> _ArrayT: ...
53115314
@overload
5312-
def std(self, axis: _ShapeLike | None = ..., dtype: DTypeLike = ..., out: _ArrayT = ..., ddof: float = ...) -> _ArrayT: ...
5315+
def mean(self, axis: _ShapeLike | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53135316

5317+
# keep in sync with `var`
5318+
@overload # type: ignore[override]
5319+
def std(self, axis: None = None, dtype: DTypeLike | None = None, out: None = None, ddof: float = 0) -> Incomplete: ...
53145320
@overload
5315-
def var(self, axis: None = ..., dtype: DTypeLike = ..., out: None = ..., ddof: float = ...) -> Any: ...
5321+
def std(
5322+
self, axis: _ShapeLike, dtype: DTypeLike | None = None, out: None = None, ddof: float = 0
5323+
) -> matrix[_2D, Incomplete]: ...
53165324
@overload
5317-
def var(self, axis: _ShapeLike, dtype: DTypeLike = ..., out: None = ..., ddof: float = ...) -> matrix[_2D, Any]: ...
5325+
def std(self, axis: _ShapeLike | None, dtype: DTypeLike | None, out: _ArrayT, ddof: float = 0) -> _ArrayT: ...
53185326
@overload
5319-
def var(self, axis: _ShapeLike | None = ..., dtype: DTypeLike = ..., out: _ArrayT = ..., ddof: float = ...) -> _ArrayT: ...
5327+
def std( # pyright: ignore[reportIncompatibleMethodOverride]
5328+
self, axis: _ShapeLike | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT, ddof: float = 0
5329+
) -> _ArrayT: ...
53205330

5331+
# keep in sync with `std`
5332+
@overload # type: ignore[override]
5333+
def var(self, axis: None = None, dtype: DTypeLike | None = None, out: None = None, ddof: float = 0) -> Incomplete: ...
53215334
@overload
5322-
def prod(self, axis: None = ..., dtype: DTypeLike = ..., out: None = ...) -> Any: ...
5335+
def var(
5336+
self, axis: _ShapeLike, dtype: DTypeLike | None = None, out: None = None, ddof: float = 0
5337+
) -> matrix[_2D, Incomplete]: ...
53235338
@overload
5324-
def prod(self, axis: _ShapeLike, dtype: DTypeLike = ..., out: None = ...) -> matrix[_2D, Any]: ...
5339+
def var(self, axis: _ShapeLike | None, dtype: DTypeLike | None, out: _ArrayT, ddof: float = 0) -> _ArrayT: ...
53255340
@overload
5326-
def prod(self, axis: _ShapeLike | None = ..., dtype: DTypeLike = ..., out: _ArrayT = ...) -> _ArrayT: ...
5341+
def var( # pyright: ignore[reportIncompatibleMethodOverride]
5342+
self, axis: _ShapeLike | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT, ddof: float = 0
5343+
) -> _ArrayT: ...
53275344

5345+
# keep in sync with `all`
5346+
@overload # type: ignore[override]
5347+
def any(self, axis: None = None, out: None = None) -> np.bool: ...
53285348
@overload
5329-
def any(self, axis: None = ..., out: None = ...) -> np.bool: ...
5349+
def any(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, dtype[np.bool]]: ...
53305350
@overload
5331-
def any(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, dtype[np.bool]]: ...
5351+
def any(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53325352
@overload
5333-
def any(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5353+
def any(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53345354

5355+
# keep in sync with `any`
5356+
@overload # type: ignore[override]
5357+
def all(self, axis: None = None, out: None = None) -> np.bool: ...
53355358
@overload
5336-
def all(self, axis: None = ..., out: None = ...) -> np.bool: ...
5359+
def all(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, dtype[np.bool]]: ...
53375360
@overload
5338-
def all(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, dtype[np.bool]]: ...
5361+
def all(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53395362
@overload
5340-
def all(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5363+
def all(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53415364

5365+
# keep in sync with `min` and `ptp`
5366+
@overload # type: ignore[override]
5367+
def max(self: NDArray[_ScalarT], axis: None = None, out: None = None) -> _ScalarT: ...
53425368
@overload
5343-
def max(self: NDArray[_ScalarT], axis: None = ..., out: None = ...) -> _ScalarT: ...
5369+
def max(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, _DTypeT_co]: ...
53445370
@overload
5345-
def max(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, _DTypeT_co]: ...
5371+
def max(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53465372
@overload
5347-
def max(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5373+
def max(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53485374

5375+
# keep in sync with `max` and `ptp`
5376+
@overload # type: ignore[override]
5377+
def min(self: NDArray[_ScalarT], axis: None = None, out: None = None) -> _ScalarT: ...
53495378
@overload
5350-
def min(self: NDArray[_ScalarT], axis: None = ..., out: None = ...) -> _ScalarT: ...
5379+
def min(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, _DTypeT_co]: ...
53515380
@overload
5352-
def min(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, _DTypeT_co]: ...
5381+
def min(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53535382
@overload
5354-
def min(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5383+
def min(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53555384

5385+
# keep in sync with `max` and `min`
53565386
@overload
5357-
def argmax(self: NDArray[_ScalarT], axis: None = ..., out: None = ...) -> intp: ...
5387+
def ptp(self: NDArray[_ScalarT], axis: None = None, out: None = None) -> _ScalarT: ...
53585388
@overload
5359-
def argmax(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, dtype[intp]]: ...
5389+
def ptp(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, _DTypeT_co]: ...
53605390
@overload
5361-
def argmax(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5391+
def ptp(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
5392+
@overload
5393+
def ptp(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53625394

5395+
# keep in sync with `argmin`
5396+
@overload # type: ignore[override]
5397+
def argmax(self: NDArray[_ScalarT], axis: None = None, out: None = None) -> intp: ...
53635398
@overload
5364-
def argmin(self: NDArray[_ScalarT], axis: None = ..., out: None = ...) -> intp: ...
5399+
def argmax(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, dtype[intp]]: ...
53655400
@overload
5366-
def argmin(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, dtype[intp]]: ...
5401+
def argmax(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53675402
@overload
5368-
def argmin(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5403+
def argmax(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53695404

5405+
# keep in sync with `argmax`
5406+
@overload # type: ignore[override]
5407+
def argmin(self: NDArray[_ScalarT], axis: None = None, out: None = None) -> intp: ...
53705408
@overload
5371-
def ptp(self: NDArray[_ScalarT], axis: None = ..., out: None = ...) -> _ScalarT: ...
5409+
def argmin(self, axis: _ShapeLike, out: None = None) -> matrix[_2D, dtype[intp]]: ...
53725410
@overload
5373-
def ptp(self, axis: _ShapeLike, out: None = ...) -> matrix[_2D, _DTypeT_co]: ...
5411+
def argmin(self, axis: _ShapeLike | None, out: _ArrayT) -> _ArrayT: ...
53745412
@overload
5375-
def ptp(self, axis: _ShapeLike | None = ..., out: _ArrayT = ...) -> _ArrayT: ...
5413+
def argmin(self, axis: _ShapeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride]
53765414

5377-
def squeeze(self, axis: _ShapeLike | None = ...) -> matrix[_2D, _DTypeT_co]: ...
5378-
def tolist(self: matrix[Any, dtype[generic[_T]]]) -> list[list[_T]]: ... # pyright: ignore[reportIncompatibleMethodOverride]
5379-
def ravel(self, /, order: _OrderKACF = "C") -> matrix[tuple[L[1], int], _DTypeT_co]: ... # pyright: ignore[reportIncompatibleMethodOverride]
5380-
def flatten(self, /, order: _OrderKACF = "C") -> matrix[tuple[L[1], int], _DTypeT_co]: ... # pyright: ignore[reportIncompatibleMethodOverride]
5415+
#the second overload handles the (rare) case that the matrix is not 2-d
5416+
@overload
5417+
def tolist(self: matrix[_2D, dtype[generic[_T]]]) -> list[list[_T]]: ... # pyright: ignore[reportIncompatibleMethodOverride]
5418+
@overload
5419+
def tolist(self) -> Incomplete: ... # pyright: ignore[reportIncompatibleMethodOverride]
53815420

5421+
# these three methods will at least return a `2-d` array of shape (1, n)
5422+
def squeeze(self, axis: _ShapeLike | None = None) -> matrix[_2D, _DTypeT_co]: ...
5423+
def ravel(self, /, order: _OrderKACF = "C") -> matrix[_2D, _DTypeT_co]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5424+
def flatten(self, /, order: _OrderKACF = "C") -> matrix[_2D, _DTypeT_co]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
5425+
5426+
# matrix.T is inherited from _ScalarOrArrayCommon
5427+
def getT(self) -> Self: ...
53825428
@property
5383-
def T(self) -> matrix[_2D, _DTypeT_co]: ...
5384-
@property
5385-
def I(self) -> matrix[_2D, Any]: ... # noqa: E743
5429+
def I(self) -> matrix[_2D, Incomplete]: ... # noqa: E743
5430+
def getI(self) -> matrix[_2D, Incomplete]: ...
53865431
@property
53875432
def A(self) -> ndarray[_2DShapeT_co, _DTypeT_co]: ...
5433+
def getA(self) -> ndarray[_2DShapeT_co, _DTypeT_co]: ...
53885434
@property
53895435
def A1(self) -> ndarray[_Shape, _DTypeT_co]: ...
5436+
def getA1(self) -> ndarray[_Shape, _DTypeT_co]: ...
53905437
@property
53915438
def H(self) -> matrix[_2D, _DTypeT_co]: ...
5392-
def getT(self) -> matrix[_2D, _DTypeT_co]: ...
5393-
def getI(self) -> matrix[_2D, Any]: ...
5394-
def getA(self) -> ndarray[_2DShapeT_co, _DTypeT_co]: ...
5395-
def getA1(self) -> ndarray[_Shape, _DTypeT_co]: ...
53965439
def getH(self) -> matrix[_2D, _DTypeT_co]: ...
53975440

53985441
def from_dlpack(

0 commit comments

Comments
 (0)