| 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__) |