from time import time from .types import FloatOrNone class StopWatch: started: FloatOrNone = None stopped: FloatOrNone = None def __init__(self, auto_start=True): if auto_start: self.start() def start(self): self.started = time() self.stopped = None def stop(self) -> float: self.stopped = time() return self.elapsed() reset = start def elapsed(self) -> float: if self.stopped is None: return time() - self.started else: return self.stopped - self.started def avg_elapsed(self, divider: int) -> float: return self.elapsed() / divider def avg_string(self, divider: int) -> str: units = ['s', 'ms', 'µs', 'ns'] unit = 0 elapsed = self.avg_elapsed(divider) while 0 < elapsed < 1: elapsed *= 1000 unit += 1 return "%1.2f%s" % (elapsed, units[unit]) def __str__(self): return self.avg_string(1)