tqdm 3.1.3


pip install tqdm==3.1.3

Project Links

Meta
Author: tqdm developers

Classifiers

Development Status
  • 5 - Production/Stable

License
  • OSI Approved :: MIT License

Environment
  • Console

Framework
  • IPython

Operating System
  • Microsoft :: Windows
  • MacOS :: MacOS X
  • POSIX :: Linux

Programming Language
  • Python
  • Python :: 2
  • Python :: 2.6
  • Python :: 2.7
  • Python :: 3
  • Python :: 3.2
  • Python :: 3.3
  • Python :: 3.4
  • Python :: Implementation :: PyPy

Topic
  • Software Development :: Libraries
  • Software Development :: Libraries :: Python Modules
  • Software Development :: User Interfaces
  • System :: Monitoring
  • Terminals
  • Utilities

Intended Audience
  • Developers

Logo

tqdm

Build Status Coverage Status Branch Coverage Status PyPi Status PyPi Downloads

tqdm (read taqadum, تقدّم) means “progress” in arabic.

Instantly make your loops show a progress meter - just wrap any iterable with “tqdm(iterable)”, and you’re done!

from tqdm import tqdm
for i in tqdm(range(9)):
    ...

Here’s what the output looks like:

76%|████████████████████            | 7641/10000 [00:34<00:10, 222.22 it/s]

trange(N) can be also used as a convenient shortcut for tqdm(xrange(N)).

Screenshot

Overhead is low – about 60ns per iteration (80ns with gui=True). By comparison, the well established ProgressBar has an 800ns/iter overhead. It’s a matter of taste, but we also like to think our version is much more visually appealing.

tqdm works on any platform (Linux/Windows/Mac), in any console or in a GUI, and is also friendly with IPython/Jupyter notebooks.

Installation

Latest pypi stable release

pip install tqdm

Latest development release on github

Pull and install in the current directory:

pip install -e git+https://github.com/tqdm/tqdm.git@master#egg=tqdm

Documentation

class tqdm(object):
  """
  Decorate an iterable object, returning an iterator which acts exactly
  like the orignal iterable, but prints a dynamically updating
  progressbar every time a value is requested.
  """

  def __init__(self, iterable=None, desc=None, total=None, leave=False,
               file=sys.stderr, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None,
               ascii=None, disable=False, unit='it', unit_scale=False,
               dynamic_ncols=False, smoothing=0.3):

Parameters

  • iterableiterable, optional

    Iterable to decorate with a progressbar. Leave blank [default: None] to manually manage the updates.

  • descstr, optional

    Prefix for the progressbar [default: None].

  • totalint, optional

    The number of expected iterations. If not given, len(iterable) is used if possible. As a last resort, only basic progress statistics are displayed (no ETA, no progressbar). If gui is True and this parameter needs subsequent updating, specify an initial arbitrary large positive integer, e.g. int(9e9).

  • leavebool, optional

    If [default: False], removes all traces of the progressbar upon termination of iteration.

  • fileio.TextIOWrapper or io.StringIO, optional

    Specifies where to output the progress messages [default: sys.stderr]. Uses file.write(str) and file.flush() methods.

  • ncolsint, optional

    The width of the entire output message. If specified, dynamically resizes the progressbar to stay within this bound. If [default: None], attempts to use environment width. The fallback is a meter width of 10 and no limit for the counter and statistics. If 0, will not print any meter (only stats).

  • minintervalfloat, optional

    Minimum progress update interval, in seconds [default: 0.1].

  • maxintervalfloat, optional

    Maximum progress update interval, in seconds [default: 10.0].

  • minitersint, optional

    Minimum progress update interval, in iterations [default: None]. If specified, will set mininterval to 0.

  • asciibool, optional

    If [default: None] or false, use unicode (smooth blocks) to fill the meter. The fallback is to use ASCII characters 1-9 #.

  • disablebool

    Whether to disable the entire progressbar wrapper [default: False].

  • unitstr, optional

    String that will be used to define the unit of each iteration [default: ‘it’].

  • unit_scalebool, optional

    If set, the number of iterations will be reduced/scaled automatically and a metric prefix following the International System of Units standard will be added (kilo, mega, etc.) [default: False].

  • dynamic_ncolsbool, optional

    If set, constantly alters ncols to the environment (allowing for window resizes) [default: False].

  • smoothingfloat

    Exponential moving average smoothing factor for speed estimates (ignored in GUI mode). Ranges from 0 (average speed) to 1 (current/instantaneous speed) [default: 0.3].

