| import json |
| import time |
|
|
|
|
| class TimeCounter: |
| def __init__(self) -> None: |
| pass |
|
|
| def clear(self): |
| self.timedict = {} |
| self.basetime = time.perf_counter() |
|
|
| def timeit(self, name): |
| nowtime = time.perf_counter() - self.basetime |
| self.timedict[name] = nowtime |
| self.basetime = time.perf_counter() |
|
|
|
|
| class TimeHolder: |
| def __init__(self) -> None: |
| self.timedict = {} |
|
|
| def update(self, _timedict: dict): |
| for k, v in _timedict.items(): |
| if k not in self.timedict: |
| self.timedict[k] = AverageMeter(name=k, val_only=True) |
| self.timedict[k].update(val=v) |
|
|
| def final_res(self): |
| return {k: v.avg for k, v in self.timedict.items()} |
|
|
| def __str__(self): |
| return json.dumps(self.final_res(), indent=2) |
|
|
|
|
| class AverageMeter(object): |
| """Computes and stores the average and current value""" |
|
|
| def __init__(self, name, fmt=":f", val_only=False): |
| self.name = name |
| self.fmt = fmt |
| self.val_only = val_only |
| self.reset() |
|
|
| def reset(self): |
| self.val = 0 |
| self.avg = 0 |
| self.sum = 0 |
| self.count = 0 |
|
|
| def update(self, val, n=1): |
| self.val = val |
| self.sum += val * n |
| self.count += n |
| self.avg = self.sum / self.count |
|
|
| def __str__(self): |
| if self.val_only: |
| fmtstr = "{name} {val" + self.fmt + "}" |
| else: |
| fmtstr = "{name} {val" + self.fmt + "} ({avg" + self.fmt + "})" |
| return fmtstr.format(**self.__dict__) |
|
|