31 lines
912 B
Python
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
|