itertools.py 798 B

123456789101112131415161718192021222324252627282930313233
  1. """
  2. Thin wrappers around `itertools`.
  3. """
  4. from __future__ import absolute_import
  5. from tqdm.auto import tqdm as tqdm_auto
  6. import itertools
  7. __author__ = {"github.com/": ["casperdcl"]}
  8. __all__ = ['product']
  9. def product(*iterables, **tqdm_kwargs):
  10. """
  11. Equivalent of `itertools.product`.
  12. Parameters
  13. ----------
  14. tqdm_class : [default: tqdm.auto.tqdm].
  15. """
  16. kwargs = tqdm_kwargs.copy()
  17. tqdm_class = kwargs.pop("tqdm_class", tqdm_auto)
  18. try:
  19. lens = list(map(len, iterables))
  20. except TypeError:
  21. total = None
  22. else:
  23. total = 1
  24. for i in lens:
  25. total *= i
  26. kwargs.setdefault("total", total)
  27. with tqdm_class(**kwargs) as t:
  28. for i in itertools.product(*iterables):
  29. yield i
  30. t.update()