Source code for omfit_classes.omfit_execution_diagram
try:
# framework is running
from .startup_choice import *
except ImportError as _excp:
# class is imported by itself
if (
'attempted relative import with no known parent package' in str(_excp)
or 'No module named \'omfit_classes\'' in str(_excp)
or "No module named '__main__.startup_choice'" in str(_excp)
):
from startup_choice import *
else:
raise
from omfit_classes.omfit_ascii import OMFITascii
from omfit_classes.sortedDict import SortedDict
__all__ = ['OMFITexecutionDiagram']
[docs]class OMFITexecutionDiagram(OMFITascii, SortedDict):
def __init__(self, filename, **kw):
OMFITascii.__init__(self, filename, **kw)
self.dynaLoad = True
[docs] @dynaLoad
def load(self):
l = self.read().splitlines()
stack = []
for li in range(len(l)):
if not l[li].startswith('*'):
continue
na = l[li].count('*')
if len(stack) >= na:
stack = stack[: na - 1]
size = l[li].split()[-1].strip('[]')
size = size.replace('GB', 'e9')
size = size.replace('MB', 'e6')
size = size.replace('kB', 'e3')
size = size.replace('bytes', '')
size = size.replace('N/A', '0')
size = float(size)
time = float(l[li].split()[-2][:-1])
name = l[li].split()[-3].strip('[]')
ptr = self
for k in stack:
ptr = ptr[k]
if name in ptr:
for ii in range(1, 10):
if f'{name}_{ii}' not in ptr:
name = f'{name}_{ii}'
break
ptr[name] = SortedDict()
ptr[name].size = size
ptr[name].time = time
stack.append(name)
self.dynaLoad = False
[docs] @dynaLoad
def print_sorted(self, by='time', nitems=10):
paths = []
vals = []
def traverse(r, p):
if len(p):
paths.append(p)
vals.append(getattr(r, by))
for k, v in r.items():
traverse(v, p + [k])
traverse(self, [])
pprint(sorted(list(zip(paths, vals)), key=lambda x: x[1])[-nitems:])
if __name__ == '__main__':
timings = OMFITexecutionDiagram(OMFITsrc + '/../samples/cake_timings_CORI_10_interactive.txt')
timings.print_sorted(nitems=20)