parameters: (estimator, X, y, indices, train_indices=None)
return_statement: return X_subset, y_subset
docstring: Create subset of dataset and properly handle kernels.
  
      Slice X, y according to indices for cross-validation, but take care of
      precomputed kernel-matrices or pairwise affinities / distances.
  
      If ``estimator._pairwise is True``, X needs to be square and
      we slice rows and columns. If ``train_indices`` is not None,
      we slice rows using ``indices`` (assumed the test set) and columns
      using ``train_indices``, indicating the training set.
  
      Labels y will always be indexed only along the first axis.
  
      Parameters
      ----------
      estimator : object
          Estimator to determine whether we should slice only rows or rows and
          columns.
  
      X : array-like, sparse matrix or iterable
          Data to be indexed. If ``estimator._pairwise is True``,
          this needs to be a square array-like or sparse matrix.
  
      y : array-like, sparse matrix or iterable
          Targets to be indexed.
  
      indices : array of int
          Rows to select from X and y.
          If ``estimator._pairwise is True`` and ``train_indices is None``
          then ``indices`` will also be used to slice columns.
  
      train_indices : array of int or None, default=None
          If ``estimator._pairwise is True`` and ``train_indices is not None``,
          then ``train_indices`` will be use to slice the columns of X.
  
      Returns
      -------
      X_subset : array-like, sparse matrix or list
          Indexed data.
  
      y_subset : array-like, sparse matrix or list
          Indexed targets.
docstring_summary: Create subset of dataset and properly handle kernels.
docstring_tokens: Create subset of dataset and properly handle kernels .
function: def _safe_split(estimator, X, y, indices, train_indices=None):
      """Create subset of dataset and properly handle kernels.
  
      Slice X, y according to indices for cross-validation, but take care of
      precomputed kernel-matrices or pairwise affinities / distances.
  
      If ``estimator._pairwise is True``, X needs to be square and
      we slice rows and columns. If ``train_indices`` is not None,
      we slice rows using ``indices`` (assumed the test set) and columns
      using ``train_indices``, indicating the training set.
  
      Labels y will always be indexed only along the first axis.
  
      Parameters
      ----------
      estimator : object
          Estimator to determine whether we should slice only rows or rows and
          columns.
  
      X : array-like, sparse matrix or iterable
          Data to be indexed. If ``estimator._pairwise is True``,
          this needs to be a square array-like or sparse matrix.
  
      y : array-like, sparse matrix or iterable
          Targets to be indexed.
  
      indices : array of int
          Rows to select from X and y.
          If ``estimator._pairwise is True`` and ``train_indices is None``
          then ``indices`` will also be used to slice columns.
  
      train_indices : array of int or None, default=None
          If ``estimator._pairwise is True`` and ``train_indices is not None``,
          then ``train_indices`` will be use to slice the columns of X.
  
      Returns
      -------
      X_subset : array-like, sparse matrix or list
          Indexed data.
  
      y_subset : array-like, sparse matrix or list
          Indexed targets.
  
      """
      if getattr(estimator, "_pairwise", False):
          if not hasattr(X, "shape"):
              raise ValueError("Precomputed kernels or affinity matrices have "
                               "to be passed as arrays or sparse matrices.")
          # X is a precomputed square kernel matrix
          if X.shape[0] != X.shape[1]:
              raise ValueError("X should be a square kernel matrix")
          if train_indices is None:
              X_subset = X[np.ix_(indices, indices)]
          else:
              X_subset = X[np.ix_(indices, train_indices)]
      else:
          X_subset = _safe_indexing(X, indices)
  
      if y is not None:
          y_subset = _safe_indexing(y, indices)
      else:
          y_subset = None
  
      return X_subset, y_subset
function_tokens: def _safe_split ( estimator , X , y , indices , train_indices = None ) : if getattr ( estimator , "_pairwise" , False ) : if not hasattr ( X , "shape" ) : raise ValueError ( "Precomputed kernels or affinity matrices have " "to be passed as arrays or sparse matrices." ) # X is a precomputed square kernel matrix if X . shape [ 0 ] != X . shape [ 1 ] : raise ValueError ( "X should be a square kernel matrix" ) if train_indices is None : X_subset = X [ np . ix_ ( indices , indices ) ] else : X_subset = X [ np . ix_ ( indices , train_indices ) ] else : X_subset = _safe_indexing ( X , indices ) if y is not None : y_subset = _safe_indexing ( y , indices ) else : y_subset = None return X_subset , y_subset