#!/usr/bin/env python3 import time from typing import Callable class Timer(object): """ A stopwatch to time how long something takes (walltime). e.g. with timer.Timer() as t: do_the_thing() walltime = t() print(f'That took {walltime} seconds.') """ def __init__(self) -> None: self.start = None self.end = None def __enter__(self) -> Callable[[], float]: """Returns a functor that, when called, returns the walltime of the operation in seconds. """ self.start = time.perf_counter() self.end = 0.0 return lambda: self.end - self.start def __exit__(self, *args) -> bool: self.end = time.perf_counter() return None # don't suppress exceptions