| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | """Timing functions.""" |
| |
|
| | import contextlib |
| | import datetime |
| | import time |
| |
|
| |
|
| | class Timer(object): |
| | """Simple timer.""" |
| |
|
| | def __init__(self): |
| | self.total_time = 0.0 |
| | self.calls = 0 |
| | self.start_time = 0.0 |
| | self.diff = 0.0 |
| | self.average_time = 0.0 |
| |
|
| | def add_diff(self, diff, n=1, average=True): |
| | self.total_time += diff |
| | self.calls += n |
| | self.average_time = self.total_time / self.calls |
| | return self.average_time if average else self.diff |
| |
|
| | @contextlib.contextmanager |
| | def tic_and_toc(self, n=1, average=True): |
| | try: |
| | yield self.tic() |
| | finally: |
| | self.toc(n, average) |
| |
|
| | def tic(self): |
| | self.start_time = time.time() |
| | return self |
| |
|
| | def toc(self, n=1, average=True): |
| | self.diff = time.time() - self.start_time |
| | return self.add_diff(self.diff, n, average) |
| |
|
| |
|
| | def get_progress(timer, step, max_steps): |
| | """Return the progress information.""" |
| | eta_seconds = timer.average_time * (max_steps - step) |
| | eta = str(datetime.timedelta(seconds=int(eta_seconds))) |
| | progress = (step + 1.0) / max_steps |
| | return "< PROGRESS: {:.2%} | SPEED: {:.3f}s / iter | ETA: {} >".format( |
| | progress, timer.average_time, eta |
| | ) |
| |
|