Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Build a causal graph from an expression evaluation trace
ResourceFunction["TraceCausalGraph"][expr] evaluate an expression and return a causal graph of its trace. | |
ResourceFunction["TraceCausalGraph"][expr,n] trace only up-to n steps of evaluation. | |
ResourceFunction["TraceCausalGraph"][expr,n,patt] prune trace by a specifying a pattern of expressions to include. | |
ResourceFunction["TraceCausalGraph"][expr,…,prop] returns the specified property prop. |
"CausalGraph" (default) | causal graph of the trace |
"Path" | path as an interspersed list of HoldComplete expressions and positions |
"PathGraph" | path as a PathGraph |
"PathEventsGraph" | intersperse a path graph with corresponding event vertices |
"PathCausalGraph" | add causal dependency edges to the "PathEventsGraph" |
"IncludeInitialEvent" | False | whether to include an additional event that produces original expression |
"ShowIndices" | False | show event indices |
"ShowEventOrder" | False | show evaluation order with a path between events |
"ShowPositions" | False | show event position with negative position indicating internal evaluations |
"ShowExpressions" | True | show complete or partial expressions |
"PruneIdentities" | True | prune events that evaluate expression to itself |
"PruneSideEvents" | False | prune expressions that do not correspond to any part of original expression |
"PruneTerminatedEvaluation" | True | prune expression with TerminatedEvaluation |
Make a causal graph from a standard evaluation of an expression:
In[1]:= |
Out[1]= |
Make a path consisting of intermediate expressions together with subexpression positions being evaluated:
In[2]:= |
Out[2]= |
Make a path graph of expressions in a trace:
In[3]:= |
Out[3]= |
Make a path with interspersed events between expressions:
In[4]:= |
Out[4]= |
Add dependency edges between events:
In[5]:= |
Out[5]= |
Trace a more complicated expression:
In[6]:= |
Out[7]= |
Tracing internal functions would result in side-events (indicated by a dashed boundary):
In[8]:= |
Out[8]= |
In[9]:= |
Out[9]= |
Include an additional event that all events causally depend on:
In[10]:= |
Out[10]= |
Show indices of events in evaluation order:
In[11]:= |
Out[11]= |
Indicate an actual order of events during evaluation:
In[12]:= |
Out[12]= |
Show positions of subexpressions being evaluated:
In[13]:= |
Out[13]= |
With side-events having decreasing negative part numbers:
In[14]:= |
Out[14]= |
Instead of the whole expression show only subexpressions under evaluation:
In[15]:= |
Out[15]= |
In[16]:= |
Out[16]= |
Trivial identity events are pruned by default:
In[17]:= |
Out[17]= |
In[18]:= |
Out[18]= |
Prune side-events from a trace PathGraph and corresponding events:
In[19]:= |
In[20]:= |
Out[20]= |
In[21]:= |
Out[21]= |
In[22]:= |
Out[22]= |
Terminating after non-terminal amount of steps results in TerminatedEvaluation inside of the last event, which is pruned by default:
In[23]:= |
Out[23]= |
Non-standard evaluation, like flattening of Flat subexpressions results in incorrect reconstruction of intermediate expressions:
In[24]:= |
Out[25]= |
Trace a Fibonacci function with memoization:
In[26]:= |
In[27]:= |
Out[27]= |
Make a causal graph of a nested recursive function:
In[28]:= |
In[29]:= |
Out[29]= |
In[30]:= |
Out[30]= |
Divide-and-conquer factorial:
In[31]:= |
In[32]:= |
Out[32]= |
Wolfram Language 13.0 (December 2021) or above
This work is licensed under a Creative Commons Attribution 4.0 International License