MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

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/


  • Prev by Date: Re: Re: annoying documentation in 6 (rant)
  • Next by Date: Re: two integrals
  • Previous by thread: Re: RE: Re: Re: Wolfram Workbench 1.1
  • Next by thread: Re: graphing traces of complicated evaluations (improved)