code: def _copy_and_reop(source_node, IR_node, new_op=None):
      if new_op == None:
          new_op = source_node.type
      IR_node.name = source_node.name
      IR_node.op = new_op
  
      if "_output_shape" in source_node.layer["attr"].keys():
          output_list = source_node.layer["attr"]["_output_shape"]
          shape = graph_pb2.TensorShape()
          for dim in output_list:
              new_dim = shape.dim.add()
              if dim == None:
                  new_dim.size = -1
              else:
                  new_dim.size = int(dim)
  
          IR_node.attr["_output_shape"].list.shape.extend([shape])
  
      if "shape" in source_node.layer["attr"].keys():
          shape_list = source_node.layer["attr"]["shape"]
          if not output_list == None:
              for dim in shape_list:
                  new_dim = IR_node.attr["shape"].shape.dim.add()
                  if dim == None:
                      new_dim.size = -1
                  else:
                      new_dim.size = int(dim)
          else:
              IR_node.attr["shape"].shape.unknown_rank = True
  
imports: import os
  import numpy
  from mmdnn.conversion.common.utils import *
  from mmdnn.conversion.darknet.prototxt import *
  from mmdnn.conversion.darknet.darknet_utils import *
  from mmdnn.conversion.darknet.darknet_graph import DarknetGraph
  import mmdnn.conversion.common.IR.graph_pb2
  from mmdnn.conversion.common.DataStructure.parser import Parser
  from mmdnn.conversion.common.IR.graph_pb2 import NodeDef, GraphDef, DataType
label_desc: Use image node_id 4 for calling the DarknetParser obj's underlying member method code with example usage: obj._copy_and_reop(source_node, IR_node, new_op) without return types