code: def test_protoselect(
      n_classes, ft_factor, kernel_distance, num_prototypes, eps
  ):
      """ProtoSelect integration test on a multiclass dataset."""
      X, y = make_classification(
          n_samples=1000,
          n_features=ft_factor * n_classes,
          n_informative=n_classes,
          n_redundant=0,
          n_repeated=0,
          n_classes=n_classes,
          n_clusters_per_class=1,
          class_sep=10,
          random_state=0,
      )
  
      # define & fit the summariser
      summariser = ProtoSelect(eps=eps, kernel_distance=kernel_distance)
      summariser = summariser.fit(X=X, y=y)
  
      # get prototypes
      summary = summariser.summarise(num_prototypes=num_prototypes)
      protos = summary.prototypes
      protos_indices = summary.prototype_indices
      protos_labels = summary.prototype_labels
  
      assert len(protos) == len(protos_indices) == len(protos_labels)
      assert len(protos) <= num_prototypes
      assert set(protos_labels).issubset(set(y))
  
imports: from copy import deepcopy
  import matplotlib
  import numpy
  import pytest
  from sklearn.datasets import make_classification
  from sklearn.model_selection import train_test_split
  from alibi.api.defaults import DEFAULT_DATA_PROTOSELECT, DEFAULT_META_PROTOSELECT
  from alibi.api.interfaces import Explanation
  from alibi.prototypes import ProtoSelect
  from alibi.prototypes.protoselect import _batch_preprocessing, _imscatterplot, compute_prototype_importances, cv_protoselect_euclidean, visualize_image_prototypes
  from alibi.utils.kernel import EuclideanDistance
label_desc: Use image node_id 1 for calling a global function with example usage: test_protoselect(n_classes, ft_factor, kernel_distance, num_prototypes, eps) without return types