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