input: def decode_libsvm(input: tf.Tensor, num_features: int, dtype: tf.DType = tf.float32, label_dtype: tf.DType = tf.int64, name: str = None) -> Tuple[tf.Tensor, tf.Tensor, tf.Tensor, tf.Tensor]:
      """
      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]`.
  
      >>> decode_libsvm(tf.constant(["1 2:1 4:1", "2 2:1 5:1"]), 6)
      (<tf.Tensor: shape=(2,), dtype=int64, numpy=array([1, 2])>,
       <tf.Tensor: shape=(4, 2), dtype=int64, numpy=
       array([[0, 2],
              [0, 4],
              [1, 2],
              [1, 5]])>,
       <tf.Tensor: shape=(4,), dtype=float32, numpy=array([1., 1., 1., 1.])>,
       <tf.Tensor: shape=(2,), dtype=int64, numpy=array([6])>)
  
      Args:
          input: A `Tensor` of type `string`. Each string is a record in the LibSVM format.
          num_features: An `int` that is `>= 1`. The number of features expected in the input.
          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`.
              feature_indices: A `Tensor` of type `int64`.
              feature_values: A `Tensor` of type `dtype`.
              feature_shape: A `Tensor` of type `int64`.
      """
output:     with tf.name_scope(name, "decode_libsvm", [input, num_features, dtype, label_dtype]):
          input_split = tf.strings.split(input, sep=" ")
          labels = tf.strings.to_number(input_split.values[0], out_type=label_dtype)
          
          features = input_split.values[1:]
          feature_split = tf.strings.split(features, sep=":")
          feature_indices = tf.strings.to_number(feature_split.values[::2], out_type=tf.int64)
          feature_values = tf.strings.to_number(feature_split.values[1::2], out_type=dtype)
          
          feature_indices = tf.stack([tf.range(tf.size(feature_indices), dtype=tf.int64), feature_indices], axis=1)
          
          feature_shape = tf.stack([tf.size(input), num_features])
          
          return labels, feature_indices, feature_values, feature_shape