Source code for pyadi.timer
import time
events = {}
[docs]
class Timer():
pref = ['m', 'ยต', 'n', 'p']
[docs]
def __init__(self, func, kind, verbose=0, **kw):
self.func = func
self.kind = kind
self.t0 = 0
self.t1 = 0
self.active = False
self.verbose = verbose
def __enter__(self):
self.t0 = time.time()
self.active = True
def __exit__(self, *args):
self.t1 = time.time()
self.active = False
self.register()
if self.verbose > 0:
print(f'Timer {self.func} {self.kind}: {self}')
if self.kind == 'adrun':
ev = self.getev(self.func, 'run')
if ev:
f = self.millis() / ev['t']
ot = self.fmt(ev['t'])
if self.verbose > 0:
print(f'AD factor {self.func}: {self} / {ot} = {f:.2f}')
[docs]
def millis(self):
return 1e3*((time.time() if self.active else self.t1) - self.t0)
[docs]
def fmt(self, t):
ms = t
for i in range(len(self.pref)):
p = self.pref[i]
if ms > 1:
break
ms *= 1e3
return f'{ms:.2f} {p}s'
[docs]
def __str__(self):
return self.fmt(self.millis())
[docs]
def register(self):
key = f'{self.func}{self.kind}'
events[key] = {'kind': self.kind, 'func': self.func, 't': self.millis()}
[docs]
def getev(self, func, kind):
key = f'{func}{kind}'
try:
return events[key]
except:
pass
# (c) 2023 AI & IT UG
# Author: Johannes Willkomm jwillkomm@ai-and-it.de