10000 MAINT: simplifying annotations for np.core.from_numeric by BvB93 · Pull Request #16556 · numpy/numpy · GitHub
[go: up one dir, main page]

Skip to content

MAINT: simplifying annotations for np.core.from_numeric #16556

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 10, 2020
Merged
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
Next Next commit
Simplified annotations for functions requiring >=1D ArrayLike objects
* Affects a set of <20 functions from ``np.core.fromnumeric``.
* Based on feedback from numpy/numpy-stubs#71.
  • Loading branch information
Bas van Beek committed Jun 9, 2020
commit 09c2204e482b8573fbe2e8c25cef800b2df6393d
50 changes: 15 additions & 35 deletions numpy/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -936,21 +936,18 @@ def reshape(a: ArrayLike, newshape: _ShapeLike, order: _Order = ...) -> ndarray:
@overload
def choose(
a: _ScalarIntOrBool,
choices: Union[Sequence[ArrayLike], ndarray],
choices: ArrayLike,
out: Optional[ndarray] = ...,
mode: _Mode = ...,
) -> _ScalarIntOrBool: ...
@overload
def choose(
a: _IntOrBool,
choices: Union[Sequence[ArrayLike], ndarray],
out: Optional[ndarray] = ...,
mode: _Mode = ...,
a: _IntOrBool, choices: ArrayLike, out: Optional[ndarray] = ..., mode: _Mode = ...
) -> Union[integer, bool_]: ...
@overload
def choose(
a: _ArrayLikeIntOrBool,
choices: Union[Sequence[ArrayLike], ndarray],
choices: ArrayLike,
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
choices: ArrayLike,
choices: Sequence[ArrayLike],

I think it's important to emphasize that this input is not an array, as it means shapes like (0, 3) are not handled sensibly.

Copy link
Member

Choose a reason for hiding this comment

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

Same for the other overload

Copy link
Member Author

Choose a reason for hiding this comment

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

The tricky part is that, without proper shape support, expressing this will be either very difficult and/or verbose.
For example even Sequence[ArrayLike] does not include the likes of np.ndarray or pd.DataFrane, both of which are (strictly speaking) not proper sequences.

out: Optional[ndarray] = ...,
mode: _Mode = ...,
) -> ndarray: ...
Expand All @@ -960,9 +957,7 @@ def repeat(
def put(
a: ndarray, ind: _ArrayLikeIntOrBool, v: ArrayLike, mode: _Mode = ...
) -> None: ...
def swapaxes(
a: Union[Sequence[ArrayLike], ndarray], axis1: int, axis2: int
) -> ndarray: ...
def swapaxes(a: ArrayLike, axis1: int, axis2: int) -> ndarray: ...
def transpose(
a: ArrayLike, axes: Union[None, Sequence[int], ndarray] = ...
) -> ndarray: ...
Expand Down Expand Up @@ -998,51 +993,39 @@ def argpartition(
order: Union[None, str, Sequence[str]] = ...,
) -> ndarray: ...
def sort(
a: Union[Sequence[ArrayLike], ndarray],
a: ArrayLike,
axis: Optional[int] = ...,
kind: Optional[_SortKind] = ...,
order: Union[None, str, Sequence[str]] = ...,
) -> ndarray: ...
def argsort(
a: Union[Sequence[ArrayLike], ndarray],
a: ArrayLike,
axis: Optional[int] = ...,
kind: Optional[_SortKind] = ...,
order: Union[None, str, Sequence[str]] = ...,
) -> ndarray: ...
@overload
def argmax(
a: Union[Sequence[ArrayLike], ndarray],
axis: None = ...,
out: Optional[ndarray] = ...,
) -> integer: ...
def argmax(a: ArrayLike, axis: None = ..., out: Optional[ndarray] = ...) -> integer: ...
@overload
def argmax(
a: Union[Sequence[ArrayLike], ndarray],
axis: int = ...,
out: Optional[ndarray] = ...,
a: ArrayLike, axis: int = ..., out: Optional[ndarray] = ...
) -> Union[integer, ndarray]: ...
@overload
def argmin(
a: Union[Sequence[ArrayLike], ndarray],
axis: None = ...,
out: Optional[ndarray] = ...,
) -> integer: ...
def argmin(a: ArrayLike, axis: None = ..., out: Optional[ndarray] = ...) -> integer: ...
@overload
def argmin(
a: Union[Sequence[ArrayLike], ndarray],
axis: int = ...,
out: Optional[ndarray] = ...,
a: ArrayLike, axis: int = ..., out: Optional[ndarray] = ...
) -> Union[integer, ndarray]: ...
@overload
def searchsorted(
a: Union[Sequence[ArrayLike], ndarray],
a: ArrayLike,
v: _Scalar,
side: _Side = ...,
sorter: Union[None, Sequence[_IntOrBool], ndarray] = ..., # 1D int array
) -> integer: ...
@overload
def searchsorted(
a: Union[Sequence[ArrayLike], ndarray],
a: ArrayLike,
v: ArrayLike,
side: _Side = ...,
sorter: Union[None, Sequence[_IntOrBool], ndarray] = ..., # 1D int array
Expand All @@ -1053,13 +1036,10 @@ def squeeze(a: _ScalarGeneric, axis: Optional[_ShapeLike] = ...) -> _ScalarGener
@overload
def squeeze(a: ArrayLike, axis: Optional[_ShapeLike] = ...) -> ndarray: ...
def diagonal(
a: Union[Sequence[Sequence[ArrayLike]], ndarray], # >= 2D array
offset: int = ...,
axis1: int = ...,
axis2: int = ...,
a: ArrayLike, offset: int = ..., axis1: int = ..., axis2: int = ... # >= 2D array
) -> ndarray: ...
def trace(
a: Union[Sequence[Sequence[ArrayLike]], ndarray], # >= 2D array
a: ArrayLike, # >= 2D array
offset: int = ...,
axis1: int = ...,
axis2: int = ...,
Expand All @@ -1070,7 +1050,7 @@ def ravel(a: ArrayLike, order: _Order = ...) -> ndarray: ...
def nonzero(a: ArrayLike) -> Tuple[ndarray, ...]: ...
def shape(a: ArrayLike) -> _Shape: ...
def compress(
condition: Union[Sequence[_Bool], ndarray], # 1D bool array
condition: ArrayLike, # 1D bool array
a: ArrayLike,
axis: Optional[int] = ...,
out: Optional[ndarray] = ...,
Expand Down
0