__all__ = ["DataFrame", "Column", "Lazy", "LazyIter"]

import typing as T
import pyarrow
from ella.types import DataType

class Column:
    @property
    def shape(self) -> T.List[int]: ...
    @property
    def row_shape(self) -> T.Optional[T.List[int]]: ...
    @property
    def nullable(self) -> bool: ...
    @property
    def dtype(self) -> DataType: ...
    def to_arrow(self) -> pyarrow.Array: ...

class DataFrame:
    def __getitem__(self, key: T.Union[str, int]) -> Column: ...
    def to_arrow(self) -> pyarrow.Table: ...
    def arrow_schema(self) -> pyarrow.Schema: ...
    def icol(self, i: int) -> Column: ...
    def col(self, name: str) -> Column: ...
    def columns(self) -> T.List[Column]: ...

class LazyIter:
    def __iter__(self) -> "LazyIter": ...
    def __next__(self) -> DataFrame: ...

class Lazy:
    def execute(self) -> DataFrame: ...
    def create_view(self, table: str, if_not_exists: bool = True) -> "Lazy": ...
    def __iter__(self) -> LazyIter: ...
