From be55eecb519673bbf3bac4d311e22d0863d8a9eb Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 28 Dec 2025 14:06:09 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20remove=20`None`=20f?= =?UTF-8?q?rom=20`DTypeLike`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/numpy-stubs/_typing/_dtype_like.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/numpy-stubs/_typing/_dtype_like.pyi b/src/numpy-stubs/_typing/_dtype_like.pyi index afce7049..dfd68a3f 100644 --- a/src/numpy-stubs/_typing/_dtype_like.pyi +++ b/src/numpy-stubs/_typing/_dtype_like.pyi @@ -85,4 +85,4 @@ _DTypeLikeComplex_co: TypeAlias = type[complex] | _DTypeLike[np.number] | _Numbe # Anything that can be coerced into numpy.dtype. # Reference: https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html -DTypeLike: TypeAlias = str | bytes | _DTypeLike[Any] | _VoidDTypeLike | None +DTypeLike: TypeAlias = str | bytes | _DTypeLike[Any] | _VoidDTypeLike From 16e8dbbe374f8811c27d7a41506bff8a54618e9d Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 28 Dec 2025 15:11:16 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20update=20dtype-like?= =?UTF-8?q?=20annotations=20that=20did=20not=20yet=20accept=20`None`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../@test/runtime/legacy/arithmetic.py | 2 +- src/numpy-stubs/__init__.pyi | 32 ++++++------- src/numpy-stubs/_core/_multiarray_umath.pyi | 46 ++++++++++++------- src/numpy-stubs/_core/function_base.pyi | 6 +-- src/numpy-stubs/_core/memmap.pyi | 2 +- src/numpy-stubs/_core/numeric.pyi | 42 ++++++++++------- src/numpy-stubs/_core/numerictypes.pyi | 4 +- src/numpy-stubs/_core/records.pyi | 30 ++++++------ src/numpy-stubs/lib/_function_base_impl.pyi | 4 +- src/numpy-stubs/lib/_npyio_impl.pyi | 4 +- src/numpy-stubs/lib/recfunctions.pyi | 2 +- src/numpy-stubs/linalg/_umath_linalg.pyi | 2 +- src/numpy-stubs/ma/core.pyi | 23 ++++++---- src/numpy-stubs/matlib.pyi | 18 ++++++-- src/numpy-stubs/matrixlib/defmatrix.pyi | 2 +- tool/promotion.py | 4 +- 16 files changed, 129 insertions(+), 94 deletions(-) diff --git a/src/numpy-stubs/@test/runtime/legacy/arithmetic.py b/src/numpy-stubs/@test/runtime/legacy/arithmetic.py index f7e9dcc0..a14c1ff8 100644 --- a/src/numpy-stubs/@test/runtime/legacy/arithmetic.py +++ b/src/numpy-stubs/@test/runtime/legacy/arithmetic.py @@ -28,7 +28,7 @@ class Object: def __array__( - self, dtype: npt.DTypeLike = None, *, copy: bool | None = None + self, dtype: npt.DTypeLike | None = None, *, copy: bool | None = None ) -> npt.NDArray[np.object_]: ret = np.empty((), dtype=np.object_) ret[()] = self diff --git a/src/numpy-stubs/__init__.pyi b/src/numpy-stubs/__init__.pyi index 7379d303..c3d3a23c 100644 --- a/src/numpy-stubs/__init__.pyi +++ b/src/numpy-stubs/__init__.pyi @@ -1216,7 +1216,7 @@ class dtype(Generic[_ScalarT_co], metaclass=_DTypeMeta): ) -> Self: ... @overload def __new__( - cls, dtype: DTypeLike, align: py_bool = False, copy: py_bool = False, *, metadata: _MetaData = ... + cls, dtype: DTypeLike | None, align: py_bool = False, copy: py_bool = False, *, metadata: _MetaData = ... ) -> dtype: ... # @@ -1235,10 +1235,10 @@ class dtype(Generic[_ScalarT_co], metaclass=_DTypeMeta): def __ne__(self, other: object, /) -> py_bool: ... # - def __gt__(self, other: DTypeLike, /) -> py_bool: ... - def __ge__(self, other: DTypeLike, /) -> py_bool: ... - def __lt__(self, other: DTypeLike, /) -> py_bool: ... - def __le__(self, other: DTypeLike, /) -> py_bool: ... + def __gt__(self, other: DTypeLike | None, /) -> py_bool: ... + def __ge__(self, other: DTypeLike | None, /) -> py_bool: ... + def __lt__(self, other: DTypeLike | None, /) -> py_bool: ... + def __le__(self, other: DTypeLike | None, /) -> py_bool: ... # NOTE: In the future 1-based multiplications will also yield `flexible` dtypes @overload @@ -1752,7 +1752,7 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeT_co, _DTypeT_co]): def __new__( cls, shape: _ShapeLike, - dtype: DTypeLike = float, # noqa: PYI011 + dtype: DTypeLike | None = float, # noqa: PYI011 buffer: Buffer | None = None, offset: CanIndex = 0, strides: _ShapeLike | None = None, @@ -3125,7 +3125,7 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeT_co, _DTypeT_co]): def astype( self, /, - dtype: DTypeLike, + dtype: DTypeLike | None, order: _OrderKACF = "K", casting: _CastingKind = "unsafe", subok: py_bool = True, @@ -3186,18 +3186,18 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeT_co, _DTypeT_co]): @overload # (_: T) def view(self, /, dtype: type[_ArrayT]) -> _ArrayT: ... @overload # (dtype: ?) - def view(self, /, dtype: DTypeLike) -> ndarray[_ShapeT_co]: ... + def view(self, /, dtype: DTypeLike | None) -> ndarray[_ShapeT_co]: ... @overload # (dtype: ?, type: type[T]) - def view(self, /, dtype: DTypeLike, type: type[_ArrayT]) -> _ArrayT: ... + def view(self, /, dtype: DTypeLike | None, type: type[_ArrayT]) -> _ArrayT: ... # @overload def getfield(self, /, dtype: _DTypeLike[_ScalarT], offset: CanIndex = 0) -> _nt.Array[_ScalarT]: ... @overload - def getfield(self, /, dtype: DTypeLike, offset: CanIndex = 0) -> _nt.Array: ... + def getfield(self, /, dtype: DTypeLike | None, offset: CanIndex = 0) -> _nt.Array: ... # - def setfield(self, val: ArrayLike, /, dtype: DTypeLike, offset: CanIndex = 0) -> None: ... + def setfield(self, val: ArrayLike, /, dtype: DTypeLike | None, offset: CanIndex = 0) -> None: ... # keep `dtype` at the bottom to avoid shadowing @property @@ -3333,7 +3333,7 @@ class generic(_ArrayOrScalarCommon, Generic[_ItemT_co]): def astype( self, /, - dtype: DTypeLike, + dtype: DTypeLike | None, order: _OrderKACF = "K", casting: _CastingKind = "unsafe", subok: py_bool = True, @@ -3352,15 +3352,15 @@ class generic(_ArrayOrScalarCommon, Generic[_ItemT_co]): @overload def view(self, /, dtype: _DTypeLike[_ScalarT], type: type[_nt.Array]) -> _ScalarT: ... @overload - def view(self, /, dtype: DTypeLike) -> Incomplete: ... + def view(self, /, dtype: DTypeLike | None) -> Incomplete: ... @overload - def view(self, /, dtype: DTypeLike, type: type[_nt.Array]) -> Incomplete: ... + def view(self, /, dtype: DTypeLike | None, type: type[_nt.Array]) -> Incomplete: ... # @overload def getfield(self, /, dtype: _DTypeLike[_ScalarT], offset: CanIndex = 0) -> _ScalarT: ... @overload - def getfield(self, /, dtype: DTypeLike, offset: CanIndex = 0) -> Incomplete: ... + def getfield(self, /, dtype: DTypeLike | None, offset: CanIndex = 0) -> Incomplete: ... # @overload @@ -5039,7 +5039,7 @@ class void(flexible[bytes | tuple[Any, ...]]): # type: ignore[misc] # pyright: def __getitem__(self, key: list[str], /) -> void: ... def __setitem__(self, key: str | list[str] | CanIndex, value: ArrayLike, /) -> None: ... @override - def setfield(self, val: ArrayLike, dtype: DTypeLike, offset: int = 0) -> None: ... + def setfield(self, val: ArrayLike, dtype: DTypeLike | None, offset: int = 0) -> None: ... # @property diff --git a/src/numpy-stubs/_core/_multiarray_umath.pyi b/src/numpy-stubs/_core/_multiarray_umath.pyi index 78c2a6c4..e3f774d7 100644 --- a/src/numpy-stubs/_core/_multiarray_umath.pyi +++ b/src/numpy-stubs/_core/_multiarray_umath.pyi @@ -518,7 +518,7 @@ def empty( @overload # 1d shape, unknown dtype def empty( shape: _ShapeLike1D, - dtype: npt.DTypeLike = None, + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -554,7 +554,7 @@ def empty( @overload # known shape, unknown scalar-type def empty( shape: _AnyShapeT, - dtype: npt.DTypeLike = None, + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -590,7 +590,7 @@ def empty( @overload # unknown shape, unknown dtype def empty( shape: _ShapeLike, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -601,7 +601,7 @@ def empty( @overload # 1d shape, default dtype (float64) def zeros( shape: _ShapeLike1D, - dtype: _nt.ToDTypeFloat64 = ..., + dtype: _nt.ToDTypeFloat64 | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -628,7 +628,7 @@ def zeros( @overload # 1d shape, unknown dtype def zeros( shape: _ShapeLike1D, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -664,7 +664,7 @@ def zeros( @overload # known shape, unknown scalar-type def zeros( shape: _AnyShapeT, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -700,7 +700,7 @@ def zeros( @overload # unknown shape, unknown dtype def zeros( shape: _ShapeLike, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -1350,7 +1350,7 @@ def asfortranarray( @overload def fromstring( string: bytes | str, - dtype: type[_nt.JustFloat] | None = ..., + dtype: type[_nt.JustFloat] | None = float, # noqa: PYI011 count: CanIndex = -1, *, sep: str, @@ -1367,11 +1367,21 @@ def fromstring( ) -> _nt.Array[_ScalarT]: ... @overload def fromstring( - string: bytes | str, dtype: npt.DTypeLike = ..., count: CanIndex = -1, *, sep: str, like: _nt.Array[_ScalarT] + string: bytes | str, + dtype: npt.DTypeLike | None = float, # noqa: PYI011 + count: CanIndex = -1, + *, + sep: str, + like: _nt.Array[_ScalarT], ) -> _nt.Array[_ScalarT]: ... @overload def fromstring( - string: bytes | str, dtype: npt.DTypeLike, count: CanIndex = -1, *, sep: str, like: _CanArrayFunc | None = None + string: bytes | str, + dtype: npt.DTypeLike | None, + count: CanIndex = -1, + *, + sep: str, + like: _CanArrayFunc | None = None, ) -> _nt.Array[Incomplete]: ... # @@ -1392,7 +1402,7 @@ def fromfile( @overload def fromfile( file: _ToFile, - dtype: npt.DTypeLike, + dtype: npt.DTypeLike | None, count: CanIndex = -1, sep: str = "", offset: CanIndex = 0, @@ -1407,7 +1417,7 @@ def fromiter( ) -> _nt.Array[_ScalarT]: ... @overload def fromiter( - iter: Iterable[object], dtype: npt.DTypeLike, count: CanIndex = -1, *, like: _CanArrayFunc | None = None + iter: Iterable[object], dtype: npt.DTypeLike | None, count: CanIndex = -1, *, like: _CanArrayFunc | None = None ) -> _nt.Array[Incomplete]: ... # @@ -1427,7 +1437,7 @@ def frombuffer( @overload def frombuffer( buffer: Buffer, - dtype: npt.DTypeLike, + dtype: npt.DTypeLike | None, count: CanIndex = -1, offset: CanIndex = 0, *, @@ -1650,10 +1660,12 @@ def shares_memory(a: object, b: object, /, max_work: L[0, -1] = -1) -> bool: ... def may_share_memory(a: object, b: object, /, max_work: L[0, -1] = 0) -> bool: ... # -def can_cast(from_: npt.ArrayLike | npt.DTypeLike, to: npt.DTypeLike, casting: _CastingKind = "safe") -> bool: ... +def can_cast( + from_: npt.ArrayLike | npt.DTypeLike | None, to: npt.DTypeLike | None, casting: _CastingKind = "safe" +) -> bool: ... def min_scalar_type(a: npt.ArrayLike, /) -> np.dtype[Incomplete]: ... -def result_type(*arrays_and_dtypes: npt.ArrayLike | npt.DTypeLike) -> np.dtype[Incomplete]: ... -def promote_types(type1: npt.DTypeLike, type2: npt.DTypeLike, /) -> np.dtype[Incomplete]: ... +def result_type(*arrays_and_dtypes: npt.ArrayLike | npt.DTypeLike | None) -> np.dtype[Incomplete]: ... +def promote_types(type1: npt.DTypeLike | None, type2: npt.DTypeLike | None, /) -> np.dtype[Incomplete]: ... # @overload @@ -2011,4 +2023,4 @@ def _make_extobj() -> CapsuleType: ... def _monotonicity(x: _nt.CoFloating_nd) -> L[0, 1]: ... def _place(input: npt.ArrayLike, mask: _nt.ToBool_nd, vals: npt.ArrayLike) -> None: ... def _reconstruct(subtype: type[_nt.Array], shape: _AnyShapeT, dtype: _DTypeT) -> np.ndarray[_AnyShapeT, _DTypeT]: ... -def _vec_string(a: _ArrayLikeAnyString_co, dtype: npt.DTypeLike, attr: str, /) -> _nt.Array[Incomplete]: ... +def _vec_string(a: _ArrayLikeAnyString_co, dtype: npt.DTypeLike | None, attr: str, /) -> _nt.Array[Incomplete]: ... diff --git a/src/numpy-stubs/_core/function_base.pyi b/src/numpy-stubs/_core/function_base.pyi index 7b0b1766..c4670369 100644 --- a/src/numpy-stubs/_core/function_base.pyi +++ b/src/numpy-stubs/_core/function_base.pyi @@ -71,7 +71,7 @@ def linspace( num: SupportsIndex = 50, endpoint: bool = True, retstep: L[False] = False, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, axis: SupportsIndex = 0, *, device: _Device | None = None, @@ -120,7 +120,7 @@ def linspace( endpoint: bool = True, *, retstep: L[True], - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, axis: SupportsIndex = 0, device: _Device | None = None, ) -> tuple[_nt.Array[Incomplete], Incomplete]: ... @@ -174,7 +174,7 @@ def logspace( num: SupportsIndex = 50, endpoint: bool = True, base: _ArrayLikeNumber_co = 10.0, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, axis: SupportsIndex = 0, ) -> _nt.Array[Incomplete]: ... diff --git a/src/numpy-stubs/_core/memmap.pyi b/src/numpy-stubs/_core/memmap.pyi index 61d128b9..e322e6de 100644 --- a/src/numpy-stubs/_core/memmap.pyi +++ b/src/numpy-stubs/_core/memmap.pyi @@ -81,7 +81,7 @@ class memmap(np.ndarray[_ShapeT_co, _DType_co], Generic[_ShapeT_co, _DType_co]): def __new__( subtype, filename: _ToFileName, - dtype: npt.DTypeLike, + dtype: npt.DTypeLike | None, mode: _ToMode = "r+", offset: int = 0, shape: int | tuple[int, ...] | None = None, diff --git a/src/numpy-stubs/_core/numeric.pyi b/src/numpy-stubs/_core/numeric.pyi index f1d77700..e1e39dce 100644 --- a/src/numpy-stubs/_core/numeric.pyi +++ b/src/numpy-stubs/_core/numeric.pyi @@ -630,7 +630,7 @@ True_: Final[np.bool[L[True]]] = ... @overload # 1d shape, default dtype (float64) def ones( shape: _ShapeLike1D, - dtype: _nt.ToDTypeFloat64 = ..., + dtype: _nt.ToDTypeFloat64 | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -657,7 +657,7 @@ def ones( @overload # 1d shape, unknown dtype def ones( shape: _ShapeLike1D, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -666,7 +666,7 @@ def ones( @overload # known shape, default dtype (float64) def ones( shape: _AnyShapeT, - dtype: _nt.ToDTypeFloat64 = ..., + dtype: _nt.ToDTypeFloat64 | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -693,7 +693,7 @@ def ones( @overload # known shape, unknown scalar-type def ones( shape: _AnyShapeT, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -702,7 +702,7 @@ def ones( @overload # unknown shape, default dtype def ones( shape: _ShapeLike, - dtype: _nt.ToDTypeFloat64 = ..., + dtype: _nt.ToDTypeFloat64 | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -729,7 +729,7 @@ def ones( @overload # unknown shape, unknown dtype def ones( shape: _ShapeLike, - dtype: npt.DTypeLike = ..., + dtype: npt.DTypeLike | None = None, order: _OrderCF = "C", *, device: _Device | None = None, @@ -2176,7 +2176,7 @@ def roll(a: _ArrayLike[_ScalarT], shift: _ShapeLike, axis: _ShapeLike | None = N def roll(a: ArrayLike, shift: _ShapeLike, axis: _ShapeLike | None = None) -> _nt.Array: ... # -def rollaxis(a: _nt.Array[_ScalarT], axis: int, start: int = ...) -> _nt.Array[_ScalarT]: ... +def rollaxis(a: _nt.Array[_ScalarT], axis: int, start: int = 0) -> _nt.Array[_ScalarT]: ... def moveaxis(a: _nt.Array[_ScalarT], source: _ShapeLike, destination: _ShapeLike) -> _nt.Array[_ScalarT]: ... # @@ -2269,7 +2269,9 @@ def cross( # @overload def indices( - dimensions: _nt.ToInteger_1d, dtype: type[_nt.JustInt] = ..., sparse: L[False] = False + dimensions: _nt.ToInteger_1d, + dtype: type[_nt.JustInt] = int, # noqa: PYI011 + sparse: L[False] = False, ) -> _nt.Array[np.intp]: ... @overload def indices( @@ -2277,7 +2279,10 @@ def indices( ) -> tuple[_nt.Array[np.intp], ...]: ... @overload def indices( - dimensions: _nt.ToInteger_1d, dtype: type[_nt.JustInt] = ..., *, sparse: L[True] + dimensions: _nt.ToInteger_1d, + dtype: type[_nt.JustInt] = int, # noqa: PYI011 + *, + sparse: L[True], ) -> tuple[_nt.Array[np.intp], ...]: ... @overload def indices( @@ -2288,18 +2293,23 @@ def indices( dimensions: _nt.ToInteger_1d, dtype: _DTypeLike[_ScalarT], sparse: L[True] ) -> tuple[_nt.Array[_ScalarT], ...]: ... @overload -def indices(dimensions: _nt.ToInteger_1d, dtype: DTypeLike = ..., sparse: L[False] = False) -> _nt.Array: ... +def indices(dimensions: _nt.ToInteger_1d, dtype: DTypeLike | None = int, sparse: L[False] = False) -> _nt.Array: ... # noqa: PYI011 @overload -def indices(dimensions: _nt.ToInteger_1d, dtype: DTypeLike, sparse: L[True]) -> tuple[_nt.Array, ...]: ... +def indices(dimensions: _nt.ToInteger_1d, dtype: DTypeLike | None, sparse: L[True]) -> tuple[_nt.Array, ...]: ... @overload -def indices(dimensions: _nt.ToInteger_1d, dtype: DTypeLike = ..., *, sparse: L[True]) -> tuple[_nt.Array, ...]: ... +def indices( + dimensions: _nt.ToInteger_1d, + dtype: DTypeLike | None = int, # noqa: PYI011 + *, + sparse: L[True], +) -> tuple[_nt.Array, ...]: ... # keep in sync with `ma.core.fromfunction` def fromfunction( function: Callable[..., _T], shape: Sequence[int], *, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = float, # noqa: PYI011 like: _SupportsArrayFunc | None = None, **kwargs: object, ) -> _T: ... @@ -2319,11 +2329,11 @@ def identity( n: int, dtype: _DTypeLike[_ScalarT], *, like: _SupportsArrayFunc | None = None ) -> _nt.Array2D[_ScalarT]: ... @overload -def identity(n: int, dtype: DTypeLike, *, like: _SupportsArrayFunc | None = None) -> _nt.Array2D: ... +def identity(n: int, dtype: DTypeLike | None = None, *, like: _SupportsArrayFunc | None = None) -> _nt.Array2D: ... # def allclose( - a: ArrayLike, b: ArrayLike, rtol: ArrayLike = ..., atol: ArrayLike = ..., equal_nan: py_bool = ... + a: ArrayLike, b: ArrayLike, rtol: ArrayLike = 1e-5, atol: ArrayLike = 1e-8, equal_nan: py_bool = False ) -> py_bool: ... # @@ -2363,5 +2373,5 @@ def astype( ) -> ndarray[_ShapeT, dtype[_ScalarT]]: ... @overload def astype( - x: _nt.Array[Any, _ShapeT], dtype: DTypeLike, /, *, copy: py_bool = True, device: _Device | None = None + x: _nt.Array[Any, _ShapeT], dtype: DTypeLike | None, /, *, copy: py_bool = True, device: _Device | None = None ) -> ndarray[_ShapeT, dtype]: ... diff --git a/src/numpy-stubs/_core/numerictypes.pyi b/src/numpy-stubs/_core/numerictypes.pyi index 6c77563d..5e20bccc 100644 --- a/src/numpy-stubs/_core/numerictypes.pyi +++ b/src/numpy-stubs/_core/numerictypes.pyi @@ -193,5 +193,5 @@ _ScalarTypeTuple: TypeAlias = tuple[ ScalarType: Final[_ScalarTypeTuple] = ... typeDict: Final = sctypeDict -def isdtype(dtype: dtype | type, kind: DTypeLike | tuple[DTypeLike, ...]) -> py_bool: ... -def issubdtype(arg1: DTypeLike, arg2: DTypeLike) -> py_bool: ... +def isdtype(dtype: dtype | type, kind: DTypeLike | tuple[DTypeLike | None, ...] | None) -> py_bool: ... +def issubdtype(arg1: DTypeLike | None, arg2: DTypeLike | None) -> py_bool: ... diff --git a/src/numpy-stubs/_core/records.pyi b/src/numpy-stubs/_core/records.pyi index 97a9134a..e05e632f 100644 --- a/src/numpy-stubs/_core/records.pyi +++ b/src/numpy-stubs/_core/records.pyi @@ -42,7 +42,7 @@ class format_parser: def __init__( self, /, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None, titles: str | Sequence[str] | None, aligned: bool = False, @@ -79,7 +79,7 @@ class recarray(np.ndarray[_ShapeT_co, _DTypeT_co]): offset: SupportsIndex = 0, strides: _ShapeLike | None = None, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, byteorder: _ByteOrder | None = None, @@ -90,7 +90,7 @@ class recarray(np.ndarray[_ShapeT_co, _DTypeT_co]): def __new__( subtype, shape: _ShapeLike, - dtype: DTypeLike, + dtype: DTypeLike | None, buf: Buffer | None = None, offset: SupportsIndex = ..., strides: _ShapeLike | None = None, @@ -135,7 +135,7 @@ def fromarrays( dtype: None = None, shape: _ShapeLike | None = None, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -160,7 +160,7 @@ def fromrecords( dtype: None = None, shape: _ShapeLike | None = None, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -171,7 +171,7 @@ def fromrecords( @overload def fromstring( datastring: Buffer, - dtype: DTypeLike, + dtype: DTypeLike | None, shape: _ShapeLike | None = None, offset: int = 0, formats: None = None, @@ -187,7 +187,7 @@ def fromstring( shape: _ShapeLike | None = None, offset: int = 0, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -201,7 +201,7 @@ def get_remaining_size(fd: IO[Any]) -> int: ... # undocumented @overload def fromfile( fd: StrOrBytesPath | _SupportsReadInto, - dtype: DTypeLike, + dtype: DTypeLike | None, shape: _ShapeLike | None = None, offset: int = 0, formats: None = None, @@ -217,7 +217,7 @@ def fromfile( shape: _ShapeLike | None = None, offset: int = 0, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -242,7 +242,7 @@ def array( # type: ignore[overload-overlap] @overload def array( obj: ArrayLike, - dtype: DTypeLike, + dtype: DTypeLike | None, shape: _ShapeLike | None = None, offset: int = 0, strides: tuple[int, ...] | None = None, @@ -261,7 +261,7 @@ def array( offset: int = 0, strides: tuple[int, ...] | None = None, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -271,7 +271,7 @@ def array( @overload def array( obj: None, - dtype: DTypeLike, + dtype: DTypeLike | None, shape: _ShapeLike, offset: int = 0, strides: tuple[int, ...] | None = None, @@ -290,7 +290,7 @@ def array( shape: _ShapeLike, offset: int = 0, strides: tuple[int, ...] | None = None, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, @@ -300,7 +300,7 @@ def array( @overload def array( obj: _SupportsReadInto, - dtype: DTypeLike, + dtype: DTypeLike | None, shape: _ShapeLike | None = None, offset: int = 0, strides: tuple[int, ...] | None = None, @@ -319,7 +319,7 @@ def array( offset: int = 0, strides: tuple[int, ...] | None = None, *, - formats: DTypeLike, + formats: DTypeLike | None, names: str | Sequence[str] | None = None, titles: str | Sequence[str] | None = None, aligned: bool = False, diff --git a/src/numpy-stubs/lib/_function_base_impl.pyi b/src/numpy-stubs/lib/_function_base_impl.pyi index 87ad4dae..3c1a286a 100644 --- a/src/numpy-stubs/lib/_function_base_impl.pyi +++ b/src/numpy-stubs/lib/_function_base_impl.pyi @@ -325,7 +325,7 @@ def asarray_chkfinite(a: object, dtype: _DTypeLike[_ScalarT], order: _Order | No @overload def asarray_chkfinite(a: object, dtype: None = None, order: _Order | None = None) -> _nt.Array[Incomplete]: ... @overload -def asarray_chkfinite(a: object, dtype: DTypeLike, order: _Order | None = None) -> _nt.Array[Incomplete]: ... +def asarray_chkfinite(a: object, dtype: DTypeLike | None, order: _Order | None = None) -> _nt.Array[Incomplete]: ... # @overload @@ -626,7 +626,7 @@ def cov( fweights: _nt.ToInteger_1d | None = None, aweights: _nt.CoFloating_1d | None = None, *, - dtype: DTypeLike, + dtype: DTypeLike | None, ) -> _nt.Array[Incomplete]: ... # diff --git a/src/numpy-stubs/lib/_npyio_impl.pyi b/src/numpy-stubs/lib/_npyio_impl.pyi index e2d8c8c7..3c7fa4ef 100644 --- a/src/numpy-stubs/lib/_npyio_impl.pyi +++ b/src/numpy-stubs/lib/_npyio_impl.pyi @@ -159,7 +159,7 @@ def loadtxt( @overload def loadtxt( fname: _FName, - dtype: DTypeLike, + dtype: DTypeLike | None, comments: str | Sequence[str] | None = "#", delimiter: str | None = None, converters: Mapping[int | str, _Converter] | _Converter | None = None, @@ -194,7 +194,7 @@ def fromregex( ) -> _nt.Array[_ScalarT]: ... @overload def fromregex( - file: _FNameRead, regexp: str | bytes | Pattern[Any], dtype: DTypeLike, encoding: str | None = None + file: _FNameRead, regexp: str | bytes | Pattern[Any], dtype: DTypeLike | None, encoding: str | None = None ) -> _nt.Array: ... # diff --git a/src/numpy-stubs/lib/recfunctions.pyi b/src/numpy-stubs/lib/recfunctions.pyi index 8aeb4c3f..c009886d 100644 --- a/src/numpy-stubs/lib/recfunctions.pyi +++ b/src/numpy-stubs/lib/recfunctions.pyi @@ -238,7 +238,7 @@ def structured_to_unstructured( @overload def unstructured_to_structured( arr: _nt.Array, - dtype: npt.DTypeLike, + dtype: npt.DTypeLike | None, names: None = None, align: bool = False, copy: bool = False, diff --git a/src/numpy-stubs/linalg/_umath_linalg.pyi b/src/numpy-stubs/linalg/_umath_linalg.pyi index b7e1709b..a3a347ee 100644 --- a/src/numpy-stubs/linalg/_umath_linalg.pyi +++ b/src/numpy-stubs/linalg/_umath_linalg.pyi @@ -37,7 +37,7 @@ class _Kwargs2(_KwargsCommon, total=False): @type_check_only class _Kwargs3(_KwargsCommon, total=False): - signature: tuple[DTypeLike, DTypeLike, DTypeLike] | str | None + signature: tuple[DTypeLike | None, DTypeLike | None, DTypeLike | None] | str | None axes: Sequence[_Tuple2[SupportsIndex]] axis: SupportsIndex diff --git a/src/numpy-stubs/ma/core.pyi b/src/numpy-stubs/ma/core.pyi index 02db8e4e..26c486b9 100644 --- a/src/numpy-stubs/ma/core.pyi +++ b/src/numpy-stubs/ma/core.pyi @@ -826,9 +826,9 @@ def anom(a: ArrayLike, axis: CanIndex | None, dtype: _DTypeLike[_ScalarT]) -> _n @overload # a: unknown array-like, dtype: dtype-like (keyword) def anom(a: ArrayLike, axis: CanIndex | None = None, *, dtype: _DTypeLike[_ScalarT]) -> _nt.MArray[_ScalarT]: ... @overload # a: unknown array-like, dtype: unknown dtype-like (positional) -def anom(a: ArrayLike, axis: CanIndex | None, dtype: DTypeLike) -> _nt.MArray[Incomplete]: ... +def anom(a: ArrayLike, axis: CanIndex | None, dtype: DTypeLike | None) -> _nt.MArray[Incomplete]: ... @overload # a: unknown array-like, dtype: unknown dtype-like (keyword) -def anom(a: ArrayLike, axis: CanIndex | None = None, *, dtype: DTypeLike) -> _nt.MArray[Incomplete]: ... +def anom(a: ArrayLike, axis: CanIndex | None = None, *, dtype: DTypeLike | None) -> _nt.MArray[Incomplete]: ... anomalies = anom @@ -1662,7 +1662,7 @@ def empty( @overload # 1d shape, unknown dtype def empty( shape: _ShapeLike1D, - dtype: DTypeLike = None, + dtype: DTypeLike | None = None, order: np._OrderCF = "C", *, device: _Device | None = None, @@ -1706,7 +1706,7 @@ def empty( @overload # known shape, unknown scalar-type def empty( shape: _ShapeT, - dtype: DTypeLike = None, + dtype: DTypeLike | None = None, order: np._OrderCF = "C", *, device: _Device | None = None, @@ -1750,7 +1750,7 @@ def empty( @overload # unknown shape, unknown dtype def empty( shape: _ShapeLike, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, order: np._OrderCF = "C", *, device: _Device | None = None, @@ -2160,7 +2160,12 @@ def frombuffer( ) -> _nt.MArray[_ScalarT]: ... @overload def frombuffer( - buffer: Buffer, dtype: DTypeLike, count: CanIndex = -1, offset: CanIndex = 0, *, like: _CanArrayFunc | None = None + buffer: Buffer, + dtype: DTypeLike | None, + count: CanIndex = -1, + offset: CanIndex = 0, + *, + like: _CanArrayFunc | None = None, ) -> _nt.MArray[Incomplete]: ... # keep roughly in sync with `_core.numeric.fromfunction` @@ -2251,7 +2256,7 @@ def indices( @overload def indices( dimensions: _nt.ToInteger_1d, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, sparse: L[False] = False, *, fill_value: complex | None = None, @@ -2260,7 +2265,7 @@ def indices( @overload def indices( dimensions: _nt.ToInteger_1d, - dtype: DTypeLike, + dtype: DTypeLike | None, sparse: L[True], *, fill_value: complex | None = None, @@ -2269,7 +2274,7 @@ def indices( @overload def indices( dimensions: _nt.ToInteger_1d, - dtype: DTypeLike = ..., + dtype: DTypeLike | None = None, *, sparse: L[True], fill_value: complex | None = None, diff --git a/src/numpy-stubs/matlib.pyi b/src/numpy-stubs/matlib.pyi index 5ab527de..a478b629 100644 --- a/src/numpy-stubs/matlib.pyi +++ b/src/numpy-stubs/matlib.pyi @@ -611,7 +611,7 @@ def empty(shape: int | tuple[int, int], dtype: None = None, order: _Order = "C") @overload def empty(shape: int | tuple[int, int], dtype: _DTypeLike[_ScalarT], order: _Order = "C") -> _nt.Matrix[_ScalarT]: ... @overload -def empty(shape: int | tuple[int, int], dtype: npt.DTypeLike, order: _Order = "C") -> _nt.Matrix[Any]: ... +def empty(shape: int | tuple[int, int], dtype: npt.DTypeLike | None, order: _Order = "C") -> _nt.Matrix[Any]: ... # @overload @@ -619,7 +619,7 @@ def ones(shape: int | tuple[int, int], dtype: None = None, order: _Order = "C") @overload def ones(shape: int | tuple[int, int], dtype: _DTypeLike[_ScalarT], order: _Order = "C") -> _nt.Matrix[_ScalarT]: ... @overload -def ones(shape: int | tuple[int, int], dtype: npt.DTypeLike, order: _Order = "C") -> _nt.Matrix[Any]: ... +def ones(shape: int | tuple[int, int], dtype: npt.DTypeLike | None, order: _Order = "C") -> _nt.Matrix[Any]: ... # @overload @@ -627,7 +627,7 @@ def zeros(shape: int | tuple[int, int], dtype: None = None, order: _Order = "C") @overload def zeros(shape: int | tuple[int, int], dtype: _DTypeLike[_ScalarT], order: _Order = "C") -> _nt.Matrix[_ScalarT]: ... @overload -def zeros(shape: int | tuple[int, int], dtype: npt.DTypeLike, order: _Order = "C") -> _nt.Matrix[Any]: ... +def zeros(shape: int | tuple[int, int], dtype: npt.DTypeLike | None, order: _Order = "C") -> _nt.Matrix[Any]: ... # @overload @@ -640,7 +640,11 @@ def identity(n: int, dtype: npt.DTypeLike | None = None) -> _nt.Matrix[Any]: ... # @overload def eye( - n: int, M: int | None = None, k: int = 0, dtype: type[np.float64] | None = ..., order: _Order = "C" + n: int, + M: int | None = None, + k: int = 0, + dtype: _nt.ToDTypeFloat64 = float, # noqa: PYI011 + order: _Order = "C", ) -> _nt.Matrix[np.float64]: ... @overload def eye(n: int, M: int | None, k: int, dtype: _DTypeLike[_ScalarT], order: _Order = "C") -> _nt.Matrix[_ScalarT]: ... @@ -650,7 +654,11 @@ def eye( ) -> _nt.Matrix[_ScalarT]: ... @overload def eye( - n: int, M: int | None = None, k: int = 0, dtype: npt.DTypeLike = ..., order: _Order = "C" + n: int, + M: int | None = None, + k: int = 0, + dtype: npt.DTypeLike | None = float, # noqa: PYI011 + order: _Order = "C", ) -> _nt.Matrix[Any]: ... # diff --git a/src/numpy-stubs/matrixlib/defmatrix.pyi b/src/numpy-stubs/matrixlib/defmatrix.pyi index 416829dc..5861eeff 100644 --- a/src/numpy-stubs/matrixlib/defmatrix.pyi +++ b/src/numpy-stubs/matrixlib/defmatrix.pyi @@ -66,7 +66,7 @@ class matrix(np.ndarray[_ShapeT_co, _DTypeT_co]): @overload def sum(self, /, axis: _ToAxis, dtype: DTypeLike | None = None, out: None = None) -> _nt.Matrix: ... @overload - def sum(self, /, axis: _ToAxis | None, dtype: DTypeLike, out: _ArrayT) -> _ArrayT: ... + def sum(self, /, axis: _ToAxis | None, dtype: DTypeLike | None, out: _ArrayT) -> _ArrayT: ... @overload def sum(self, /, axis: _ToAxis | None = None, dtype: DTypeLike | None = None, *, out: _ArrayT) -> _ArrayT: ... # pyright: ignore[reportIncompatibleMethodOverride] diff --git a/tool/promotion.py b/tool/promotion.py index 613eeab2..d006f9ed 100644 --- a/tool/promotion.py +++ b/tool/promotion.py @@ -36,7 +36,7 @@ def _types_co(chars: str, /) -> tuple[_ToScalarType, ...]: ) -def _promotes_to(sct: npt.DTypeLike) -> tuple[_ToScalarType, ...]: +def _promotes_to(sct: npt.DTypeLike | None) -> tuple[_ToScalarType, ...]: out: list[_ToScalarType] = [] for t in (bool, int, float, complex, str, bytes, *np.sctypeDict.values()): try: @@ -48,7 +48,7 @@ def _promotes_to(sct: npt.DTypeLike) -> tuple[_ToScalarType, ...]: return tuple(dict.fromkeys(out)) -def _typename(sct: npt.DTypeLike) -> str: +def _typename(sct: npt.DTypeLike | None) -> str: if sct is None: return "None" if sct is str and "T" in CHARS: