import decimal
from faster_eth_abi.encoding import (
    BaseArrayEncoder as BaseArrayEncoder,
    BaseEncoder as BaseEncoder,
    BaseFixedEncoder as BaseFixedEncoder,
    PackedArrayEncoder as PackedArrayEncoder,
    SignedFixedEncoder as SignedFixedEncoder,
    SizedArrayEncoder as SizedArrayEncoder,
    TupleEncoder as TupleEncoder,
    UnsignedFixedEncoder as UnsignedFixedEncoder,
)
from faster_eth_abi.exceptions import (
    IllegalValue as IllegalValue,
    ValueOutOfBounds as ValueOutOfBounds,
)
from faster_eth_abi.utils.localcontext import DECIMAL_CONTEXT as DECIMAL_CONTEXT
from faster_eth_abi.utils.numeric import ceil32 as ceil32
from faster_eth_abi.utils.padding import zpad_right as zpad_right
from typing import Any, Callable, Sequence, TypeVar

T = TypeVar("T")

def validate_tuple(self, value: Sequence[Any]) -> None: ...
def encode_tuple(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_all_dynamic(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic1(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic2(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic3(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic4(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic5(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic6(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic7(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic8(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic9(self, values: Sequence[Any]) -> bytes: ...
def encode_tuple_no_dynamic10(self, values: Sequence[Any]) -> bytes: ...

encode_tuple_no_dynamic_funcs: dict[int, Callable[[TupleEncoder, Sequence[Any]], bytes]]

def validate_fixed(self, value: decimal.Decimal) -> None: ...
def encode_fixed_bigendian(
    value: Any, encode_fn: Callable[[Any], bytes], data_byte_size: int
) -> bytes: ...
def encode_fixed_smallendian(
    value: Any, encode_fn: Callable[[Any], bytes], data_byte_size: int
) -> bytes: ...
def encode_unsigned_fixed(self, value: decimal.Decimal) -> bytes: ...
def encode_signed_fixed(self, value: decimal.Decimal) -> bytes: ...
def encode_signed(
    value: T, encode_fn: Callable[[T], bytes], data_byte_size: int
) -> bytes: ...
def encode_bytestring(value: bytes) -> bytes: ...
def encode_text(value: str) -> bytes: ...
def validate_array(array_encoder: BaseArrayEncoder, value: Sequence[Any]) -> None: ...
def encode_elements(item_encoder: BaseEncoder, value: Sequence[Any]) -> bytes: ...
def validate_packed_array(
    array_encoder: PackedArrayEncoder, value: Sequence[Any]
) -> None: ...
def validate_sized_array(
    array_encoder: SizedArrayEncoder, value: Sequence[Any]
) -> None: ...
def encode_elements_dynamic(
    item_encoder: BaseEncoder, value: Sequence[Any]
) -> bytes: ...
def encode_uint_256(i: int) -> bytes: ...
def int_to_big_endian(value: int) -> bytes: ...
