# 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