From 4d1da10d32cabd393e6959523d628c6edfe15088 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Thu, 12 Mar 2015 15:29:30 -0400 Subject: [PATCH] More expression tree improvements --- pymbolic/mapper/graphviz.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pymbolic/mapper/graphviz.py b/pymbolic/mapper/graphviz.py index 0ee50a5..776dd67 100644 --- a/pymbolic/mapper/graphviz.py +++ b/pymbolic/mapper/graphviz.py @@ -56,10 +56,10 @@ class GraphvizMapper(WalkMapper): def map_leaf(self, expr): self.lines.append( "%s [label=\"%s\", shape=box];" % ( - self.get_id(expr), str(expr))) + self.get_id(expr), str(expr).replace("\\", "\\\\"))) - self.visit(expr, node_printed=True) - self.post_visit(expr) + if self.visit(expr, node_printed=True): + self.post_visit(expr) def generate_unique_id(self): self.next_unique_id += 1 @@ -117,11 +117,19 @@ class GraphvizMapper(WalkMapper): self.post_visit(expr) def map_variable(self, expr): + # Shared nodes for variables do not make for pretty graphs. + # So we generate our own unique IDs for them. + + node_id = self.generate_unique_id() + self.lines.append( - "%s [label=\"%s\", shape=box];" % (self.get_id(expr), expr.name)) + "%s [label=\"%s\",shape=box];" % ( + node_id, + expr.name)) + if not self.visit(expr, node_printed=True, node_id=node_id): + return - if self.visit(expr, node_printed=True): - self.post_visit(expr) + self.post_visit(expr) def map_lookup(self, expr): self.lines.append( -- GitLab