Returns

  • out : decorated iterator.

  def update(self, n=1):
      """
      Manually update the progress bar, useful for streams
      such as reading files.
      E.g.:
      >>> t = tqdm(total=filesize) # Initialise
      >>> for current_buffer in stream:
      ...    ...
      ...    t.update(len(current_buffer))
      >>> t.close()
      The last line is highly recommended, but possibly not necessary if
      `t.update()` will be called in such a way that `filesize` will be
      exactly reached and printed.

      Parameters
      ----------
      n  : int
          Increment to add to the internal counter of iterations
          [default: 1].
      """

  def close(self):
      """
      Cleanup and (if leave=False) close the progressbar.
      """

def trange(*args, **kwargs):
    """
    A shortcut for tqdm(xrange(*args), **kwargs).
    On Python3+ range is used instead of xrange.
    """

class tqdm_gui(tqdm):
    """
    Experimental GUI version of tqdm!
    """

def tgrange(*args, **kwargs):
    """
    Experimental GUI version of trange!
    """

Examples and Advanced Usage

See the examples folder.

tqdm can easily support callbacks/hooks and manual updates. Here’s an example with urllib:

urllib.urlretrieve documentation

[…]
If present, the hook function will be called once
on establishment of the network connection and once after each block read
thereafter. The hook will be passed three arguments; a count of blocks
transferred so far, a block size in bytes, and the total size of the file.
[…]
import tqdm
import urllib

def my_hook(**kwargs):
    t = tqdm.tqdm(**kwargs)
    last_b = [0]

    def inner(b=1, bsize=1, tsize=None, close=False):
        if close:
            t.close()
            return
        t.total = tsize
        t.update((b - last_b[0]) * bsize) # manually update the progressbar
        last_b[0] = b
    return inner

eg_link = 'http://www.doc.ic.ac.uk/~cod11/matryoshka.zip'
eg_hook = my_hook(unit='B', unit_scale=True, leave=True, miniters=1,
                  desc=eg_link.split('/')[-1]) # all optional kwargs
urllib.urlretrieve(eg_link,
                   filename='/dev/null', reporthook=eg_hook, data=None)
eg_hook(close=True)

It is recommend to use miniters=1 whenever there is potentially large differences in iteration speed (e.g. downloading a file over a patchy connection).

Contributions

