Source code for pypulseq.utils.tracing

import sys
import traceback

# Global variables indicating whether tracing is enabled and how deep the
# calls are traced.
_tracing: bool = False
_trace_limit: int = 1


def trace_enabled() -> bool:
    """
    Returns whether tracing where sequence events and blocks were created is
    enabled.
    """
    global _tracing
    return _tracing


[docs] def enable_trace(limit: int = 1) -> None: """ Enable tracing where sequence events and blocks were created. Note that this can slow down sequence creation. Parameters ---------- limit : int, optional Limit on the stack depth that is stored. Increase when your sequence is created in nested functions and you want to trace back to the original call. The default is 1. """ global _tracing, _trace_limit _tracing = True _trace_limit = limit
[docs] def disable_trace() -> None: """ Disabling tracing where sequence events and blocks were created. """ global _tracing _tracing = False
def trace() -> traceback.StackSummary: """ Internal function to fetch a summary of the call stack. Returns ------- traceback.StackSummary Call stack summary. """ f = sys._getframe().f_back.f_back # type: ignore return traceback.extract_stack(f, limit=_trace_limit) def format_trace(trace: traceback.StackSummary, indent: int = 0) -> str: """ Format a stack summary into a string. Optionally adds `indent` spaces in front of every line. Parameters ---------- trace : traceback.StackSummary Call stack summary. indent : int, optional Number of spaces to indent. The default is 0. Returns ------- str Stack summary formatted into a printable string. """ return '\n'.join(' ' * indent + y for x in trace.format() for y in x.splitlines())