builtup4/bu4/tracing/deep_trace.py
2021-09-12 13:33:13 +03:00

31 lines
912 B
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from collections import deque
from bu4.tracing.probe import Probe
from bu4.tracing.trace import trace
__all__ = ('deep_trace',)
def deep_trace(sysx, *, length=1000, depth=10000):
hist = []
queue = deque([(0, 0, sysx)])
for trace_index in range(1, length + 1):
hist.append(trace_index)
if not queue:
break
tab, parent, evaluable = queue.popleft()
hist.append(parent)
for _ in range(depth):
evaluable = evaluable.next()
_probe_index, probe = trace(evaluable)
hist.append(_probe_index)
if isinstance(probe, Probe):
start, list_ = probe.start_and_list()
hist.append(start)
queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_)
else:
hist.append(None)
return hist