Spaces:
Running
Running
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__) | |