from .format import *
import itertools
from .abc import Array as Array
from .array1d import Array1D as Array1D
from collections.abc import Sequence
from typing import Any, TypeVar

T = TypeVar('T')
Boundaries = tuple[tuple[int, int], ...]

class ArrayND(Array):
    index_format: Union[str, None]
    def __init__(self, dim: int, default: Union[T, None] = ..., *, content: Union[Sequence, None] = ..., offset: Union[tuple[int, ...], list[int], int] = ...) -> None: ...
    @property
    def dim(self) -> int: ...
    @property
    def offset(self) -> tuple[int, ...]: ...
    @property
    def shape(self) -> tuple[int, ...]: ...
    @property
    def boundaries(self) -> Boundaries: ...
    def replace_content(self, array: Sequence, offset: Union[tuple[int, ...], list[int], int] = ...) -> None: ...
    def __setitem__(self, index: tuple[int, ...], value: T) -> None: ...
    def __getitem__(self, index: Union[int, tuple[int, ...], slice]) -> Any: ...
    def __iter__(self) -> itertools.chain: ...
    def __len__(self) -> int: ...
    def __format__(self, format: str) -> str: ...
