from collections.abc import Callable, Sequence from typing import ( Any, Final, Never, NoReturn, SupportsAbs, SupportsIndex, TypeAlias, TypeGuard, TypeVar, Unpack, overload, ) from typing import Literal as L import numpy as np from numpy import ( False_, True_, _OrderCF, _OrderKACF, # re-exports bitwise_not, broadcast, complexfloating, dtype, flatiter, float64, floating, from_dlpack, # other generic, inf, int_, intp, little_endian, matmul, nan, ndarray, nditer, newaxis, object_, signedinteger, timedelta64, ufunc, unsignedinteger, vecdot, ) from numpy._typing import ( ArrayLike, DTypeLike, NDArray, _ArrayLike, _ArrayLikeBool_co, _ArrayLikeComplex_co, _ArrayLikeFloat_co, _ArrayLikeInt_co, _ArrayLikeObject_co, _ArrayLikeTD64_co, _ArrayLikeUInt_co, _DTypeLike, _NestedSequence, _ScalarLike_co, _Shape, _ShapeLike, _SupportsArrayFunc, _SupportsDType, ) from .fromnumeric import all as all from .fromnumeric import any as any from .fromnumeric import argpartition as argpartition from .fromnumeric import matrix_transpose as matrix_transpose from .fromnumeric import mean as mean from .multiarray import ( # other _Array, _ConstructorEmpty, _KwargsEmpty, # re-exports arange, array, asanyarray, asarray, ascontiguousarray, asfortranarray, can_cast, concatenate, copyto, dot, empty, empty_like, frombuffer, fromfile, fromiter, fromstring, inner, lexsort, may_share_memory, min_scalar_type, nested_iters, promote_types, putmask, result_type, shares_memory, vdot, where, zeros, ) __all__ = [ "newaxis", "ndarray", "flatiter", "nditer", "nested_iters", "ufunc", "arange", "array", "asarray", "asanyarray", "ascontiguousarray", "asfortranarray", "zeros", "count_nonzero", "empty", "broadcast", "dtype", "fromstring", "fromfile", "frombuffer", "from_dlpack", "where", "argwhere", "copyto", "concatenate", "lexsort", "astype", "can_cast", "promote_types", "min_scalar_type", "result_type", "isfortran", "empty_like", "zeros_like", "ones_like", "correlate", "convolve", "inner", "dot", "outer", "vdot", "roll", "rollaxis", "moveaxis", "cross", "tensordot", "little_endian", "fromiter", "array_equal", "array_equiv", "indices", "fromfunction", "isclose", "isscalar", "binary_repr", "base_repr", "ones", "identity", "allclose", "putmask", "flatnonzero", "inf", "nan", "False_", "True_", "bitwise_not", "full", "full_like", "matmul", "vecdot", "shares_memory", "may_share_memory", ] _T = TypeVar("_T") _ScalarT = TypeVar("_ScalarT", bound=generic) _DTypeT = TypeVar("_DTypeT", bound=np.dtype) _ArrayT = TypeVar("_ArrayT", bound=np.ndarray[Any, Any]) _ShapeT = TypeVar("_ShapeT", bound=_Shape) _AnyShapeT = TypeVar( "_AnyShapeT", tuple[()], tuple[int], tuple[int, int], tuple[int, int, int], tuple[int, int, int, int], tuple[int, ...], ) _CorrelateMode: TypeAlias = L["valid", "same", "full"] @overload def zeros_like( a: _ArrayT, dtype: None = ..., order: _OrderKACF = ..., subok: L[True] = ..., shape: None = ..., *, device: L["cpu"] | None = ..., ) -> _ArrayT: ... @overload def zeros_like( a: _ArrayLike[_ScalarT], dtype: None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def zeros_like( a: Any, dtype: _DTypeLike[_ScalarT], order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def zeros_like( a: Any, dtype: DTypeLike | None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[Any]: ... ones: Final[_ConstructorEmpty] @overload def ones_like( a: _ArrayT, dtype: None = ..., order: _OrderKACF = ..., subok: L[True] = ..., shape: None = ..., *, device: L["cpu"] | None = ..., ) -> _ArrayT: ... @overload def ones_like( a: _ArrayLike[_ScalarT], dtype: None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def ones_like( a: Any, dtype: _DTypeLike[_ScalarT], order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def ones_like( a: Any, dtype: DTypeLike | None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[Any]: ... # TODO: Add overloads for bool, int, float, complex, str, bytes, and memoryview # 1-D shape @overload def full( shape: SupportsIndex, fill_value: _ScalarT, dtype: None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[tuple[int], _ScalarT]: ... @overload def full( shape: SupportsIndex, fill_value: Any, dtype: _DTypeT | _SupportsDType[_DTypeT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> np.ndarray[tuple[int], _DTypeT]: ... @overload def full( shape: SupportsIndex, fill_value: Any, dtype: type[_ScalarT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[tuple[int], _ScalarT]: ... @overload def full( shape: SupportsIndex, fill_value: Any, dtype: DTypeLike | None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[tuple[int], Any]: ... # known shape @overload def full( shape: _AnyShapeT, fill_value: _ScalarT, dtype: None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[_AnyShapeT, _ScalarT]: ... @overload def full( shape: _AnyShapeT, fill_value: Any, dtype: _DTypeT | _SupportsDType[_DTypeT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> np.ndarray[_AnyShapeT, _DTypeT]: ... @overload def full( shape: _AnyShapeT, fill_value: Any, dtype: type[_ScalarT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[_AnyShapeT, _ScalarT]: ... @overload def full( shape: _AnyShapeT, fill_value: Any, dtype: DTypeLike | None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> _Array[_AnyShapeT, Any]: ... # unknown shape @overload def full( shape: _ShapeLike, fill_value: _ScalarT, dtype: None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> NDArray[_ScalarT]: ... @overload def full( shape: _ShapeLike, fill_value: Any, dtype: _DTypeT | _SupportsDType[_DTypeT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> np.ndarray[Any, _DTypeT]: ... @overload def full( shape: _ShapeLike, fill_value: Any, dtype: type[_ScalarT], order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> NDArray[_ScalarT]: ... @overload def full( shape: _ShapeLike, fill_value: Any, dtype: DTypeLike | None = ..., order: _OrderCF = ..., **kwargs: Unpack[_KwargsEmpty], ) -> NDArray[Any]: ... @overload def full_like( a: _ArrayT, fill_value: Any, dtype: None = ..., order: _OrderKACF = ..., subok: L[True] = ..., shape: None = ..., *, device: L["cpu"] | None = ..., ) -> _ArrayT: ... @overload def full_like( a: _ArrayLike[_ScalarT], fill_value: Any, dtype: None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def full_like( a: Any, fill_value: Any, dtype: _DTypeLike[_ScalarT], order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[_ScalarT]: ... @overload def full_like( a: Any, fill_value: Any, dtype: DTypeLike | None = ..., order: _OrderKACF = ..., subok: bool = ..., shape: _ShapeLike | None = ..., *, device: L["cpu"] | None = ..., ) -> NDArray[Any]: ... # @overload def count_nonzero(a: ArrayLike, axis: None = None, *, keepdims: L[False] = False) -> np.intp: ... @overload def count_nonzero(a: _ScalarLike_co, axis: _ShapeLike | None = None, *, keepdims: L[True]) -> np.intp: ... @overload def count_nonzero( a: NDArray[Any] | _NestedSequence[ArrayLike], axis: _ShapeLike | None = None, *, keepdims: L[True] ) -> NDArray[np.intp]: ... @overload def count_nonzero(a: ArrayLike, axis: _ShapeLike | None = None, *, keepdims: bool = False) -> Any: ... # def isfortran(a: NDArray[Any] | generic) -> bool: ... def argwhere(a: ArrayLike) -> NDArray[intp]: ... def flatnonzero(a: ArrayLike) -> NDArray[intp]: ... @overload def correlate( a: _ArrayLike[Never], v: _ArrayLike[Never], mode: _CorrelateMode = ..., ) -> NDArray[Any]: ... @overload def correlate( a: _ArrayLikeBool_co, v: _ArrayLikeBool_co, mode: _CorrelateMode = ..., ) -> NDArray[np.bool]: ... @overload def correlate( a: _ArrayLikeUInt_co, v: _ArrayLikeUInt_co, mode: _CorrelateMode = ..., ) -> NDArray[unsignedinteger]: ... @overload def correlate( a: _ArrayLikeInt_co, v: _ArrayLikeInt_co, mode: _CorrelateMode = ..., ) -> NDArray[signedinteger]: ... @overload def correlate( a: _ArrayLikeFloat_co, v: _ArrayLikeFloat_co, mode: _CorrelateMode = ..., ) -> NDArray[floating]: ... @overload def correlate( a: _ArrayLikeComplex_co, v: _ArrayLikeComplex_co, mode: _CorrelateMode = ..., ) -> NDArray[complexfloating]: ... @overload def correlate( a: _ArrayLikeTD64_co, v: _ArrayLikeTD64_co, mode: _CorrelateMode = ..., ) -> NDArray[timedelta64]: ... @overload def correlate( a: _ArrayLikeObject_co, v: _ArrayLikeObject_co, mode: _CorrelateMode = ..., ) -> NDArray[object_]: ... @overload def convolve( a: _ArrayLike[Never], v: _ArrayLike[Never], mode: _CorrelateMode = ..., ) -> NDArray[Any]: ... @overload def convolve( a: _ArrayLikeBool_co, v: _ArrayLikeBool_co, mode: _CorrelateMode = ..., ) -> NDArray[np.bool]: ... @overload def convolve( a: _ArrayLikeUInt_co, v: _ArrayLikeUInt_co, mode: _CorrelateMode = ..., ) -> NDArray[unsignedinteger]: ... @overload def convolve( a: _ArrayLikeInt_co, v: _ArrayLikeInt_co, mode: _CorrelateMode = ..., ) -> NDArray[signedinteger]: ... @overload def convolve( a: _ArrayLikeFloat_co, v: _ArrayLikeFloat_co, mode: _CorrelateMode = ..., ) -> NDArray[floating]: ... @overload def convolve( a: _ArrayLikeComplex_co, v: _ArrayLikeComplex_co, mode: _CorrelateMode = ..., ) -> NDArray[complexfloating]: ... @overload def convolve( a: _ArrayLikeTD64_co, v: _ArrayLikeTD64_co, mode: _CorrelateMode = ..., ) -> NDArray[timedelta64]: ... @overload def convolve( a: _ArrayLikeObject_co, v: _ArrayLikeObject_co, mode: _CorrelateMode = ..., ) -> NDArray[object_]: ... @overload def outer( a: _ArrayLike[Never], b: _ArrayLike[Never], out: None = ..., ) -> NDArray[Any]: ... @overload def outer( a: _ArrayLikeBool_co, b: _ArrayLikeBool_co, out: None = ..., ) -> NDArray[np.bool]: ... @overload def outer( a: _ArrayLikeUInt_co, b: _ArrayLikeUInt_co, out: None = ..., ) -> NDArray[unsignedinteger]: ... @overload def outer( a: _ArrayLikeInt_co, b: _ArrayLikeInt_co, out: None = ..., ) -> NDArray[signedinteger]: ... @overload def outer( a: _ArrayLikeFloat_co, b: _ArrayLikeFloat_co, out: None = ..., ) -> NDArray[floating]: ... @overload def outer( a: _ArrayLikeComplex_co, b: _ArrayLikeComplex_co, out: None = ..., ) -> NDArray[complexfloating]: ... @overload def outer( a: _ArrayLikeTD64_co, b: _ArrayLikeTD64_co, out: None = ..., ) -> NDArray[timedelta64]: ... @overload def outer( a: _ArrayLikeObject_co, b: _ArrayLikeObject_co, out: None = ..., ) -> NDArray[object_]: ... @overload def outer( a: _ArrayLikeComplex_co | _ArrayLikeTD64_co | _ArrayLikeObject_co, b: _ArrayLikeComplex_co | _ArrayLikeTD64_co | _ArrayLikeObject_co, out: _ArrayT, ) -> _ArrayT: ... @overload def tensordot( a: _ArrayLike[Never], b: _ArrayLike[Never], axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[Any]: ... @overload def tensordot( a: _ArrayLikeBool_co, b: _ArrayLikeBool_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[np.bool]: ... @overload def tensordot( a: _ArrayLikeUInt_co, b: _ArrayLikeUInt_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[unsignedinteger]: ... @overload def tensordot( a: _ArrayLikeInt_co, b: _ArrayLikeInt_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[signedinteger]: ... @overload def tensordot( a: _ArrayLikeFloat_co, b: _ArrayLikeFloat_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[floating]: ... @overload def tensordot( a: _ArrayLikeComplex_co, b: _ArrayLikeComplex_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[complexfloating]: ... @overload def tensordot( a: _ArrayLikeTD64_co, b: _ArrayLikeTD64_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[timedelta64]: ... @overload def tensordot( a: _ArrayLikeObject_co, b: _ArrayLikeObject_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[object_]: ... @overload def roll( a: _ArrayLike[_ScalarT], shift: _ShapeLike, axis: _ShapeLike | None = ..., ) -> NDArray[_ScalarT]: ... @overload def roll( a: ArrayLike, shift: _ShapeLike, axis: _ShapeLike | None = ..., ) -> NDArray[Any]: ... def rollaxis( a: NDArray[_ScalarT], axis: int, start: int = ..., ) -> NDArray[_ScalarT]: ... def moveaxis( a: NDArray[_ScalarT], source: _ShapeLike, destination: _ShapeLike, ) -> NDArray[_ScalarT]: ... @overload def cross( a: _ArrayLike[Never], b: _ArrayLike[Never], axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[Any]: ... @overload def cross( a: _ArrayLikeBool_co, b: _ArrayLikeBool_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NoReturn: ... @overload def cross( a: _ArrayLikeUInt_co, b: _ArrayLikeUInt_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[unsignedinteger]: ... @overload def cross( a: _ArrayLikeInt_co, b: _ArrayLikeInt_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[signedinteger]: ... @overload def cross( a: _ArrayLikeFloat_co, b: _ArrayLikeFloat_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[floating]: ... @overload def cross( a: _ArrayLikeComplex_co, b: _ArrayLikeComplex_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[complexfloating]: ... @overload def cross( a: _ArrayLikeObject_co, b: _ArrayLikeObject_co, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: int | None = ..., ) -> NDArray[object_]: ... @overload def indices( dimensions: Sequence[int], dtype: type[int] = ..., sparse: L[False] = ..., ) -> NDArray[int_]: ... @overload def indices( dimensions: Sequence[int], dtype: type[int], sparse: L[True], ) -> tuple[NDArray[int_], ...]: ... @overload def indices( dimensions: Sequence[int], dtype: type[int] = ..., *, sparse: L[True], ) -> tuple[NDArray[int_], ...]: ... @overload def indices( dimensions: Sequence[int], dtype: _DTypeLike[_ScalarT], sparse: L[False] = ..., ) -> NDArray[_ScalarT]: ... @overload def indices( dimensions: Sequence[int], dtype: _DTypeLike[_ScalarT], sparse: L[True], ) -> tuple[NDArray[_ScalarT], ...]: ... @overload def indices( dimensions: Sequence[int], dtype: DTypeLike = ..., sparse: L[False] = ..., ) -> NDArray[Any]: ... @overload def indices( dimensions: Sequence[int], dtype: DTypeLike, sparse: L[True], ) -> tuple[NDArray[Any], ...]: ... @overload def indices( dimensions: Sequence[int], dtype: DTypeLike = ..., *, sparse: L[True], ) -> tuple[NDArray[Any], ...]: ... def fromfunction( function: Callable[..., _T], shape: Sequence[int], *, dtype: DTypeLike = ..., like: _SupportsArrayFunc | None = ..., **kwargs: Any, ) -> _T: ... def isscalar(element: object) -> TypeGuard[generic | complex | str | bytes | memoryview]: ... def binary_repr(num: SupportsIndex, width: int | None = ...) -> str: ... def base_repr( number: SupportsAbs[float], base: float = ..., padding: SupportsIndex | None = ..., ) -> str: ... @overload def identity( n: int, dtype: None = ..., *, like: _SupportsArrayFunc | None = ..., ) -> NDArray[float64]: ... @overload def identity( n: int, dtype: _DTypeLike[_ScalarT], *, like: _SupportsArrayFunc | None = ..., ) -> NDArray[_ScalarT]: ... @overload def identity( n: int, dtype: DTypeLike | None = ..., *, like: _SupportsArrayFunc | None = ..., ) -> NDArray[Any]: ... def allclose( a: ArrayLike, b: ArrayLike, rtol: ArrayLike = ..., atol: ArrayLike = ..., equal_nan: bool = ..., ) -> bool: ... @overload def isclose( a: _ScalarLike_co, b: _ScalarLike_co, rtol: ArrayLike = ..., atol: ArrayLike = ..., equal_nan: bool = ..., ) -> np.bool: ... @overload def isclose( a: ArrayLike, b: ArrayLike, rtol: ArrayLike = ..., atol: ArrayLike = ..., equal_nan: bool = ..., ) -> NDArray[np.bool]: ... def array_equal(a1: ArrayLike, a2: ArrayLike, equal_nan: bool = ...) -> bool: ... def array_equiv(a1: ArrayLike, a2: ArrayLike) -> bool: ... @overload def astype( x: ndarray[_ShapeT, dtype], dtype: _DTypeLike[_ScalarT], /, *, copy: bool = ..., device: L["cpu"] | None = ..., ) -> ndarray[_ShapeT, dtype[_ScalarT]]: ... @overload def astype( x: ndarray[_ShapeT, dtype], dtype: DTypeLike, /, *, copy: bool = ..., device: L["cpu"] | None = ..., ) -> ndarray[_ShapeT, dtype]: ...