Git Product home page Git Product logo

python-etatime's Introduction

ETA Time

A library for tracking, computing, and formatting time estimates in Python. (Based on tqdm.)

Python Version PyPI Version

GitHub Build Codecov Coverage Codacy Badge

License PyPI Downloads

Why?

tqdm is probably the most popular option for Python programmers to show progress in their programs. However, I wasn't happy with the default formatting code options, and wanted something that was easier to read and understand for an average user.

In addition, I wanted to be able to access information like ETA in my code. While tqdm sort of lets you do this, it's not well documented, and you would have to dig through the source code to get the values and formulas you want.

etatime is my answer to this. It's a minimal wrapper around tqdm that adds additional formatting codes and well-documented progress stats tracking.

Basic Usage

The main feature of this library is the EtaBar class. This is a wrapper for the tqdm.tqdm class that provides variables which track important ETA state information for use elsewhere in your code.

This uses another package I made called timefmt to format the times into human-readable text.

For more information on the := (walrus) operator, see the documentation.

import time, random
import timefmt
from etatime import EtaBar

for item in (eta := EtaBar(range(9999999))):  # Creates a progress bar which tracks stats
    ...  # Do your processing here

print(f"Done processing {eta.stats.total_items} items in {timefmt.td.long(eta.stats.elapsed_timedelta)}!\n")

Here is an example of the sort of output this produces:

 14%|█▍        | 1432400/9999999 | R: 0:00:02 | ETA: 5:22:13 PM
 ...
100%|██████████| 9999999/9999999 | R: ??? | ETA: ???
Done processing 9999999 items in 2 seconds!

You can get more verbose information by replacing the for loop with this:

from etatime import EtaBar

for item in (eta := EtaBar(range(9999999), bar_format="{l_bar}{bar}{r_barL}")):
    ...  # Do your processing here

Here is an example of the long output:

 35%|███▌      | 3545009/9999999 | R: 1 second | ETA: 5:26:11 PM MST

All keyword arguments other than bar_format get passed directly to tqdm.tqdm. bar_format is pre-processed by etatime in order to inject some new custom formatting codes:

  • startS: The starting time in short digit format.
  • startL: The starting time written out in plain english.
  • currentS: The current (loop start time) time in short digit format.
  • currentL: The current (loop start time) time written out in plain english.
  • elapsedS: The elapsed time in short digit format.
  • elapsedL: The elapsed time written out in plain english.
  • remainingS: The remaining time in short digit format.
  • remainingL: The remaining time written out in plain english.
  • etaS: The ETA time in short digit format.
  • etaL: The ETA time written out in plain english.
  • r_barS == "| {n_fmt}/{total_fmt} | {remainingS} | {etaS}"
  • r_barL == "| {n_fmt}/{total_fmt} | {remainingL} | {etaL}"

The following attributes are available in the stats data class of the EtaBar instance:

  • total_items
  • rate
  • initial
  • n
  • percent
  • start_time (seconds)
    • start_datetime
  • current_time (seconds)
    • current_datetime
  • elapsed_time (seconds)
    • elapsed_timedelta
  • remaining_time (seconds)
    • remaining_timedelta
  • eta_time (seconds)
    • eta_datetime

Full Documentation

etautil on Read the Docs

python-etatime's People

Contributors

nimaid avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.