def visit(self, block, op, nodename_prefix=""):
        """
        Append edges connecting parents of op to the op
        """

        if op in self.visited_memo:
            return self

        label = self.alternate_labeller(op)
        self.visited_memo[op] = 1

        if op.name in self.highlights and op.name not in [
            o.name for o in block.outputs
        ]:
            self.result.append(
                '"'
                + nodename_prefix
                + "op: "
                + op.name
                + '"'
                + '[label="'
                + label
                + '",fillcolor=%s,style=filled,fontcolor=%s]'
                % (self.highlights[op.name], "violetred")
            )
        else:
            self.result.append(
                '"'
                + nodename_prefix
                + "op: "
                + op.name
                + '"'
                + '[label="'
                + label
                + '",fontcolor=%s]' % ("violetred")
            )

        for input_var in _get_input_vars(op, only_nonconst_vars=True):
            if input_var.op is not None:
                input_name = "op: " + input_var.op.name
            else:
                input_name = input_var.name

            edge = (
                '"'
                + nodename_prefix
                + input_name
                + '"'
                + " -> "
                + '"'
                + nodename_prefix
                + "op: "
                + op.name
                + '"'
            )
            self.result.append(edge)
            if input_var.op is not None:
                self.visit(block, input_var.op, nodename_prefix)
            else:
                self.visit_input_var(input_var, nodename_prefix)

        return self

        Append edges connecting parents of op to the op
        
coremltools/converters/mil/mil/visitors/dot_visitor.py