import logging
from _typeshed import Incomplete
from collections.abc import Callable, Sequence
from contextlib import _GeneratorContextManager
from typing import Any, TypeVar, overload

from ..std import tqdm as std_tqdm

_TqdmT = TypeVar("_TqdmT", bound=std_tqdm[Any])

def logging_redirect_tqdm(
    loggers: Sequence[logging.Logger] | None = None, tqdm_class: type[std_tqdm[Any]] = ...
) -> _GeneratorContextManager[None]: ...

# TODO type *args, **kwargs here more precisely
# The type ignore is because mypy complains that the second overload will never be matched
# (I'm not sure that's true)
@overload
def tqdm_logging_redirect(*args, tqdm_class: Callable[..., _TqdmT], **kwargs) -> _GeneratorContextManager[_TqdmT]: ...
@overload
def tqdm_logging_redirect(*args, **kwargs) -> _GeneratorContextManager[std_tqdm[Incomplete]]: ...  # type: ignore[misc]
