from typing import (
    Any,
    Callable,
    Iterable as _TypingIterable,
    Tuple,
)

from ._utils import _default

class _Base:
    _iterable: _TypingIterable
    def _call(self, fn, pos, *args, **kwargs):...
    def _call_finite(self, *args, **kwargs):...
    def _call_infinite(self, *args, **kwargs):...
    def __init__(self, iterable):...
    def __iter__(self):...
    def __getitem__(self, idx):...
    def __repr__(self):...
    @staticmethod
    def from_count(start=_default, step=_default):...
    @staticmethod
    def from_empty():...
    @staticmethod
    def from_repeat(object, times=_default):...
    @staticmethod
    def from_itersubclasses(object):...
    @staticmethod
    def from_applyfunc(func, initial):...
    @staticmethod
    def from_iterfunc_sentinel(func, sentinel):...
    @staticmethod
    def from_iterfunc_exception(func, exception, first=_default):...
    @staticmethod
    def from_maybe_iterable(obj, excluded_types=_default, empty_if_none=_default):...
    @staticmethod
    def from_repeatfunc(func, *args, **times):...
    @staticmethod
    def from_tabulate(func, start=_default):...
    def accumulate(self, func=_default, start=_default):...
    def clamp(self, low=_default, high=_default, inclusive=_default,
              remove=_default):...
    def combinations(self, r):...
    def combinations_with_replacement(self, r):...
    def compress(self, selectors):...
    def cycle(self):...
    def deepflatten(self, depth=_default, types=_default, ignore=_default):...
    def dropwhile(self, predicate):...
    def duplicates(self, key=_default):...
    def enumerate(self, start=_default):...
    def filter(self, function):...
    def filterfalse(self, predicate):...
    def flatten(self):...
    def getitem(self, item):...
    def grouper(self, n, fillvalue=_default, truncate=_default):...
    def islice(self, *args):...
    def insert(self, element, idx, unpack=_default):...
    def intersperse(self, e):...
    def map(self, function):...
    def ncycles(self, n):...
    def pad(self, fillvalue=_default, nlead=_default, ntail=_default):...
    def permutations(self, r=_default):...
    def powerset(self):...
    def remove(self, idx=_default, start=_default, stop=_default):...
    def replace(self, element, idx=_default, start=_default, stop=_default,
                unpack=_default):...
    def replicate(self, times):...
    def split(self, key, maxsplit=_default,
              keep=_default, keep_before=_default, keep_after=_default,
              eq=_default):...
    def starfilter(self, pred):...
    def starmap(self, function):...
    def successive(self, times):...
    def tail(self, n):...
    def takewhile(self, predicate):...
    def unique_everseen(self, key=_default):...
    def unique_justseen(self, key=_default):...

class Iterable(_Base):

    def _get(self, fn, pos, *args, **kwargs):...
    def _get_iter(self, fn, pos, *args, **kwargs):...
    def __length_hint__(self):...
    def as_(self, cls):...
    def as_list(self):...
    def as_tuple(self):...
    def as_set(self):...
    def as_frozenset(self):...
    def as_dict(self):...
    def as_ordereddict(self):...
    def as_counter(self):...
    def as_string(self, seperator=''):...
    def reversed(self):...
    def get_all(self):...
    def get_all_distinct(self):...
    def get_all_equal(self):...
    def get_all_monotone(self, decreasing=_default, strict=_default):...
    def get_any(self):...
    def get_argmax(self, key=_default, default=_default):...
    def get_argmin(self, key=_default, default=_default):...
    def get_argsorted(self, key=_default, reverse=_default):...
    def get_count_items(self, pred=_default, eq=_default):...
    def get_first(self, default=_default, pred=_default, truthy=_default,
                  retpred=_default, retidx=_default):...
    def get_fsum(self):...
    def get_groupedby(self, key, keep=_default, reduce=_default,
                      reducestart=_default):...
    def get_last(self, default=_default, pred=_default, truthy=_default,
                 retpred=_default, retidx=_default):...
    def get_max(self, key=_default, default=_default):...
    def get_min(self, key=_default, default=_default):...
    def get_minmax(self, key=_default, default=_default):...
    def get_nth(self, n, default=_default, pred=_default, truthy=_default,
                retpred=_default, retidx=_default):...
    def get_nlargest(self, n, key=_default):...
    def get_nsmallest(self, n, key=_default):...
    def get_one(self):...
    def get_partition(self, pred=_default):...
    def get_reduce(self, *args):...
    def get_second(self, default=_default, pred=_default, truthy=_default,
                   retpred=_default, retidx=_default):...
    def get_sorted(self, key=_default, reverse=_default):...
    def get_sum(self, start=_default):...
    def get_third(self, default=_default, pred=_default, truthy=_default,
                  retpred=_default, retidx=_default):...
    def get_mean(self):...
    def get_median(self):...
    def get_median_low(self):...
    def get_median_high(self):...
    def get_median_grouped(self, interval=_default):...
    def get_mode(self):...
    def get_pstdev(self, mu=_default):...
    def get_pvariance(self, mu=_default):...
    def get_stdev(self, xbar=_default):...
    def get_variance(self, mu=_default):...
    def get_harmonic_mean(self):...
    def get_fmean(self):...
    def get_geometric_mean(self):...
    def get_multimode(self): ...
    def get_quantiles(self, n=_default, method=_default): ...


class InfiniteIterable(_Base): ...

class ManyIterables:
    _iterables: Tuple[_TypingIterable]
    def _call(self, fn, infinitecheck, *args, **kwargs):...
    def __init__(self, *iterables: _TypingIterable) -> None: ...
    def chain(self) -> Iterable: ...
    def map(self, function: Callable) -> Iterable: ...
    def merge(self, key: Callable=_default, reverse: bool = _default) -> Iterable: ...
    def product(self, repeat: int = _default) -> Iterable: ...
    def roundrobin(self) -> Iterable: ...
    def zip(self) -> Iterable: ...
    def zip_longest(self, fillvalue: Any = _default) -> Iterable: ...
