8000 Add type hinting for numeric.py by johanvergeer · Pull Request #38 · numpy/numpy-stubs · GitHub
[go: up one dir, main page]

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

Add type hinting for numeric.py #38

Merged
merged 6 commits into from
Jan 14, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Code cleanup using Black
  • Loading branch information
johanvergeer committed Nov 24, 2019
commit 58bc28dcd173cb0b6d4b83d42d1d26e27f7b65e2
13 changes: 12 additions & 1 deletion numpy-stubs/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,18 @@ _DtypeLike = Union[

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

_ArrayLike = TypeVar("_ArrayLike", str, int, float, bool, object, ByteString, Iterable, Container, ndarray)
_ArrayLike = TypeVar(
"_ArrayLike",
str,
int,
float,
bool,
object,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a meaningful difference between TypeVar("_ArrayLike"), TypeVar("_ArrayLike", object) and what you wrote here?

I agree that it's a good idea to clearly identify "array like" arguments, but I'm not certain this the right annotation. Note that in most cases NumPy is fine with absolutely any type of object in cases where it needs an "array like" argument

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have a good point. I was already hesitating on how to create this TypeVar, but since an array_like can be just about anything, it makes better sense to just declare it as _ArrayLike = TypeVar("_ArrayLike")

Best thing is, we can always change this TypeVar if we come to another solution.

ByteString,
Iterable,
Container,
ndarray,
)

class dtype:
names: Optional[Tuple[str, ...]]
Expand Down
214 changes: 85 additions & 129 deletions numpy-stubs/core/numeric.pyi
Original file line number Diff line number Diff line change
@@ -1,155 +1,111 @@
from types import ModuleType
from typing import Sequence, Optional, TypeVar, Union, Tuple, List, Iterable, Callable, Any

from numpy import (ndarray, dtype, _ArrayLike, _ShapeLike)

T = TypeVar('T')

from typing import (
Sequence,
Optional,
TypeVar,
Union,
Tuple,
List,
Iterable,
Callable,
Any,
)

from numpy import ndarray, dtype, _ArrayLike, _ShapeLike

T = TypeVar("T")

def zeros_like(
a: _ArrayLike,
dtype: Optional[dtype] = None,
order: str = 'K',
subok: bool = True,
shape: Optional[Union[int, Sequence[int]]] = None) -> ndarray[int]: ...


a: _ArrayLike,
dtype: Optional[dtype] = None,
order: str = "K",
subok: bool = True,
shape: Optional[Union[int, Sequence[int]]] = None,
) -> ndarray[int]: ...
def ones(
shape: _ShapeLike,
dtype: Optional[dtype] = None,
order: str = 'C') -> ndarray[int]: ...


shape: _ShapeLike, dtype: Optional[dtype] = None, order: str = "C"
) -> ndarray[int]: ...
def ones_like(
a: _ArrayLike,
dtype: Optional[dtype] = None,
order: str = 'K',
subok: bool = True,
shape: Optional[_ShapeLike] = None) -> ndarray[int]: ...


a: _ArrayLike,
dtype: Optional[dtype] = None,
order: str = "K",
subok: bool = True,
shape: Optional[_ShapeLike] = None,
) -> ndarray[int]: ...
def full(
shape: _ShapeLike,
fill_value: T,
dtype: Optional[dtype] = None,
order: str = 'C') -> ndarray[T]: ...


shape: _ShapeLike, fill_value: T, dtype: Optional[dtype] = None, order: str = "C"
) -> ndarray[T]: ...
def full_like(
a: _ArrayLike,
fill_value: T,
dtype: Optional[dtype] = None,
order: str = 'K',
subok: bool = True,
shape: Optional[_ShapeLike] = None) -> ndarray[T]: ...


a: _ArrayLike,
fill_value: T,
dtype: Optional[dtype] = None,
order: str = "K",
subok: bool = True,
shape: Optional[_ShapeLike] = None,
) -> ndarray[T]: ...
def count_nonzero(
a: _ArrayLike,
axis: Optional[Union[int, Tuple[int], Tuple[int, int]]] = None) -> Union[int, ndarray[int]]: ...


a: _ArrayLike, axis: Optional[Union[int, Tuple[int], Tuple[int, int]]] = None
) -> Union[int, ndarray[int]]: ...
def isfortran(a: ndarray) -> bool: ...