To run the testing suite please make sure tox (http://tox.testrun.org/) is installed, then type tox from the command line.

Alternatively if you don’t want to use tox, a Makefile is provided with the following command:

$ make flake8
$ make test
$ make coverage

See the CONTRIBUTE file for more information.

License

MIT LICENSE.

Authors

  • Casper da Costa-Luis (casperdcl)

  • Stephen Larroque (lrq3000)

  • Hadrien Mary (hadim)

  • Noam Yorav-Raphael (noamraph)*

  • Ivan Ivanov (obiwanus)

  • Mikhail Korobov (kmike)

* Original author

4.67.1 Nov 24, 2024
4.67.0 Nov 06, 2024
4.66.6 Oct 28, 2024
4.66.5 Aug 03, 2024
4.66.4 May 02, 2024
4.66.3 May 02, 2024
4.66.2 Feb 10, 2024
4.66.1 Aug 10, 2023
4.66.0 Aug 09, 2023
4.65.2 Aug 08, 2023
4.65.1 Aug 08, 2023
4.65.0 Mar 03, 2023
4.64.1 Sep 03, 2022
4.64.0 Apr 04, 2022
4.63.2 Apr 04, 2022
4.63.1 Mar 23, 2022
4.63.0 Feb 28, 2022
4.62.3 Sep 20, 2021
4.62.2 Aug 23, 2021
4.62.1 Aug 14, 2021
4.62.0 Jul 30, 2021
4.61.2 Jul 06, 2021
4.61.1 Jun 12, 2021
4.61.0 May 24, 2021
4.60.0 Apr 06, 2021
4.59.0 Mar 05, 2021
4.58.0 Feb 25, 2021
4.57.0 Feb 18, 2021
4.56.2 Feb 10, 2021
4.56.1 Feb 09, 2021
4.56.0 Jan 11, 2021
4.55.2 Jan 09, 2021
4.55.1 Jan 02, 2021
4.55.0 Dec 25, 2020
4.54.1 Dec 05, 2020
4.54.0 Nov 27, 2020
4.53.0 Nov 21, 2020
4.52.0 Nov 16, 2020
4.51.0 Oct 25, 2020
4.50.2 Oct 08, 2020
4.50.1 Oct 07, 2020
4.50.0 Sep 28, 2020
4.49.0 Sep 12, 2020
4.48.2 Aug 03, 2020
4.48.1 Aug 03, 2020
4.48.0 Jul 16, 2020
4.47.0 Jun 28, 2020
4.46.1 Jun 03, 2020
4.46.0 May 03, 2020
4.45.0 Apr 02, 2020
4.44.1 Mar 29, 2020
4.44.0 Mar 28, 2020
4.43.0 Feb 19, 2020
4.42.1 Feb 03, 2020
4.42.0 Jan 25, 2020
4.41.1 Jan 01, 2020
4.41.0 Dec 20, 2019
4.40.2 Dec 10, 2019
4.40.1 Dec 06, 2019
4.40.0 Dec 01, 2019
4.39.0 Nov 22, 2019
4.38.0 Nov 09, 2019
4.37.0 Oct 31, 2019
4.36.1 Sep 19, 2019
4.36.0 Sep 17, 2019
4.35.0 Aug 24, 2019
4.34.0 Aug 18, 2019
4.33.0 Aug 08, 2019
4.32.2 Jun 18, 2019
4.32.1 May 13, 2019
4.32.0 May 13, 2019
4.31.1 Feb 10, 2019
4.31.0 Feb 09, 2019
4.30.0 Jan 26, 2019
4.29.1 Jan 11, 2019
4.29.0 Jan 06, 2019
4.28.1 Oct 21, 2018
4.28.0 Oct 20, 2018
4.27.0 Oct 15, 2018
4.26.0 Sep 11, 2018
4.25.0 Aug 20, 2018
4.24.0 Jul 26, 2018
4.23.4 May 22, 2018
4.23.3 May 08, 2018
4.23.2 May 02, 2018
4.23.1 Apr 25, 2018
4.23.0 Apr 15, 2018
4.22.0 Apr 11, 2018
4.21.0 Apr 08, 2018
4.20.0 Apr 03, 2018
4.19.9 Mar 27, 2018
4.19.8 Mar 16, 2018
4.19.7 Mar 12, 2018
4.19.6 Feb 27, 2018
4.19.5 Dec 10, 2017
4.19.4 Oct 15, 2017
4.19.2 Oct 08, 2017
4.19.1.post1 Oct 03, 2017
4.19.1 Oct 03, 2017
4.18.0 Sep 30, 2017
4.17.1 Sep 22, 2017
4.17.0 Sep 20, 2017
4.16.0 Sep 20, 2017
4.15.0 Jul 22, 2017
4.14.0 May 29, 2017
4.13.0 May 29, 2017
4.12.0 May 28, 2017
4.11.2 Jan 24, 2017
4.11.1 Jan 20, 2017
4.11.0 Jan 12, 2017
4.10.0 Nov 12, 2016
4.9.0 Oct 31, 2016
4.8.4 Aug 17, 2016
4.8.3 Aug 01, 2016
4.8.2 Jul 30, 2016
4.8.1 Jul 25, 2016
4.7.6 Jun 26, 2016
4.7.4 Jun 04, 2016
4.7.2 May 30, 2016
4.7.1 May 23, 2016
4.7.0 May 15, 2016
4.6.2 May 15, 2016
4.6.1 May 15, 2016
4.5.2 May 15, 2016
4.5.0 Apr 25, 2016
4.4.3 Apr 24, 2016
4.4.1 Apr 13, 2016
4.4.0 Apr 07, 2016
4.1.0 Apr 07, 2016
3.8.0 Jan 31, 2016
3.7.1 Jan 13, 2016
3.7.0 Jan 13, 2016
3.4.0 Dec 18, 2015
3.1.4 Nov 28, 2015
3.1.3 Nov 28, 2015
2.2.4 Nov 08, 2015
2.2.3 Nov 07, 2015
2.0.0 Oct 11, 2015
1.0 Oct 26, 2013
0.0rc0 Oct 11, 2015

Wheel compatibility matrix

Platform Python 2 Python 3
any

Files in release

No dependencies