def add_node(self, node_proto: NodeProto, graph_idx: int, overwrite_input_initializers: bool = False):
        """Add a node to the graph.

        This adds the node to the `nodes` attribute and connects them using the `ios` attribute.

        :param node_proto: ONNX node.
        :param graph_idx: index of the graph in the model.
        :param overwrite_input_initializers: whether to overwrite the inputs and/or initializers if a node
            output is already present as an one. If False, it will raise an error.
        """
        node_name = node_proto.name
        if not node_name or node_name in self.nodes:
            node_name = f"{node_proto.op_type}_{self.unique_node_counter}"
            self.unique_node_counter += 1
        self._process_node(
            node_name, node_proto, self.nodes, self.ios, self.connections, graph_idx, overwrite_input_initializers
        )
Add a node to the graph.

        This adds the node to the `nodes` attribute and connects them using the `ios` attribute.

        :param node_proto: ONNX node.
        :param graph_idx: index of the graph in the model.
        :param overwrite_input_initializers: whether to overwrite the inputs and/or initializers if a node
            output is already present as an one. If False, it will raise an error.
        
olive/passes/onnx/onnx_dag.py