graphing traces of complicated evaluations (improved)
- To: mathgroup at smc.vnet.net
- Subject: [mg79173] graphing traces of complicated evaluations (improved)
- From: "Chris Chiasson" <chris at chiasson.name>
- Date: Fri, 20 Jul 2007 03:26:48 -0400 (EDT)
Previously, I released code that could help with the tracing of evaluations, but the code required read access to the DownValues of the functions being traced. This version does not. Here are some example evaluations: TraceTreeFormPlot[Trace[1+2]] aaaaa:=Sequence[1+2,a] TraceTreeFormPlot[Trace@aaaaa] XML`MathML`ExpressionToMathML@"\[Alpha]";(*evaluate once to skip code caching in the trace*) LayeredGraphPlot[traceToTree[Trace[XML`MathML`ExpressionToMathML@"\[Alpha]",TraceDepth->2,TraceInternal->True]][[All,All,3]],SelfLoopStyle->None] ---------------------------------------------------- code: ---------------------------------------------------- (Attributes[#]={HoldAllComplete})&/@{traceToTreeAux} traceToTree[xpr_]:=Block[{traceToTreeCounter=-1,expressionToVertex,insideHoldForm=False},Attributes@expressionToVertex={HoldAllComplete};expressionToVertex[anyXpr_/;AtomQ@Unevaluated@anyXpr]:=expressionToVertex[anyXpr]={HoldForm@anyXpr,traceToTreeCounter+=1,HoldForm@anyXpr};expressionToVertex[holdFormXpr_HoldForm/;Length@holdFormXpr===1&&!insideHoldForm]:=Block[{insideHoldForm=True},Extract[Unevaluated@holdFormXpr,1,expressionToVertex]];expressionToVertex[holdFormXpr_HoldForm]:=expressionToVertex[holdFormXpr]={HoldForm@Sequence,traceToTreeCounter+=1,holdFormXpr};expressionToVertex[anyXpr_]:=expressionToVertex[anyXpr]={Extract[Unevaluated@anyXpr,0,HoldForm],traceToTreeCounter+=1,HoldForm@anyXpr};Rule@@@Flatten@{traceToTreeAux@xpr}] traceToTreeAux[xpr:Except@_HoldForm/;!AtomQ@Unevaluated@xpr]:=List@@@{With[{rootVertex=expressionToVertex@xpr},edge[rootVertex,expressionToVertex@#]&/@Unevaluated@xpr],traceToTreeAux/@Unevaluated@xpr} traceToTreeAux[xpr_]:=edge[expressionToVertex@xpr,expressionToVertex@xpr] TraceTreeFormPlot[trace_,opts___]:=Block[{$traceExpressionToTree=True},Through@{Unprotect,Update}@SparseArray`ExpressionToTree;SparseArray`ExpressionToTree[trace,Infinity]=traceToTree@trace;With[{result=ToExpression@ToBoxes@TreeForm[trace,opts]},Through@{Unprotect,Update}@SparseArray`ExpressionToTree;SparseArray`ExpressionToTree[trace,Infinity]=.;Through@{Update,Protect,Update}@SparseArray`ExpressionToTree;result]] ---------------------------------------------------- keywords: ---------------------------------------------------- Trace TreeForm Plot -- http://chris.chiasson.name/