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. The shape of the label tensor
      is the same as input and the shape of the feature tensor is
      `[input_shape, num_features]`.
  
      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].
  
      Example:
      >>> decode_libsvm(["1 3:1 5:2", "2 4:3 6:4"], 10, dtype=tf.float32, label_dtype=tf.int32)
      (label, feature_indices, feature_values, feature_shape)
      where:
      label is a tensor of type tf.int32 with values [1, 2]
      feature_indices is a tensor of type int64 with values [[0, 3], [0, 5], [1, 4], [1, 6]]
      feature_values is a tensor of type tf.float32 with values [1.0, 2.0, 3.0, 4.0]
      feature_shape is a tensor of type int64 with value [2]
      """
  
output:     with ops.name_scope(name, "decode_libsvm", [input]) as name:
          input = ops.convert_to_tensor(input, name="input")
          def _parse_line(line):
              parts = line.decode().split()
              label = int(parts[0])
              indices = []
              values = []
              for part in parts[1:]:
                  idx, val = part.split(":")
                  indices.append(int(idx))
                  values.append(float(val))
              return label, indices, values
  
          labels, indices, values = tf.map_fn(
              _parse_line, input, dtype=(label_dtype, tf.int64, dtype),
              name="map_fn"
          )
  
          labels = tf.reshape(labels, [-1])
          indices = tf.reshape(indices, [-1, 1])
          values = tf.reshape(values, [-1])
  
          feature_indices = tf.concat([
              tf.expand_dims(tf.range(tf.shape(labels)[0], dtype=tf.int64), 1),
              indices
          ], axis=1)
  
          feature_shape = tf.stack([tf.shape(labels, out_type=tf.int64)[0], num_features])
  
          return labels, feature_indices, values, feature_shape