| | """
|
| | A module with various ``typing.Protocol`` subclasses that implement
|
| | the ``__call__`` magic method.
|
| |
|
| | See the `Mypy documentation`_ on protocols for more details.
|
| |
|
| | .. _`Mypy documentation`: https://mypy.readthedocs.io/en/stable/protocols.html#callback-protocols
|
| |
|
| | """
|
| |
|
| | from typing import (
|
| | TypeAlias,
|
| | TypeVar,
|
| | final,
|
| | overload,
|
| | Any,
|
| | NoReturn,
|
| | Protocol,
|
| | type_check_only,
|
| | )
|
| |
|
| | import numpy as np
|
| | from numpy import (
|
| | generic,
|
| | number,
|
| | integer,
|
| | unsignedinteger,
|
| | signedinteger,
|
| | int8,
|
| | int_,
|
| | floating,
|
| | float64,
|
| | complexfloating,
|
| | complex128,
|
| | )
|
| | from ._nbit import _NBitInt
|
| | from ._scalars import (
|
| | _BoolLike_co,
|
| | _IntLike_co,
|
| | _NumberLike_co,
|
| | )
|
| | from . import NBitBase
|
| | from ._array_like import NDArray
|
| | from ._nested_sequence import _NestedSequence
|
| |
|
| | _T1 = TypeVar("_T1")
|
| | _T2 = TypeVar("_T2")
|
| | _T1_contra = TypeVar("_T1_contra", contravariant=True)
|
| | _T2_contra = TypeVar("_T2_contra", contravariant=True)
|
| |
|
| | _2Tuple: TypeAlias = tuple[_T1, _T1]
|
| |
|
| | _NBit1 = TypeVar("_NBit1", bound=NBitBase)
|
| | _NBit2 = TypeVar("_NBit2", bound=NBitBase)
|
| |
|
| | _IntType = TypeVar("_IntType", bound=integer[Any])
|
| | _FloatType = TypeVar("_FloatType", bound=floating[Any])
|
| | _NumberType = TypeVar("_NumberType", bound=number[Any])
|
| | _NumberType_co = TypeVar("_NumberType_co", covariant=True, bound=number[Any])
|
| | _GenericType_co = TypeVar("_GenericType_co", covariant=True, bound=generic)
|
| |
|
| | @type_check_only
|
| | class _BoolOp(Protocol[_GenericType_co]):
|
| | @overload
|
| | def __call__(self, other: _BoolLike_co, /) -> _GenericType_co: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> int_: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: complex, /) -> complex128: ...
|
| | @overload
|
| | def __call__(self, other: _NumberType, /) -> _NumberType: ...
|
| |
|
| | @type_check_only
|
| | class _BoolBitOp(Protocol[_GenericType_co]):
|
| | @overload
|
| | def __call__(self, other: _BoolLike_co, /) -> _GenericType_co: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> int_: ...
|
| | @overload
|
| | def __call__(self, other: _IntType, /) -> _IntType: ...
|
| |
|
| | @type_check_only
|
| | class _BoolSub(Protocol):
|
| |
|
| | @overload
|
| | def __call__(self, other: bool, /) -> NoReturn: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> int_: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: complex, /) -> complex128: ...
|
| | @overload
|
| | def __call__(self, other: _NumberType, /) -> _NumberType: ...
|
| |
|
| | @type_check_only
|
| | class _BoolTrueDiv(Protocol):
|
| | @overload
|
| | def __call__(self, other: float | _IntLike_co, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: complex, /) -> complex128: ...
|
| | @overload
|
| | def __call__(self, other: _NumberType, /) -> _NumberType: ...
|
| |
|
| | @type_check_only
|
| | class _BoolMod(Protocol):
|
| | @overload
|
| | def __call__(self, other: _BoolLike_co, /) -> int8: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> int_: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: _IntType, /) -> _IntType: ...
|
| | @overload
|
| | def __call__(self, other: _FloatType, /) -> _FloatType: ...
|
| |
|
| | @type_check_only
|
| | class _BoolDivMod(Protocol):
|
| | @overload
|
| | def __call__(self, other: _BoolLike_co, /) -> _2Tuple[int8]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> _2Tuple[int_]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> _2Tuple[np.float64]: ...
|
| | @overload
|
| | def __call__(self, other: _IntType, /) -> _2Tuple[_IntType]: ...
|
| | @overload
|
| | def __call__(self, other: _FloatType, /) -> _2Tuple[_FloatType]: ...
|
| |
|
| | @type_check_only
|
| | class _IntTrueDiv(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> floating[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> floating[_NBit1] | floating[_NBitInt]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> floating[_NBit1] | float64: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: complex, /
|
| | ) -> complexfloating[_NBit1, _NBit1] | complex128: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: integer[_NBit2], /
|
| | ) -> floating[_NBit1] | floating[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _UnsignedIntOp(Protocol[_NBit1]):
|
| |
|
| | @overload
|
| | def __call__(self, other: int, /) -> unsignedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: complex, /) -> complex128: ...
|
| | @overload
|
| | def __call__(self, other: unsignedinteger[_NBit2], /) -> unsignedinteger[_NBit1] | unsignedinteger[_NBit2]: ...
|
| | @overload
|
| | def __call__(self, other: signedinteger, /) -> Any: ...
|
| |
|
| | @type_check_only
|
| | class _UnsignedIntBitOp(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> unsignedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> signedinteger[Any]: ...
|
| | @overload
|
| | def __call__(self, other: signedinteger[Any], /) -> signedinteger[Any]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: unsignedinteger[_NBit2], /
|
| | ) -> unsignedinteger[_NBit1] | unsignedinteger[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _UnsignedIntMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> unsignedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int | signedinteger[Any], /) -> Any: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> floating[_NBit1] | float64: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: unsignedinteger[_NBit2], /
|
| | ) -> unsignedinteger[_NBit1] | unsignedinteger[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _UnsignedIntDivMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> _2Tuple[signedinteger[_NBit1]]: ...
|
| | @overload
|
| | def __call__(self, other: int | signedinteger[Any], /) -> _2Tuple[Any]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> _2Tuple[floating[_NBit1]] | _2Tuple[float64]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: unsignedinteger[_NBit2], /
|
| | ) -> _2Tuple[unsignedinteger[_NBit1]] | _2Tuple[unsignedinteger[_NBit2]]: ...
|
| |
|
| | @type_check_only
|
| | class _SignedIntOp(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: int, /) -> signedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> float64: ...
|
| | @overload
|
| | def __call__(self, other: complex, /) -> complex128: ...
|
| | @overload
|
| | def __call__(self, other: signedinteger[_NBit2], /) -> signedinteger[_NBit1] | signedinteger[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _SignedIntBitOp(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> signedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> signedinteger[_NBit1] | int_: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: signedinteger[_NBit2], /
|
| | ) -> signedinteger[_NBit1] | signedinteger[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _SignedIntMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> signedinteger[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> signedinteger[_NBit1] | int_: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> floating[_NBit1] | float64: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: signedinteger[_NBit2], /
|
| | ) -> signedinteger[_NBit1] | signedinteger[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _SignedIntDivMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> _2Tuple[signedinteger[_NBit1]]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> _2Tuple[signedinteger[_NBit1]] | _2Tuple[int_]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> _2Tuple[floating[_NBit1]] | _2Tuple[float64]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: signedinteger[_NBit2], /
|
| | ) -> _2Tuple[signedinteger[_NBit1]] | _2Tuple[signedinteger[_NBit2]]: ...
|
| |
|
| | @type_check_only
|
| | class _FloatOp(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: int, /) -> floating[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> floating[_NBit1] | float64: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: complex, /
|
| | ) -> complexfloating[_NBit1, _NBit1] | complex128: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: integer[_NBit2] | floating[_NBit2], /
|
| | ) -> floating[_NBit1] | floating[_NBit2]: ...
|
| |
|
| | @type_check_only
|
| | class _FloatMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> floating[_NBit1]: ...
|
| | @overload
|
| | def __call__(self, other: int, /) -> floating[_NBit1] | floating[_NBitInt]: ...
|
| | @overload
|
| | def __call__(self, other: float, /) -> floating[_NBit1] | float64: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: integer[_NBit2] | floating[_NBit2], /
|
| | ) -> floating[_NBit1] | floating[_NBit2]: ...
|
| |
|
| | class _FloatDivMod(Protocol[_NBit1]):
|
| | @overload
|
| | def __call__(self, other: bool, /) -> _2Tuple[floating[_NBit1]]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: int, /
|
| | ) -> _2Tuple[floating[_NBit1]] | _2Tuple[floating[_NBitInt]]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: float, /
|
| | ) -> _2Tuple[floating[_NBit1]] | _2Tuple[float64]: ...
|
| | @overload
|
| | def __call__(
|
| | self, other: integer[_NBit2] | floating[_NBit2], /
|
| | ) -> _2Tuple[floating[_NBit1]] | _2Tuple[floating[_NBit2]]: ...
|
| |
|
| | @type_check_only
|
| | class _NumberOp(Protocol):
|
| | def __call__(self, other: _NumberLike_co, /) -> Any: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _SupportsLT(Protocol):
|
| | def __lt__(self, other: Any, /) -> Any: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _SupportsLE(Protocol):
|
| | def __le__(self, other: Any, /) -> Any: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _SupportsGT(Protocol):
|
| | def __gt__(self, other: Any, /) -> Any: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _SupportsGE(Protocol):
|
| | def __ge__(self, other: Any, /) -> Any: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _ComparisonOpLT(Protocol[_T1_contra, _T2_contra]):
|
| | @overload
|
| | def __call__(self, other: _T1_contra, /) -> np.bool: ...
|
| | @overload
|
| | def __call__(self, other: _T2_contra, /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _NestedSequence[_SupportsGT], /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _SupportsGT, /) -> np.bool: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _ComparisonOpLE(Protocol[_T1_contra, _T2_contra]):
|
| | @overload
|
| | def __call__(self, other: _T1_contra, /) -> np.bool: ...
|
| | @overload
|
| | def __call__(self, other: _T2_contra, /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _NestedSequence[_SupportsGE], /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _SupportsGE, /) -> np.bool: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _ComparisonOpGT(Protocol[_T1_contra, _T2_contra]):
|
| | @overload
|
| | def __call__(self, other: _T1_contra, /) -> np.bool: ...
|
| | @overload
|
| | def __call__(self, other: _T2_contra, /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _NestedSequence[_SupportsLT], /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _SupportsLT, /) -> np.bool: ...
|
| |
|
| | @final
|
| | @type_check_only
|
| | class _ComparisonOpGE(Protocol[_T1_contra, _T2_contra]):
|
| | @overload
|
| | def __call__(self, other: _T1_contra, /) -> np.bool: ...
|
| | @overload
|
| | def __call__(self, other: _T2_contra, /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _NestedSequence[_SupportsGT], /) -> NDArray[np.bool]: ...
|
| | @overload
|
| | def __call__(self, other: _SupportsGT, /) -> np.bool: ...
|
| |
|