code: def make_subsets(
      self, possible_indices, num_feature_subset, size_feature_subset
  ):
      if num_feature_subset * size_feature_subset < len(
          possible_indices
      ):
          raise Exception(
              "num_feature_subset * size_feature_subset must be >= number of total features"
          )
  
      if size_feature_subset > len(possible_indices):
          raise Exception(
              "size_feature_subset cannot be > number of total features"
          )
  
      random.shuffle(possible_indices)
      remaining_indices = copy.deepcopy(possible_indices)
  
      subsets = []
      while True:
          subset = []
          while (
              len(remaining_indices) > 0
              and len(subset) < size_feature_subset
          ):
              subset.append(remaining_indices.pop(0))
          subsets.append(subset)
          if len(remaining_indices) < size_feature_subset:
              break
  
      if len(remaining_indices) != 0:
          while len(remaining_indices) < size_feature_subset:
              index_bad = True
              while index_bad:
                  potential_index = random.choice(possible_indices)
                  if not (potential_index in remaining_indices):
                      remaining_indices.append(potential_index)
                      break
          subsets.append(remaining_indices)
  
      subsets_left = num_feature_subset - len(subsets)
      for i in range(subsets_left):
          subsets.append(
              random.sample(possible_indices, size_feature_subset)
          )
  
      return subsets
  
file_path: scikit-rebate/skrebate/vls.py
imports: from sklearn.base import BaseEstimator
  import copy
  import random
  import numpy
label_desc: Use image node_id 4 for calling the VLS obj's underlying member method code with example usage: obj.make_subsets(possible_indices, num_feature_subset, size_feature_subset) and returns: subsets