257 def enter(self, visitee):
258 if visitee not in self.ids:
259 self.number += 1
260 dot_id = self.ids[visitee] = f"T{self.number}"
261 dot_id = self.ids[visitee]
262 mother = None
263 if self.is_needed(visitee):
264 if isinstance(visitee, ControlFlowLeaf):
265 entry = f'{dot_id} [label="{visitee.name()}", shape=box]'
266 elif isinstance(visitee, OrNode):
267 entry = f'{dot_id} [label="OR", shape=invhouse]'
268 elif isinstance(visitee, AndNode):
269 entry = f'{dot_id} [label="AND", shape=invhouse]'
270 elif isinstance(visitee, OrderedNode):
271 entry = f'{dot_id} [label=">>", shape=point]'
272 elif isinstance(visitee, InvertNode):
273 entry = f'{dot_id} [label="NOT", shape=circle, color=red]'
274 elif isinstance(visitee, par):
275 entry = f'{dot_id} [label="PAR", shape=circle]'
276 elif isinstance(visitee, seq):
277 entry = f'{dot_id} [label="SEQ", shape=circle]'
278 else:
279 entry = f'{dot_id} [label="{type(visitee)}", shape=circle]'
280 self.nodes.append(entry)
281 if len(self.stack) != 0:
282 mother = self.collapse_identical_ancestors(type(self.stack[-1][0]))
283 if not mother:
284 mother = self.stack[-1][1]
285 edge = f"{dot_id}->{mother}"
286 self.edges.append(edge)
287 self.stack.append((visitee, dot_id))
288