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