summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatti Picus <matti.picus@gmail.com>2020-12-09 20:31:36 +0200
committerGitHub <noreply@github.com>2020-12-09 20:31:36 +0200
commitb6f8b211d79327948d2c6972a62e0700975d613b (patch)
treebb95c70dacc4ca2ac7c4f0e7454cb29f60a9d6b9
parent707a5da81def895fde4a5f6f9b6fab8ed082133e (diff)
parent0da188da1e7a65b85b73d2499f7397fea89ff7bd (diff)
downloadnumpy-b6f8b211d79327948d2c6972a62e0700975d613b.tar.gz
Merge pull request #17795 from BvB93/x-like
ENH: Add two new `_<X>Like` unions
-rw-r--r--numpy/__init__.pyi49
-rw-r--r--numpy/typing/__init__.py2
-rw-r--r--numpy/typing/_callable.py2
-rw-r--r--numpy/typing/_scalars.py8
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,