def visit__PipelineVariable(self, node): # standard if node.src_data is not None and not node.ops: if node.stage_id is None: self._add_node(node, label=str(node.data), shape='box', style='dashed') else: self._add_node(node, label=''.join([str(node.stage_id), ':', str(node.data)]), shape='box') self.visit(node.src_data) self._add_edge(node.src_data, node) # accumulator if node.src_data is not None and node.ops: label = [ str(node.stage_id) ] label.append(':') label.append( str(node.data) ) if node.oplabel is not None: label.append(' ') label.append(node.oplabel) else: for op in node.ops: if isinstance(op, type): label.append(' ') label.append(vtypes.op2mark(op.__name__)) else: label.append(' C') label.append('=') self._add_node(node, label=''.join(label), shape='box', style='rounded') self.visit(node.src_data) self._add_edge(node.src_data, node) if node.resetcond: self.visit(node.resetcond) self._add_edge(node.resetcond, node, label='RST', style='dashed') if isinstance(node.dst_data, _PipelineInterface): self.visit(node.dst_data) self._add_edge(node, node.dst_data)
def visit__BinaryOperator(self, node): mark = vtypes.op2mark(node.__class__.__name__) self._add_node(node, label=mark, shape='ellipse') maxid = self._max_stage_id(node.left, node.right) left = node.left right = node.right if hasattr(left, '_get_preg'): left = left._get_preg(maxid) if hasattr(right, '_get_preg'): right = right._get_preg(maxid) self.visit(left) self.visit(right) self._add_edge(left, node, label='L') self._add_edge(right, node, label='R')
def visit__UnaryOperator(self, node): mark = vtypes.op2mark(node.__class__.__name__) self._add_node(node, label=mark, shape='ellipse') self.visit(node.right) self._add_edge(node.right, node)