code: def make_sparse_tensor_value_info(
      name: str,
      elem_type: int,
      shape: Optional[Sequence[Union[str, int, None]]],
      doc_string: str = "",
      shape_denotation: Optional[List[str]] = None,
  ) -> ValueInfoProto:
      """Makes a SparseTensor ValueInfoProto based on the data type and shape."""
      value_info_proto = ValueInfoProto()
      value_info_proto.name = name
      if doc_string:
          value_info_proto.doc_string = doc_string
  
      sparse_tensor_type_proto = make_sparse_tensor_type_proto(
          elem_type, shape, shape_denotation
      )
      value_info_proto.type.sparse_tensor_type.CopyFrom(
          sparse_tensor_type_proto.sparse_tensor_type
      )
      return value_info_proto
  
imports: import collections.abc
  import numbers
  import struct
  from cmath import isnan
  from typing import Any, Callable, Dict, KeysView, List, Optional, Sequence, Tuple, TypeVar, Union, cast
  import google.protobuf.message
  import numpy
  from onnx import IR_VERSION, AttributeProto, FunctionProto, GraphProto, MapProto, ModelProto, NodeProto, OperatorSetIdProto, OptionalProto, SequenceProto, SparseTensorProto, TensorProto, TensorShapeProto, TrainingInfoProto, TypeProto, ValueInfoProto, defs, mapping
label_desc: Use image node_id 29 for calling a global function with example usage: make_sparse_tensor_value_info(name, elem_type, shape, doc_string, shape_denotation) and returns: value_info_proto