parameters: (op_name)
return_statement: return in_names, out_names, attr_names
docstring: Parse input names and outpus detail information from registered custom op
      from OpInfoMap.
docstring_summary: Parse input names and outpus detail information from registered custom op
      from OpInfoMap.
docstring_tokens: Parse input names and outpus detail information from registered custom op from OpInfoMap .
function: def parse_op_info(op_name):
      """
      Parse input names and outpus detail information from registered custom op
      from OpInfoMap.
      """
      if op_name not in OpProtoHolder.instance().op_proto_map:
          raise ValueError(
              "Please load {} shared library file firstly by `paddle.utils.cpp_extension.load_op_meta_info_and_register_op(...)`".
              format(op_name))
      op_proto = OpProtoHolder.instance().get_op_proto(op_name)
  
      in_names = [x.name for x in op_proto.inputs]
      out_names = [x.name for x in op_proto.outputs]
      attr_names = [
          x.name for x in op_proto.attrs if x.name not in DEFAULT_OP_ATTR_NAMES
      ]
  
      return in_names, out_names, attr_names
function_tokens: def parse_op_info ( op_name ) : if op_name not in OpProtoHolder . instance ( ) . op_proto_map : raise ValueError ( "Please load {} shared library file firstly by `paddle.utils.cpp_extension.load_op_meta_info_and_register_op(...)`" . format ( op_name ) ) op_proto = OpProtoHolder . instance ( ) . get_op_proto ( op_name ) in_names = [ x . name for x in op_proto . inputs ] out_names = [ x . name for x in op_proto . outputs ] attr_names = [ x . name for x in op_proto . attrs if x . name not in DEFAULT_OP_ATTR_NAMES ] return in_names , out_names , attr_names