#!/usr/bin/env python3
+# © Copyright 2021-2022, Scott Gasch
+
+"""A simple stopwatch decorator / context for timing things."""
+
+import contextlib
import time
-from typing import Callable, Optional
+from typing import Callable, Literal
-class Timer(object):
+class Timer(contextlib.AbstractContextManager):
"""
A stopwatch to time how long something takes (walltime).
e.g.
- with timer.Timer() as t:
+ with stopwatch.Timer() as t:
do_the_thing()
walltime = t()
self.end = 0.0
return lambda: self.end - self.start
- def __exit__(self, *args) -> Optional[bool]:
+ def __exit__(self, *args) -> Literal[False]:
self.end = time.perf_counter()
- return None # don't suppress exceptions
+ return False