code: def make_classification_dataset(datatype, nrows, ncols, nclasses):
      n_real_features = min(
          ncols, int(max(nclasses * 2, math.ceil(ncols / 10)))
      )
      n_clusters_per_class = min(
          2, max(1, int(2**n_real_features / nclasses))
      )
      n_redundant = min(
          ncols - n_real_features, max(2, math.ceil(ncols / 20))
      )
      try:
          X, y = data.make_classification(
              dtype=datatype,
              n_samples=nrows + 1000,
              n_features=ncols,
              random_state=SEED,
              class_sep=1.0,
              n_informative=n_real_features,
              n_clusters_per_class=n_clusters_per_class,
              n_redundant=n_redundant,
              n_classes=nclasses,
          )
  
          r = dsel.train_test_split(
              X, y, random_state=SEED, train_size=nrows
          )
  
          if len(cp.unique(r[2])) < nclasses:
              raise ValueError(
                  "Training data does not have all classes."
              )
  
          return r
  
      except ValueError:
          pytest.skip(
              "Skipping the test for invalid combination of ncols/nclasses"
          )
  
imports: import cuml.internals.logger
  import cuml
  import cuml.svm
  import sklearn.svm
  from cuml.testing.utils import unit_param, quality_param, stress_param
  from queue import Empty
  import cuml.model_selection
  import cuml.datasets
  import pytest
  from cuml.internals.safe_imports import cpu_only_import
  import gc
  import multiprocessing
  import time
  import math
  from cuml.internals.safe_imports import gpu_only_import
  from cuml.common import input_to_cuml_array
label_desc: Use image node_id 4 for calling a global function with example usage: make_classification_dataset(datatype, nrows, ncols, nclasses) and returns: r