public void Dump(Func<string, Stream> builderGraphStreamFactory, IBuilder rootBuilder)
{
var originalGraph = builders.ToAdjacencyGraph<IBuilder, EquatableEdge<IBuilder>>();
originalGraph.RemoveEdgeIf(edge => edge.IsSelfEdge<IBuilder, EquatableEdge<IBuilder>>());
using (var originalStream = builderGraphStreamFactory("original"))
DumpGraph(originalStream, originalGraph);
RunTransformations(builderGraphStreamFactory);
var graph = builders.ToAdjacencyGraph<IBuilder, EquatableEdge<IBuilder>>();
graph.RemoveEdgeIf(edge => edge.IsSelfEdge<IBuilder, EquatableEdge<IBuilder>>());
if (rootBuilder != null)
RemoveIrrelevantBranches(graph, rootBuilder);
using (var finalStream = builderGraphStreamFactory("final"))
DumpGraph(finalStream, graph);
}