code: def _get_serializer(
      fmt: _SupportedFormat | None,
      f: str | os.PathLike | IO[bytes] | None = None,
  ) -> serialization.ProtoSerializer:
      """Get the serializer for the given path and format from the serialization registry."""
      # Use fmt if it is specified
      if fmt is not None:
          return serialization.registry.get(fmt)
  
      if (file_path := _get_file_path(f)) is not None:
          _, ext = os.path.splitext(file_path)
          fmt = serialization.registry.get_format_from_file_extension(
              ext
          )
  
      # Failed to resolve format if fmt is None. Use protobuf as default
      fmt = fmt or _DEFAULT_FORMAT
      assert fmt is not None
  
      return serialization.registry.get(fmt)
  
imports: from __future__ import annotations
  import os
  import typing
  from typing import IO, Literal, Union
  from onnx import serialization
  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: _get_serializer(fmt, f) and returns: serialization, serialization