input: def decode_libsvm(input, num_features, dtype=_dtypes.float32, label_dtype=_dtypes.int64, name=None):
      """Convert LibSVM input to tensors. The output consists of a label and a feature tensor.
      
      Args:
          input: A `Tensor` of type `string`. Each string is a record in the LibSVM.
          num_features: An `int` that is `>= 1`. The number of features.
          dtype: An optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.float32`.
          label_dtype: An optional `tf.DType` from: `tf.float32, tf.float64, tf.int32, tf.int64`. Defaults to `tf.int64`.
          name: A name for the operation (optional).
          
      Returns:
          A tuple of `Tensor` objects (label, feature_indices, feature_values, feature_shape).
          
          label: A `Tensor` of type `label_dtype`. A tensor of the same shape as input.
          feature_indices: A `Tensor` of type `int64`. A 2-D int64 tensor of dense_shape [N, ndims].
          feature_values: A `Tensor` of type `dtype`. A 1-D tensor of any type and dense_shape [N].
          feature_shape: A `Tensor` of type `int64`. A 1-D int64 tensor of dense_shape [ndims].
          
      >>> decode_libsvm(["1 1:1 2:2", "2 1:1 3:3"], 3)
      (<tf.Tensor: shape=(2,), dtype=int64, numpy=array([1, 2])>, <tf.Tensor: shape=(3, 2), dtype=int64, numpy=array([[0, 0], [0, 1], [0, 2], [1, 0]], [1, 2]])>, <tf.Tensor: shape=(4,), dtype=float32, numpy=array([1., 2., 1., 3.], dtype=float32)>, <tf.Tensor: shape=(2,), dtype=int64, numpy=array([3, 2])>)
      """
output:     with ops.name_scope(name, "decode_libsvm", [input]) as name:
          def _parse_line(line):
              parts = tf.strings.split([line], ' ')
              label = tf.strings.to_number(parts[0], out_type=label_dtype)
              indices = []
              values = []
              for part in parts[1:]:
                  idx, val = tf.strings.split([part], ':')
                  indices.append(tf.strings.to_number(idx, out_type=tf.int64))
                  values.append(tf.strings.to_number(val, out_type=dtype))
              return label, indices, values
          
          labels, indices_list, values_list = tf.map_fn(
              _parse_line, input, dtype=(label_dtype, tf.int64, dtype),
              name="map_parse_line")
          
          feature_indices = tf.ragged.stack(indices_list).flat_values
          feature_values = tf.ragged.stack(values_list).flat_values
          feature_shape = tf.stack([tf.shape(input)[0], num_features])
          
          return labels, feature_indices, feature_values, feature_shape