from typing import Iterable, Iterator, Sequence, TypeVar _T = TypeVar("_T") class ProgressTQDM: def wrap( self, values: Sequence[_T] | Iterable[_T], total: int | None = None ) -> Iterator[_T]: from tqdm import tqdm return iter(tqdm(values, total=total)) class ProgressNone: def wrap( self, values: Sequence[_T] | Iterable[_T], total: int | None = None ) -> Iterator[_T]: return iter(values)