summaryrefslogtreecommitdiff
path: root/numpy/lib/arrayterator.pyi
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib/arrayterator.pyi')
-rw-r--r--numpy/lib/arrayterator.pyi53
1 files changed, 53 insertions, 0 deletions
diff --git a/numpy/lib/arrayterator.pyi b/numpy/lib/arrayterator.pyi
new file mode 100644
index 000000000..39d6fd843
--- /dev/null
+++ b/numpy/lib/arrayterator.pyi
@@ -0,0 +1,53 @@
+import sys
+from typing import (
+ List,
+ Any,
+ TypeVar,
+ Generator,
+ List,
+ Union,
+ Tuple,
+ overload,
+)
+
+from numpy import ndarray, dtype, generic
+from numpy.typing import DTypeLike
+
+# TODO: Set a shape bound once we've got proper shape support
+_Shape = TypeVar("_Shape", bound=Any)
+_DType = TypeVar("_DType", bound=dtype[Any])
+_ScalarType = TypeVar("_ScalarType", bound=generic)
+
+_Index = Union[
+ Union[ellipsis, int, slice],
+ Tuple[Union[ellipsis, int, slice], ...],
+]
+
+__all__: List[str]
+
+# NOTE: In reality `Arrayterator` does not actually inherit from `ndarray`,
+# but its ``__getattr__` method does wrap around the former and thus has
+# access to all its methods
+
+class Arrayterator(ndarray[_Shape, _DType]):
+ var: ndarray[_Shape, _DType] # type: ignore[assignment]
+ buf_size: None | int
+ start: List[int]
+ stop: List[int]
+ step: List[int]
+
+ @property # type: ignore[misc]
+ def shape(self) -> Tuple[int, ...]: ...
+ @property
+ def flat( # type: ignore[override]
+ self: ndarray[Any, dtype[_ScalarType]]
+ ) -> Generator[_ScalarType, None, None]: ...
+ def __init__(
+ self, var: ndarray[_Shape, _DType], buf_size: None | int = ...
+ ) -> None: ...
+ @overload
+ def __array__(self, dtype: None = ...) -> ndarray[Any, _DType]: ...
+ @overload
+ def __array__(self, dtype: DTypeLike) -> ndarray[Any, dtype[Any]]: ...
+ def __getitem__(self, index: _Index) -> Arrayterator[Any, _DType]: ...
+ def __iter__(self) -> Generator[ndarray[Any, _DType], None, None]: ...