from collections.abc import Iterable

from bitarray import bitarray

BytesLike = bytes | Iterable[int]

class TvmBitarrayException(Exception): ...
class TvmBitarrayOverflowException(TvmBitarrayException): ...
class TvmBitarrayUnderflowException(TvmBitarrayException): ...

class TvmBitarray(bitarray):
    def __new__(cls, size: int = ..., *args: object, **kwargs: object) -> TvmBitarray: ...
    def __init__(self, size: int = ..., *args: object, **kwargs: object) -> None: ...
    def check_overflow(self, length: int) -> None: ...
    def check_underflow(self, length: int) -> None: ...
    def extend(self, x: str | Iterable[int]) -> None: ...
    def append(self, value: int) -> None: ...
    def frombytes(self, a: BytesLike) -> None: ...
    def copy(self) -> TvmBitarray: ...
    def to_bitarray(self) -> bitarray: ...

BitarrayLike = TvmBitarray | bitarray
