class_docstr: Test some basic splitters.
code: def test_random_group_split(self):
      solubility_dataset = load_solubility_data()
  
      groups = [0, 4, 1, 2, 3, 7, 0, 3, 1, 0]
      # 0 1 2 3 4 5 6 7 8 9
  
      group_splitter = dc.splits.RandomGroupSplitter(groups)
  
      train_idxs, valid_idxs, test_idxs = group_splitter.split(
          solubility_dataset,
          frac_train=0.5,
          frac_valid=0.25,
          frac_test=0.25,
      )
  
      class_ind = [-1] * 10
  
      all_idxs = []
      for s in train_idxs + valid_idxs + test_idxs:
          all_idxs.append(s)
  
      assert sorted(all_idxs) == list(range(10))
  
      for split_idx, split in enumerate(
          [train_idxs, valid_idxs, test_idxs]
      ):
          for s in split:
              if class_ind[s] == -1:
                  class_ind[s] = split_idx
              else:
                  assert class_ind[s] == split_idx
  
imports: import os
  import unittest
  import numpy
  import deepchem
  from deepchem.data import NumpyDataset
  from deepchem.splits import IndexSplitter
label_desc: Use image node_id 1 for calling the TestSplitter obj's underlying member method code with example usage: obj.test_random_group_split() without return types