diff options
author | Matti Picus <matti.picus@gmail.com> | 2020-12-09 20:31:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-09 20:31:36 +0200 |
commit | b6f8b211d79327948d2c6972a62e0700975d613b (patch) | |
tree | bb95c70dacc4ca2ac7c4f0e7454cb29f60a9d6b9 | |
parent | 707a5da81def895fde4a5f6f9b6fab8ed082133e (diff) | |
parent | 0da188da1e7a65b85b73d2499f7397fea89ff7bd (diff) | |
download | numpy-b6f8b211d79327948d2c6972a62e0700975d613b.tar.gz |
Merge pull request #17795 from BvB93/x-like
ENH: Add two new `_<X>Like` unions
-rw-r--r-- | numpy/__init__.pyi | 49 | ||||
-rw-r--r-- | numpy/typing/__init__.py | 2 | ||||
-rw-r--r-- | numpy/typing/_callable.py | 2 | ||||
-rw-r--r-- | numpy/typing/_scalars.py | 8 |
4 files changed, 33 insertions, 28 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi index 9f3ba3400..83afd2e49 100644 --- a/numpy/__init__.pyi +++ b/numpy/__init__.pyi @@ -16,6 +16,7 @@ from numpy.typing import ( _IntLike, _FloatLike, _ComplexLike, + _TD64Like, _NumberLike, _SupportsDType, _VoidDTypeLike, @@ -985,10 +986,8 @@ _SortSide = Literal["left", "right"] _ArrayLikeBool = Union[_BoolLike, Sequence[_BoolLike], ndarray] _ArrayLikeIntOrBool = Union[ _IntLike, - _BoolLike, ndarray, Sequence[_IntLike], - Sequence[_BoolLike], Sequence[Sequence[Any]], # TODO: wait for support for recursive types ] @@ -1387,7 +1386,7 @@ class _ArrayOrScalarCommon: @overload def take( self, - indices: Union[_IntLike, _BoolLike], + indices: _IntLike, axis: Optional[int] = ..., out: None = ..., mode: _ModeKind = ..., @@ -1763,12 +1762,12 @@ class datetime64(generic): __value: int, __format: Union[_CharLike, Tuple[_CharLike, _IntLike]] ) -> None: ... - def __add__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> datetime64: ... - def __radd__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> datetime64: ... + def __add__(self, other: _TD64Like) -> datetime64: ... + def __radd__(self, other: _TD64Like) -> datetime64: ... @overload def __sub__(self, other: datetime64) -> timedelta64: ... @overload - def __sub__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> datetime64: ... + def __sub__(self, other: _TD64Like) -> datetime64: ... def __rsub__(self, other: datetime64) -> timedelta64: ... __lt__: _ComparisonOp[datetime64] __le__: _ComparisonOp[datetime64] @@ -1791,20 +1790,20 @@ class integer(number[_NBit_co]): # type: ignore def __index__(self) -> int: ... __truediv__: _IntTrueDiv[_NBit_co] __rtruediv__: _IntTrueDiv[_NBit_co] - def __mod__(self, value: Union[_IntLike, integer]) -> integer: ... - def __rmod__(self, value: Union[_IntLike, integer]) -> integer: ... + def __mod__(self, value: _IntLike) -> integer: ... + def __rmod__(self, value: _IntLike) -> integer: ... def __invert__(self: _IntType) -> _IntType: ... # Ensure that objects annotated as `integer` support bit-wise operations - def __lshift__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __rlshift__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __rshift__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __rrshift__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __and__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __rand__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __or__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __ror__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __xor__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... - def __rxor__(self, other: Union[_IntLike, _BoolLike]) -> integer: ... + def __lshift__(self, other: _IntLike) -> integer: ... + def __rlshift__(self, other: _IntLike) -> integer: ... + def __rshift__(self, other: _IntLike) -> integer: ... + def __rrshift__(self, other: _IntLike) -> integer: ... + def __and__(self, other: _IntLike) -> integer: ... + def __rand__(self, other: _IntLike) -> integer: ... + def __or__(self, other: _IntLike) -> integer: ... + def __ror__(self, other: _IntLike) -> integer: ... + def __xor__(self, other: _IntLike) -> integer: ... + def __rxor__(self, other: _IntLike) -> integer: ... class signedinteger(integer[_NBit_co]): def __init__(self, __value: _IntValue = ...) -> None: ... @@ -1850,12 +1849,12 @@ class timedelta64(generic): def __neg__(self: _ArraySelf) -> _ArraySelf: ... def __pos__(self: _ArraySelf) -> _ArraySelf: ... def __abs__(self: _ArraySelf) -> _ArraySelf: ... - def __add__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> timedelta64: ... - def __radd__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> timedelta64: ... - def __sub__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> timedelta64: ... - def __rsub__(self, other: Union[timedelta64, _IntLike, _BoolLike]) -> timedelta64: ... - def __mul__(self, other: Union[_FloatLike, _BoolLike]) -> timedelta64: ... - def __rmul__(self, other: Union[_FloatLike, _BoolLike]) -> timedelta64: ... + def __add__(self, other: _TD64Like) -> timedelta64: ... + def __radd__(self, other: _TD64Like) -> timedelta64: ... + def __sub__(self, other: _TD64Like) -> timedelta64: ... + def __rsub__(self, other: _TD64Like) -> timedelta64: ... + def __mul__(self, other: _FloatLike) -> timedelta64: ... + def __rmul__(self, other: _FloatLike) -> timedelta64: ... __truediv__: _TD64Div[float64] __floordiv__: _TD64Div[int64] def __rtruediv__(self, other: timedelta64) -> float64: ... @@ -1960,7 +1959,7 @@ complex128 = complexfloating[_64Bit, _64Bit] class flexible(generic): ... # type: ignore class void(flexible): - def __init__(self, __value: Union[_IntLike, _BoolLike, bytes]): ... + def __init__(self, __value: Union[_IntLike, bytes]): ... @property def real(self: _ArraySelf) -> _ArraySelf: ... @property diff --git a/numpy/typing/__init__.py b/numpy/typing/__init__.py index e72e8fb4d..d9d9557bf 100644 --- a/numpy/typing/__init__.py +++ b/numpy/typing/__init__.py @@ -210,9 +210,11 @@ del TYPE_CHECKING, final, List from ._scalars import ( _CharLike, _BoolLike, + _UIntLike, _IntLike, _FloatLike, _ComplexLike, + _TD64Like, _NumberLike, _ScalarLike, _VoidLike, diff --git a/numpy/typing/_callable.py b/numpy/typing/_callable.py index c703df28a..831921fd7 100644 --- a/numpy/typing/_callable.py +++ b/numpy/typing/_callable.py @@ -103,7 +103,7 @@ if TYPE_CHECKING or HAVE_PROTOCOL: class _BoolTrueDiv(Protocol): @overload - def __call__(self, __other: Union[float, _IntLike, _BoolLike]) -> float64: ... + def __call__(self, __other: Union[float, _IntLike]) -> float64: ... @overload def __call__(self, __other: complex) -> complex128: ... @overload diff --git a/numpy/typing/_scalars.py b/numpy/typing/_scalars.py index e4fc28b07..90b2eff7b 100644 --- a/numpy/typing/_scalars.py +++ b/numpy/typing/_scalars.py @@ -7,12 +7,16 @@ import numpy as np _CharLike = Union[str, bytes] +# The 6 `<X>Like` type-aliases below represent all scalars that can be +# coerced into `<X>` (with the casting rule `same_kind`) _BoolLike = Union[bool, np.bool_] -_IntLike = Union[int, np.integer] +_UIntLike = Union[_BoolLike, np.unsignedinteger] +_IntLike = Union[_BoolLike, int, np.integer] _FloatLike = Union[_IntLike, float, np.floating] _ComplexLike = Union[_FloatLike, complex, np.complexfloating] -_NumberLike = Union[int, float, complex, np.number, np.bool_] +_TD64Like = Union[_IntLike, np.timedelta64] +_NumberLike = Union[int, float, complex, np.number, np.bool_] _ScalarLike = Union[ int, float, |