code: def _serialize(
      proto: Union[bytes, google.protobuf.message.Message]
  ) -> bytes:
      """Serialize a in-memory proto to bytes.
  
      Args:
          proto: An in-memory proto, such as a ModelProto, TensorProto, etc
  
      Returns:
          Serialized proto in bytes.
      """
      if isinstance(proto, bytes):
          return proto
      if hasattr(proto, "SerializeToString") and callable(
          proto.SerializeToString
      ):
          try:
              result = proto.SerializeToString()
          except ValueError as e:
              if proto.ByteSize() >= checker.MAXIMUM_PROTOBUF:
                  raise ValueError(
                      "The proto size is larger than the 2 GB limit. "
                      "Please use save_as_external_data to save tensors separately from the model file."
                  ) from e
              raise
          return result  # type: ignore
      raise TypeError(
          f"No SerializeToString method is detected. Neither proto is a str.\ntype is {type(proto)}"
      )
  
imports: import os
  import typing
  from typing import Union, IO, Optional, TypeVar, Any
  import google.protobuf.message
  from onnx.onnx_cpp2py_export import ONNX_ML
  from onnx.external_data_helper import load_external_data_for_model, write_external_data_tensors, convert_model_to_external_data
  from onnx.onnx_pb import AttributeProto, EXPERIMENTAL, FunctionProto, GraphProto, IR_VERSION, IR_VERSION_2017_10_10, IR_VERSION_2017_10_30, IR_VERSION_2017_11_3, IR_VERSION_2019_1_22, IR_VERSION_2019_3_18, IR_VERSION_2019_9_19, IR_VERSION_2020_5_8, IR_VERSION_2021_7_30, ModelProto, NodeProto, OperatorSetIdProto, OperatorStatus, STABLE, SparseTensorProto, StringStringEntryProto, TensorAnnotation, TensorProto, TensorShapeProto, TrainingInfoProto, TypeProto, ValueInfoProto, Version
  from onnx.onnx_operators_pb import OperatorProto, OperatorSetProto
  from onnx.onnx_data_pb import MapProto, OptionalProto, SequenceProto
  from onnx.version import version
  from onnx import checker, compose, defs, gen_proto, helper, hub, mapping, numpy_helper, parser, printer, shape_inference, utils, version_converter
label_desc: Use image node_id 4 for calling a global function with example usage: _serialize(proto) and returns: proto, result