You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
62 lines
1.5 KiB
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__)
|
|
|