def argwhere(a: _ArrayLike) -> ndarray: ...


def flatnonzero(a: _ArrayLike) -> ndarray: ...


def correlate(a: _ArrayLike, v: _ArrayLike, mode: str = 'valid') -> ndarray: ...


def convolve(a: _ArrayLike, v: _ArrayLike, mode: str = 'full') -> ndarray: ...


def correlate(a: _ArrayLike, v: _ArrayLike, mode: str = "valid") -> ndarray: ...
def convolve(a: _ArrayLike, v: _ArrayLike, mode: str = "full") -> ndarray: ...
def outer(a: _ArrayLike, b: _ArrayLike, out: ndarray = None) -> ndarray: ...


def tensordot(
a: _ArrayLike,
b: _ArrayLike,
axes: Union[int, Tuple[int, int], Tuple[Tuple[int, int], ...], Tuple[List[int, int], ...]] = 2) -> ndarray: ...


def roll(a: _ArrayLike,
shift: Union[int, Tuple[int, ...]],
axis: Optional[Union[int, Tuple[int, ...]]] = None) -> T: ...


def rollaxis(
a: _ArrayLike,
axis: int,
start: int = 0) -> ndarray: ...


a: _ArrayLike,
b: _ArrayLike,
axes: Union[
int, Tuple[int, int], Tuple[Tuple[int, int], ...], Tuple[List[int, int], ...]
] = 2,
) -> ndarray: ...
def roll(
a: _ArrayLike,
shift: Union[int, Tuple[int, ...]],
axis: Optional[Union[int, Tuple[int, ...]]] = None,
) -> T: ...
def rollaxis(a: _ArrayLike, axis: int, start: int = 0) -> ndarray: ...
def normalize_axis_tuple(
axis: Union[int, Iterable[int]],
ndim: int,
argname: Optional[str] = None,
allow_duplicate: bool = False) -> Tuple[int, ...]: ...


axis: Union[int, Iterable[int]],
ndim: int,
argname: Optional[str] = None,
allow_duplicate: bool = False,
) -> Tuple[int, ...]: ...
def moveaxis(
a: ndarray,
source: Union[int, Sequence[int]],
destination: Union[int, Sequence[int]]) -> ndarray: ...


a: ndarray,
source: Union[int, Sequence[int]],
destination: Union[int, Sequence[int]],
) -> ndarray: ...
def cross(
a: _ArrayLike,
b: _ArrayLike,
axisa: int = -1,
axisb: int = -1,
axisc: int = -1,
axis: Optional[int] = None) -> ndarray: ...


a: _ArrayLike,
b: _ArrayLike,
axisa: int = -1,
axisb: int = -1,
axisc: int = -1,
axis: Optional[int] = None,
) -> ndarray: ...
def indices(
dimensions: Sequence[int],
dtype: dtype = int,
sparse: bool = False) -> Union[ndarray, Tuple[ndarray, ...]]: ...


def fromfunction(
function: Callable,
shape: Tuple[int, int],
**kwargs) -> Any: ...


dimensions: Sequence[int], dtype: dtype = int, sparse: bool = False
) -> Union[ndarray, Tuple[ndarray, ...]]: ...
def fromfunction(function: Callable, shape: Tuple[int, int], **kwargs) -> Any: ...
def isscalar(element: Any) -> bool: ...


def binary_repr(num: int, width: Optional[int] = None) -> str: ...


def base_repr(number: int, base: int = 2, padding: int = 0) -> str: ...


def identity(n: int, dtype: Optional[dtype] = None) -> ndarray: ...


def allclose(
a: _ArrayLike,
b: _ArrayLike,
rtol: float = 1.e-5,
atol: float = 1.e-8,
equal_nan: bool = False) -> bool: ...


a: _ArrayLike,
b: _ArrayLike,
rtol: float = 1.0e-5,
atol: float = 1.0e-8,
equal_nan: bool = False,
) -> bool: ...
def isclose(
a: _ArrayLike,
b: _ArrayLike,
rtol: float = 1.e-5,
atol: float = 1.e-8,
equal_nan: bool = False) -> _ArrayLike: ...


a: _ArrayLike,
b: _ArrayLike,
rtol: float = 1.0e-5,
atol: float = 1.0e-8,
equal_nan: bool = False,
) -> _ArrayLike: ...
def array_equal(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...


def array_equiv(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...


def extend_all(module: ModuleType): ...
0