| from time import perf_counter | |
| class SequentialTimer: | |
| def __init__(self, make_print=False): | |
| self.timings = [] | |
| self.make_print = make_print | |
| def time(self, message: str): | |
| if self.make_print: | |
| print(message) | |
| self.timings.append((perf_counter(), message)) | |
| def to_str(self) -> str: | |
| s = "" | |
| if len(self.timings) <= 1: | |
| s = "No timings" | |
| return s | |
| t0 = self.timings[0][0] | |
| for ((t1, m1), (t2, _)) in zip(self.timings, self.timings[1:]): | |
| s += f"TIME: step: {t2 - t1:06.3f} | cum {t2 - t0:06.3f} - {m1}\n" | |
| s += f"ALL TIME: {self.timings[-1][0] - self.timings[0][0]:07.3f}\n" | |
| return s | |
| def printall(self): | |
| print(self.to_str()) |