Source code for sfepy.base.timing

"""
Elapsed time measurement utilities.
"""
import time

from sfepy.base.base import Struct, IndexedStruct

[docs] class Timer(Struct): def __init__(self, name='timer', start=False): Struct.__init__(self, name=name) self.time_function = time.perf_counter self.reset() if start: self.start()
[docs] def reset(self): self.t0 = self.t1 = None self.total = self.dt = 0.0
[docs] def start(self, reset=False): if reset: self.reset() self.t1 = None self.t0 = self.time_function()
[docs] def stop(self): self.t1 = self.time_function() if self.t0 is None: raise ValueError('timer "%s" was not started!' % self.name) self.dt = self.t1 - self.t0 self.total += self.dt return self.dt
[docs] def add(self, dt): if self.t1 is None: raise ValueError('timer "%s" was not started and stopped!' % self.name) self.t1 += dt self.dt += dt self.total += dt
[docs] class Timers(IndexedStruct): def __init__(self, names): IndexedStruct.__init__(self, **{name : Timer(name=name) for name in names})
[docs] def create(self, name): if name in self.__dict__: self[name].reset() else: self[name] = Timer(name=name)
[docs] def start(self, name): self[name].start()
[docs] def stop(self, name): return self[name].stop()
[docs] def get_dts(self): return {name : timer.dt for name, timer in self.to_dict().items()}
[docs] def get_totals(self): return {name : timer.total for name, timer in self.to_dict().items()}