input: from typing import List, Tuple
  
  
  def decode_libsvm(input: str, num_features: int, dtype: str = 'tf.float32', label_dtype: str = 'tf.int64', name: str = None) -> Tuple[str, List[int], List[int], List[int]]:
      """
      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("1 3:2 4:5", 5)
      ('1', [3, 4], [2, 5], [5])
      """
      pass
output:     
      parts = input.split()
      label = parts[0]
      indices = []
      values = []
      shape = [num_features]
      
      for part in parts[1:]:
          index, value = part.split(':')
          indices.append(int(index))
          values.append(int(value))
      
      return label, indices, values, shape
  