| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # pyright: reportIncompatibleMethodOverride=false
- from collections.abc import Generator
- from types import EllipsisType
- from typing import Any, Final, TypeAlias, overload
- from typing_extensions import TypeVar
- import numpy as np
- __all__ = ["Arrayterator"]
- _ShapeT_co = TypeVar("_ShapeT_co", bound=tuple[int, ...], covariant=True)
- _DTypeT = TypeVar("_DTypeT", bound=np.dtype[Any])
- _DTypeT_co = TypeVar("_DTypeT_co", bound=np.dtype[Any], covariant=True)
- _ScalarT = TypeVar("_ScalarT", bound=np.generic)
- _AnyIndex: TypeAlias = EllipsisType | int | slice | tuple[EllipsisType | int | slice, ...]
- # 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(np.ndarray[_ShapeT_co, _DTypeT_co]):
- var: np.ndarray[_ShapeT_co, _DTypeT_co] # type: ignore[assignment]
- buf_size: Final[int | None]
- start: Final[list[int]]
- stop: Final[list[int]]
- step: Final[list[int]]
- @property # type: ignore[misc]
- def shape(self) -> _ShapeT_co: ...
- @property
- def flat(self: Arrayterator[Any, np.dtype[_ScalarT]]) -> Generator[_ScalarT]: ... # type: ignore[override]
- #
- def __init__(self, /, var: np.ndarray[_ShapeT_co, _DTypeT_co], buf_size: int | None = None) -> None: ...
- def __getitem__(self, index: _AnyIndex, /) -> Arrayterator[tuple[int, ...], _DTypeT_co]: ... # type: ignore[override]
- def __iter__(self) -> Generator[np.ndarray[tuple[int, ...], _DTypeT_co]]: ...
- #
- @overload # type: ignore[override]
- def __array__(self, /, dtype: None = None, copy: bool | None = None) -> np.ndarray[_ShapeT_co, _DTypeT_co]: ...
- @overload
- def __array__(self, /, dtype: _DTypeT, copy: bool | None = None) -> np.ndarray[_ShapeT_co, _DTypeT]: ...
|