Spaces:
Paused
Paused
| import time | |
| import numpy as np | |
| from contextlib import contextmanager | |
| class Timer(object): | |
| """A simple timer.""" | |
| def __init__(self): | |
| self.total_time = 0. | |
| self.calls = 0 | |
| self.start_time = 0. | |
| self.diff = 0. | |
| self.average_time = 0. | |
| self.times = [] | |
| def recent_average_time(self, latest_n): | |
| return np.mean(np.array(self.times)[-latest_n:]) | |
| def tic(self): | |
| # using time.time instead of time.clock because time time.clock | |
| # does not normalize for multithreading | |
| self.start_time = time.time() | |
| def toc(self, average=True): | |
| self.diff = time.time() - self.start_time | |
| self.times.append(self.diff) | |
| self.total_time += self.diff | |
| self.calls += 1 | |
| self.average_time = self.total_time / self.calls | |
| if average: | |
| return self.average_time | |
| else: | |
| return self.diff | |
| def timed(self): | |
| self.tic() | |
| yield | |
| self.toc() | |
| class Timers(object): | |
| def __init__(self): | |
| self._timers = {} | |
| def tic(self, key): | |
| if key not in self._timers: | |
| self._timers[key] = Timer() | |
| self._timers[key].tic() | |
| def toc(self, key): | |
| self._timers[key].toc() | |
| def timed(self, key): | |
| self.tic(key) | |
| yield | |
| self.toc(key) | |
| def __str__(self): | |
| msg = [] | |
| for k, v in self._timers.items(): | |
| msg.append('%s: %f' % (k, v.average_time)) | |
| return ', '.join(msg) |