Skip to main content

A Fast, Extensible Progress Meter

Project description

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

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

tqdm-3.1.4.zip (44.1 kB view details)

Uploaded Source

tqdm-3.1.4.tar.gz (35.5 kB view details)

Uploaded Source

Built Distributions

tqdm-3.1.4.win32.exe (221.3 kB view details)

Uploaded Source

tqdm-3.1.4-py2.py3-none-any.whl (20.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file tqdm-3.1.4.zip.

File metadata

  • Download URL: tqdm-3.1.4.zip
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for tqdm-3.1.4.zip
Algorithm Hash digest
SHA256 3a0bde2f18da66e5071daab3d8fa54819ea90d57573b43bf6629f1124ef85f83
MD5 80cd181cea05685bb9dbe4e6b6f6c016
BLAKE2b-256 6a0f1797c8773a22739df86c54dec46f472e69e0d43ce837dee6ca2c037fb284

See more details on using hashes here.

File details

Details for the file tqdm-3.1.4.tar.gz.

File metadata

  • Download URL: tqdm-3.1.4.tar.gz
  • Upload date:
  • Size: 35.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for tqdm-3.1.4.tar.gz
Algorithm Hash digest
SHA256 e2dbef0df0fd24c9ae3b2e07bef2a3607ad8431142e76d3294a5a11926d214bf
MD5 fe07ca88812abcf8e0a9d4364e0b7301
BLAKE2b-256 5ae42bf5434dd6b7849bc82fc4abb32796775976d47d846d06d36ee7c3a7fbfe

See more details on using hashes here.

File details

Details for the file tqdm-3.1.4.win32.exe.

File metadata

  • Download URL: tqdm-3.1.4.win32.exe
  • Upload date:
  • Size: 221.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for tqdm-3.1.4.win32.exe
Algorithm Hash digest
SHA256 306d3d43f3104684de7d8f6bc9ad5cd44730573f8d1b1dfc9bd3a8279eaf3d85
MD5 843e3007f88ed935247709acc69e26f6
BLAKE2b-256 f956d988fac4368293d3ce5decf347c188ec582f4b50f3004ab67429c6f40de3

See more details on using hashes here.

File details

Details for the file tqdm-3.1.4-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for tqdm-3.1.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 505ab2fee1569dbe678dbfc97f77159be1ff102076ac45eed7f902e6ef8a3e70
MD5 b9557829b7d6378c3dbd9df8058516f9
BLAKE2b-256 1ea56b2b7ec1bd21c6bfdc559899b75b743a7d2d7e971118b57c5dfdc002a1c0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page