Skip to content

Commit 35dc3e2

Browse files
Bas van BeekBvB93
authored andcommitted
ENH: Add annotations for nditer and nested_iters
1 parent 7b22284 commit 35dc3e2

File tree

2 files changed

+123
-34
lines changed

2 files changed

+123
-34
lines changed

numpy/__init__.pyi

Lines changed: 110 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ from types import TracebackType, MappingProxyType
1010
from contextlib import ContextDecorator
1111

1212
from numpy._pytesttester import PytestTester
13-
from numpy.core.multiarray import flagsobj
1413
from numpy.core._internal import _ctypes
1514
from numpy.core.getlimits import MachArLike
1615

@@ -193,6 +192,7 @@ from typing import (
193192
Protocol,
194193
SupportsIndex,
195194
Final,
195+
final,
196196
)
197197

198198
# Ensures that the stubs are picked up
@@ -348,6 +348,8 @@ from numpy.core.multiarray import (
348348
geterrobj as geterrobj,
349349
fromstring as fromstring,
350350
frompyfunc as frompyfunc,
351+
nested_iters as nested_iters,
352+
flagsobj,
351353
)
352354

353355
from numpy.core.numeric import (
@@ -765,35 +767,6 @@ class memmap(ndarray[_ShapeType, _DType_co]):
765767
) -> Any: ...
766768
def __getattr__(self, key: str) -> Any: ...
767769

