code: def validate_eval_set(eval_set, eval_name, X_train):
      """Check if the shapes of eval_set are compatible with X_train.
  
      Parameters
      ----------
      eval_set : List of numpy array
          The list evaluation set.
          The last one is used for early stopping
      X_train : np.ndarray
          Train owned products
  
      Returns
      -------
      eval_names : list of str
          Validated list of eval_names.
  
      """
      eval_names = eval_name or [
          f"val_{i}" for i in range(len(eval_set))
      ]
      assert len(eval_set) == len(
          eval_names
      ), "eval_set and eval_name have not the same length"
  
      for set_nb, X in enumerate(eval_set):
          check_input(X)
          msg = (
              f"Number of columns is different between eval set {set_nb}"
              + f"({X.shape[1]}) and X_train ({X_train.shape[1]})"
          )
          assert X.shape[1] == X_train.shape[1], msg
      return eval_names
  
imports: from torch.utils.data import DataLoader
  from pytorch_tabnet.utils import create_sampler, SparsePredictDataset, PredictDataset, check_input
  import scipy
label_desc: Use image node_id 2 for calling a global function with example usage: validate_eval_set(eval_set, eval_name, X_train) and returns: eval_names