123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- """A module with private type-check-only `numpy.ufunc` subclasses.
- The signatures of the ufuncs are too varied to reasonably type
- with a single class. So instead, `ufunc` has been expanded into
- four private subclasses, one for each combination of
- `~ufunc.nin` and `~ufunc.nout`.
- """
- from typing import (
- Any,
- Generic,
- overload,
- TypeVar,
- Literal,
- SupportsIndex,
- Protocol,
- )
- from numpy import ufunc, _CastingKind, _OrderKACF
- from numpy.typing import NDArray
- from ._shape import _ShapeLike
- from ._scalars import _ScalarLike_co
- from ._array_like import ArrayLike, _ArrayLikeBool_co, _ArrayLikeInt_co
- from ._dtype_like import DTypeLike
- _T = TypeVar("_T")
- _2Tuple = tuple[_T, _T]
- _3Tuple = tuple[_T, _T, _T]
- _4Tuple = tuple[_T, _T, _T, _T]
- _NTypes = TypeVar("_NTypes", bound=int)
- _IDType = TypeVar("_IDType", bound=Any)
- _NameType = TypeVar("_NameType", bound=str)
- class _SupportsArrayUFunc(Protocol):
- def __array_ufunc__(
- self,
- ufunc: ufunc,
- method: Literal["__call__", "reduce", "reduceat", "accumulate", "outer", "inner"],
- *inputs: Any,
- **kwargs: Any,
- ) -> Any: ...
- # NOTE: In reality `extobj` should be a length of list 3 containing an
- # int, an int, and a callable, but there's no way to properly express
- # non-homogenous lists.
- # Use `Any` over `Union` to avoid issues related to lists invariance.
- # NOTE: `reduce`, `accumulate`, `reduceat` and `outer` raise a ValueError for
- # ufuncs that don't accept two input arguments and return one output argument.
- # In such cases the respective methods are simply typed as `None`.
- # NOTE: Similarly, `at` won't be defined for ufuncs that return
- # multiple outputs; in such cases `at` is typed as `None`
- # NOTE: If 2 output types are returned then `out` must be a
- # 2-tuple of arrays. Otherwise `None` or a plain array are also acceptable
- class _UFunc_Nin1_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): # type: ignore[misc]
- @property
- def __name__(self) -> _NameType: ...
- @property
- def ntypes(self) -> _NTypes: ...
- @property
- def identity(self) -> _IDType: ...
- @property
- def nin(self) -> Literal[1]: ...
- @property
- def nout(self) -> Literal[1]: ...
- @property
- def nargs(self) -> Literal[2]: ...
- @property
- def signature(self) -> None: ...
- @property
- def reduce(self) -> None: ...
- @property
- def accumulate(self) -> None: ...
- @property
- def reduceat(self) -> None: ...
- @property
- def outer(self) -> None: ...
- @overload
- def __call__(
- self,
- __x1: _ScalarLike_co,
- out: None = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _2Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> Any: ...
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- out: None | NDArray[Any] | tuple[NDArray[Any]] = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _2Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> NDArray[Any]: ...
- @overload
- def __call__(
- self,
- __x1: _SupportsArrayUFunc,
- out: None | NDArray[Any] | tuple[NDArray[Any]] = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _2Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> Any: ...
- def at(
- self,
- a: _SupportsArrayUFunc,
- indices: _ArrayLikeInt_co,
- /,
- ) -> None: ...
- class _UFunc_Nin2_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): # type: ignore[misc]
- @property
- def __name__(self) -> _NameType: ...
- @property
- def ntypes(self) -> _NTypes: ...
- @property
- def identity(self) -> _IDType: ...
- @property
- def nin(self) -> Literal[2]: ...
- @property
- def nout(self) -> Literal[1]: ...
- @property
- def nargs(self) -> Literal[3]: ...
- @property
- def signature(self) -> None: ...
- @overload
- def __call__(
- self,
- __x1: _ScalarLike_co,
- __x2: _ScalarLike_co,
- out: None = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> Any: ...
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- __x2: ArrayLike,
- out: None | NDArray[Any] | tuple[NDArray[Any]] = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> NDArray[Any]: ...
- def at(
- self,
- a: NDArray[Any],
- indices: _ArrayLikeInt_co,
- b: ArrayLike,
- /,
- ) -> None: ...
- def reduce(
- self,
- array: ArrayLike,
- axis: None | _ShapeLike = ...,
- dtype: DTypeLike = ...,
- out: None | NDArray[Any] = ...,
- keepdims: bool = ...,
- initial: Any = ...,
- where: _ArrayLikeBool_co = ...,
- ) -> Any: ...
- def accumulate(
- self,
- array: ArrayLike,
- axis: SupportsIndex = ...,
- dtype: DTypeLike = ...,
- out: None | NDArray[Any] = ...,
- ) -> NDArray[Any]: ...
- def reduceat(
- self,
- array: ArrayLike,
- indices: _ArrayLikeInt_co,
- axis: SupportsIndex = ...,
- dtype: DTypeLike = ...,
- out: None | NDArray[Any] = ...,
- ) -> NDArray[Any]: ...
- # Expand `**kwargs` into explicit keyword-only arguments
- @overload
- def outer(
- self,
- A: _ScalarLike_co,
- B: _ScalarLike_co,
- /, *,
- out: None = ...,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> Any: ...
- @overload
- def outer( # type: ignore[misc]
- self,
- A: ArrayLike,
- B: ArrayLike,
- /, *,
- out: None | NDArray[Any] | tuple[NDArray[Any]] = ...,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> NDArray[Any]: ...
- class _UFunc_Nin1_Nout2(ufunc, Generic[_NameType, _NTypes, _IDType]): # type: ignore[misc]
- @property
- def __name__(self) -> _NameType: ...
- @property
- def ntypes(self) -> _NTypes: ...
- @property
- def identity(self) -> _IDType: ...
- @property
- def nin(self) -> Literal[1]: ...
- @property
- def nout(self) -> Literal[2]: ...
- @property
- def nargs(self) -> Literal[3]: ...
- @property
- def signature(self) -> None: ...
- @property
- def at(self) -> None: ...
- @property
- def reduce(self) -> None: ...
- @property
- def accumulate(self) -> None: ...
- @property
- def reduceat(self) -> None: ...
- @property
- def outer(self) -> None: ...
- @overload
- def __call__(
- self,
- __x1: _ScalarLike_co,
- __out1: None = ...,
- __out2: None = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> _2Tuple[Any]: ...
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- __out1: None | NDArray[Any] = ...,
- __out2: None | NDArray[Any] = ...,
- *,
- out: _2Tuple[NDArray[Any]] = ...,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> _2Tuple[NDArray[Any]]: ...
- @overload
- def __call__(
- self,
- __x1: _SupportsArrayUFunc,
- __out1: None | NDArray[Any] = ...,
- __out2: None | NDArray[Any] = ...,
- *,
- out: _2Tuple[NDArray[Any]] = ...,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> _2Tuple[Any]: ...
- class _UFunc_Nin2_Nout2(ufunc, Generic[_NameType, _NTypes, _IDType]): # type: ignore[misc]
- @property
- def __name__(self) -> _NameType: ...
- @property
- def ntypes(self) -> _NTypes: ...
- @property
- def identity(self) -> _IDType: ...
- @property
- def nin(self) -> Literal[2]: ...
- @property
- def nout(self) -> Literal[2]: ...
- @property
- def nargs(self) -> Literal[4]: ...
- @property
- def signature(self) -> None: ...
- @property
- def at(self) -> None: ...
- @property
- def reduce(self) -> None: ...
- @property
- def accumulate(self) -> None: ...
- @property
- def reduceat(self) -> None: ...
- @property
- def outer(self) -> None: ...
- @overload
- def __call__(
- self,
- __x1: _ScalarLike_co,
- __x2: _ScalarLike_co,
- __out1: None = ...,
- __out2: None = ...,
- *,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _4Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> _2Tuple[Any]: ...
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- __x2: ArrayLike,
- __out1: None | NDArray[Any] = ...,
- __out2: None | NDArray[Any] = ...,
- *,
- out: _2Tuple[NDArray[Any]] = ...,
- where: None | _ArrayLikeBool_co = ...,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _4Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- ) -> _2Tuple[NDArray[Any]]: ...
- class _GUFunc_Nin2_Nout1(ufunc, Generic[_NameType, _NTypes, _IDType]): # type: ignore[misc]
- @property
- def __name__(self) -> _NameType: ...
- @property
- def ntypes(self) -> _NTypes: ...
- @property
- def identity(self) -> _IDType: ...
- @property
- def nin(self) -> Literal[2]: ...
- @property
- def nout(self) -> Literal[1]: ...
- @property
- def nargs(self) -> Literal[3]: ...
- # NOTE: In practice the only gufunc in the main namespace is `matmul`,
- # so we can use its signature here
- @property
- def signature(self) -> Literal["(n?,k),(k,m?)->(n?,m?)"]: ...
- @property
- def reduce(self) -> None: ...
- @property
- def accumulate(self) -> None: ...
- @property
- def reduceat(self) -> None: ...
- @property
- def outer(self) -> None: ...
- @property
- def at(self) -> None: ...
- # Scalar for 1D array-likes; ndarray otherwise
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- __x2: ArrayLike,
- out: None = ...,
- *,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- axes: list[_2Tuple[SupportsIndex]] = ...,
- ) -> Any: ...
- @overload
- def __call__(
- self,
- __x1: ArrayLike,
- __x2: ArrayLike,
- out: NDArray[Any] | tuple[NDArray[Any]],
- *,
- casting: _CastingKind = ...,
- order: _OrderKACF = ...,
- dtype: DTypeLike = ...,
- subok: bool = ...,
- signature: str | _3Tuple[None | str] = ...,
- extobj: list[Any] = ...,
- axes: list[_2Tuple[SupportsIndex]] = ...,
- ) -> NDArray[Any]: ...
|