768-
class nditer:
769-
def __new__(
770-
cls,
771-
op: Any,
772-
flags: Any = ...,
773-
op_flags: Any = ...,
774-
op_dtypes: Any = ...,
775-
order: Any = ...,
776-
casting: Any = ...,
777-
op_axes: Any = ...,
778-
itershape: Any = ...,
779-
buffersize: Any = ...,
780-
) -> Any: ...
781-
def __getattr__(self, key: str) -> Any: ...
782-
def __enter__(self) -> nditer: ...
783-
def __exit__(
784-
self,
785-
exc_type: None | Type[BaseException],
786-
exc_value: None | BaseException,
787-
traceback: None | TracebackType,
788-
) -> None: ...
789-
def __iter__(self) -> Iterator[Any]: ...
790-
def __next__(self) -> Any: ...
791-
def __len__(self) -> int: ...
792-
def __copy__(self) -> nditer: ...
793-
def __getitem__(self, index: SupportsIndex | slice) -> Any: ...
794-
def __setitem__(self, index: SupportsIndex | slice, value: Any) -> None: ...
795-
def __delitem__(self, key: SupportsIndex | slice) -> None: ...
796-
797770
class poly1d:
798771
def __init__(
799772
self,
@@ -882,9 +855,6 @@ alltrue = all
882855

883856
def show_config() -> None: ...
884857

885-
# TODO: Sort out which parameters are positional-only
886-
def nested_iters(*args, **kwargs): ... # TODO: Sort out parameters
887-
888858
_NdArraySubClass = TypeVar("_NdArraySubClass", bound=ndarray)
889859
_DTypeScalar_co = TypeVar("_DTypeScalar_co", covariant=True, bound=generic)
890860
_ByteOrder = L["S", "<", ">", "=", "|", "L", "B", "N", "I"]
@@ -3739,3 +3709,110 @@ class record(void):
37393709
def __getitem__(self, key: str | SupportsIndex) -> Any: ...
37403710
@overload
37413711
def __getitem__(self, key: list[str]) -> record: ...
3712+
3713+
_NDIterFlagsKind = L[
3714+
"buffered",
3715+
"c_index",
3716+
"copy_if_overlap",
3717+
"common_dtype",
3718+
"delay_bufalloc",
3719+
"external_loop",
3720+
"f_index",
3721+
"grow_inner", "growinner",
3722+
"multi_index",
3723+
"ranged",
3724+
"refs_ok",
3725+
"reduce_ok",
3726+
"zerosize_ok",
3727+
]
3728+
3729+
_NDIterOpFlagsKind = L[
3730+
"aligned",
3731+
"allocate",
3732+
"arraymask",
3733+
"copy",
3734+
"config",
3735+
"nbo",
3736+
"no_subtype",
3737+
"no_broadcast",
3738+
"overlap_assume_elementwise",
3739+
"readonly",
3740+
"readwrite",
3741+
"updateifcopy",
3742+
"virtual",
3743+
"writeonly",
3744+
"writemasked"
3745+
]
3746+
3747+
@final
3748+
class nditer:
3749+
def __new__(
3750+
cls,
3751+
op: ArrayLike | Sequence[ArrayLike],
3752+
flags: None | Sequence[_NDIterFlagsKind] = ...,
3753+
op_flags: None | Sequence[Sequence[_NDIterOpFlagsKind]] = ...,
3754+
op_dtypes: DTypeLike | Sequence[DTypeLike] = ...,
3755+
order: _OrderKACF = ...,
3756+
casting: _CastingKind = ...,
3757+
op_axes: None | Sequence[Sequence[SupportsIndex]] = ...,
3758+
itershape: None | _ShapeLike = ...,
3759+
buffersize: SupportsIndex = ...,
3760+
) -> nditer: ...
3761+
def __enter__(self) -> nditer: ...
3762+
def __exit__(
3763+
self,
3764+
exc_type: None | Type[BaseException],
3765+
exc_value: None | BaseException,
3766+
traceback: None | TracebackType,
3767+
) -> None: ...
3768+
def __iter__(self) -> nditer: ...
3769+
def __next__(self) -> Tuple[NDArray[Any], ...]: ...
3770+
def __len__(self) -> int: ...
3771+
def __copy__(self) -> nditer: ...
3772+
@overload
3773+
def __getitem__(self, index: SupportsIndex) -> NDArray[Any]: ...
3774+
@overload
3775+
def __getitem__(self, index: slice) -> Tuple[NDArray[Any], ...]: ...
3776+
def __setitem__(self, index: slice | SupportsIndex, value: ArrayLike) -> None: ...
3777+
def close(self) -> None: ...
3778+
def copy(self) -> nditer: ...
3779+
def debug_print(self) -> None: ...
3780+
def enable_external_loop(self) -> None: ...
3781+
def iternext(self) -> bool: ...
3782+
def remove_axis(self, i: SupportsIndex, /) -> None: ...
3783+
def remove_multi_index(self) -> None: ...
3784+
def reset(self) -> None: ...
3785+
@property
3786+
def dtypes(self) -> Tuple[dtype[Any], ...]: ...
3787+
@property
3788+
def finished(self) -> bool: ...
3789+
@property
3790+
def has_delayed_bufalloc(self) -> bool: ...
3791+
@property
3792+
def has_index(self) -> bool: ...
3793+
@property
3794+
def has_multi_index(self) -> bool: ...
3795+
@property
3796+
def index(self) -> int: ...
3797+
@property
3798+
def iterationneedsapi(self) -> bool: ...
3799+
@property
3800+
def iterindex(self) -> int: ...
3801+
@property
3802+
def iterrange(self) -> Tuple[int, ...]: ...
3803+
@property
3804+
def itersize(self) -> int: ...
3805+
@property
3806+
def itviews(self) -> Tuple[NDArray[Any], ...]: ...
3807+
@property
3808+
def multi_index(self) -> Tuple[int, ...]: ...
3809+
@property
3810+
def ndim(self) -> int: ...
3811+
@property
3812+
def nop(self) -> int: ...
3813+
@property
3814+
def operands(self) -> Tuple[NDArray[Any], ...]: ...
3815+
@property
3816+
def shape(self) -> Tuple[int, ...]: ...
3817+
@property
3818+
def value(self) -> Tuple[NDArray[Any], ...]: ...

numpy/core/multiarray.pyi

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ from numpy import (
3030
nditer as nditer,
3131

3232
# The rest
33-
nditer,
3433
ufunc,
3534
str_,
3635
bool_,
@@ -51,6 +50,8 @@ from numpy import (
5150
_ModeKind,
5251
_SupportsBuffer,
5352
_IOProtocol,
53+
_NDIterFlagsKind,
54+
_NDIterOpFlagsKind,
5455
)
5556

5657
from numpy.typing import (
@@ -1012,3 +1013,14 @@ class flagsobj:
10121013
def owndata(self) -> bool: ...
10131014
def __getitem__(self, key: _GetItemKeys) -> bool: ...
10141015
def __setitem__(self, key: _SetItemKeys, value: bool) -> None: ...
1016+
1017+
def nested_iters(
1018+
op: ArrayLike | Sequence[ArrayLike],
1019+
axes: Sequence[Sequence[SupportsIndex]],
1020+
flags: None | Sequence[_NDIterFlagsKind] = ...,
1021+
op_flags: None | Sequence[Sequence[_NDIterOpFlagsKind]] = ...,
1022+
op_dtypes: DTypeLike | Sequence[DTypeLike] = ...,
1023+
order: _OrderKACF = ...,
1024+
casting: _CastingKind = ...,
1025+
buffersize: SupportsIndex = ...,
1026+
) -> Tuple[nditer, ...]: ...

0 commit comments

Comments
 (0)