Skip to content
This repository was archived by the owner on Jun 10, 2020. It is now read-only.

Commit c55e1c3

Browse files
committed
ENH: get more specific about _ArrayLike, make it public
Closes #37. Add tests to check various examples.
1 parent d816031 commit c55e1c3

File tree

3 files changed

+42
-23
lines changed

3 files changed

+42
-23
lines changed

numpy-stubs/__init__.pyi

+23-23
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ _DtypeLike = Union[
8787

8888
_NdArraySubClass = TypeVar("_NdArraySubClass", bound=ndarray)
8989

90-
_ArrayLike = TypeVar("_ArrayLike")
90+
ArrayLike = Union[int, float, complex, generic, ndarray, Sequence]
9191

9292
class dtype:
9393
names: Optional[Tuple[str, ...]]
@@ -491,14 +491,14 @@ def ones(
491491
shape: _ShapeLike, dtype: _DtypeLike = ..., order: Optional[str] = ...
492492
) -> ndarray: ...
493493
def zeros_like(
494-
a: _ArrayLike,
494+
a: ArrayLike,
495495
dtype: Optional[dtype] = ...,
496496
order: str = ...,
497497
subok: bool = ...,
498498
shape: Optional[Union[int, Sequence[int]]] = ...,
499499
) -> ndarray: ...
500500
def ones_like(
501-
a: _ArrayLike,
501+
a: ArrayLike,
502502
dtype: Optional[dtype] = ...,
503503
order: str = ...,
504504
subok: bool = ...,
@@ -508,43 +508,43 @@ def full(
508508
shape: _ShapeLike, fill_value: Any, dtype: Optional[dtype] = ..., order: str = ...
509509
) -> ndarray: ...
510510
def full_like(
511-
a: _ArrayLike,
511+
a: ArrayLike,
512512
fill_value: Any,
513513
dtype: Optional[dtype] = ...,
514514
order: str = ...,
515515
subok: bool = ...,
516516
shape: Optional[_ShapeLike] = ...,
517517
) -> ndarray: ...
518518
def count_nonzero(
519-
a: _ArrayLike, axis: Optional[Union[int, Tuple[int], Tuple[int, int]]] = ...
519+
a: ArrayLike, axis: Optional[Union[int, Tuple[int], Tuple[int, int]]] = ...
520520
) -> Union[int, ndarray]: ...
521521
def isfortran(a: ndarray) -> bool: ...
522-
def argwhere(a: _ArrayLike) -> ndarray: ...
523-
def flatnonzero(a: _ArrayLike) -> ndarray: ...
524-
def correlate(a: _ArrayLike, v: _ArrayLike, mode: str = ...) -> ndarray: ...
525-
def convolve(a: _ArrayLike, v: _ArrayLike, mode: str = ...) -> ndarray: ...
526-
def outer(a: _ArrayLike, b: _ArrayLike, out: ndarray = ...) -> ndarray: ...
522+
def argwhere(a: ArrayLike) -> ndarray: ...
523+
def flatnonzero(a: ArrayLike) -> ndarray: ...
524+
def correlate(a: ArrayLike, v: ArrayLike, mode: str = ...) -> ndarray: ...
525+
def convolve(a: ArrayLike, v: ArrayLike, mode: str = ...) -> ndarray: ...
526+
def outer(a: ArrayLike, b: ArrayLike, out: ndarray = ...) -> ndarray: ...
527527
def tensordot(
528-
a: _ArrayLike,
529-
b: _ArrayLike,
528+
a: ArrayLike,
529+
b: ArrayLike,
530530
axes: Union[
531531
int, Tuple[int, int], Tuple[Tuple[int, int], ...], Tuple[List[int, int], ...]
532532
] = ...,
533533
) -> ndarray: ...
534534
def roll(
535-
a: _ArrayLike,
535+
a: ArrayLike,
536536
shift: Union[int, Tuple[int, ...]],
537537
axis: Optional[Union[int, Tuple[int, ...]]] = ...,
538538
) -> ndarray: ...
539-
def rollaxis(a: _ArrayLike, axis: int, start: int = ...) -> ndarray: ...
539+
def rollaxis(a: ArrayLike, axis: int, start: int = ...) -> ndarray: ...
540540
def moveaxis(
541541
a: ndarray,
542542
source: Union[int, Sequence[int]],
543543
destination: Union[int, Sequence[int]],
544544
) -> ndarray: ...
545545
def cross(
546-
a: _ArrayLike,
547-
b: _ArrayLike,
546+
a: ArrayLike,
547+
b: ArrayLike,
548548
axisa: int = ...,
549549
axisb: int = ...,
550550
axisc: int = ...,
@@ -559,21 +559,21 @@ def binary_repr(num: int, width: Optional[int] = ...) -> str: ...
559559
def base_repr(number: int, base: int = ..., padding: int = ...) -> str: ...
560560
def identity(n: int, dtype: Optional[dtype] = ...) -> ndarray: ...
561561
def allclose(
562-
a: _ArrayLike,
563-
b: _ArrayLike,
562+
a: ArrayLike,
563+
b: ArrayLike,
564564
rtol: float = ...,
565565
atol: float = ...,
566566
equal_nan: bool = ...,
567567
) -> bool: ...
568568
def isclose(
569-
a: _ArrayLike,
570-
b: _ArrayLike,
569+
a: ArrayLike,
570+
b: ArrayLike,
571571
rtol: float = ...,
572572
atol: float = ...,
573573
equal_nan: bool = ...,
574574
) -> Union[bool_, ndarray]: ...
575-
def array_equal(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...
576-
def array_equiv(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...
575+
def array_equal(a1: ArrayLike, a2: ArrayLike) -> bool: ...
576+
def array_equiv(a1: ArrayLike, a2: ArrayLike) -> bool: ...
577577

578578
#
579579
# Constants
@@ -627,7 +627,7 @@ class ufunc:
627627
def __name__(self) -> str: ...
628628
def __call__(
629629
self,
630-
*args: _ArrayLike,
630+
*args: ArrayLike,
631631
out: Optional[Union[ndarray, Tuple[ndarray, ...]]] = ...,
632632
where: Optional[ndarray] = ...,
633633
# The list should be a list of tuples of ints, but since we

tests/fail/array_like_py3.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import numpy as np
2+
3+
class A: pass
4+
5+
x1: 'np.ArrayLike' = (i for i in range(10)) # E: Incompatible types in assignment
6+
x2: 'np.ArrayLike' = A() # E: Incompatible types in assignment
7+
x3: 'np.ArrayLike' = {1: 'foo', 2: 'bar'} # E: Incompatible types in assignment

tests/pass/array_like_py3.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import numpy as np
2+
3+
x1: 'np.ArrayLike' = 5
4+
x2: 'np.ArrayLike' = 1.0
5+
x3: 'np.ArrayLike' = 1 + 1j
6+
x4: 'np.ArrayLike' = np.int8(1)
7+
x5: 'np.ArrayLike' = np.float64(1)
8+
x6: 'np.ArrayLike' = np.complex128(1)
9+
x7: 'np.ArrayLike' = np.array([1, 2, 3])
10+
x8: 'np.ArrayLike' = [1, 2, 3]
11+
x9: 'np.ArrayLike' = (1, 2, 3)
12+
x10: 'np.ArrayLike' = 'foo'

0 commit comments

Comments
 (0)