code: def _sample_rows(self, X, Y, sample_shape, seed):
          
          if sample_shape[0] is None or X.shape[0] <= sample_shape[0]:
              X_sample, Y_sample = X, Y
          elif Y is None:
              np.random.seed(seed)
              row_indices = np.random.choice(
                  X.shape[0], size=sample_shape[0], replace=False
              )
              X_sample, Y_sample = X.iloc[row_indices], Y
          else:
              drop_size = X.shape[0] - sample_shape[0]
              sample_size = sample_shape[0]
              sss = StratifiedShuffleSplit(
                  n_splits=2, test_size=drop_size, train_size=sample_size, random_state=seed
              )
              row_indices, _ = next(sss.split(X, Y))
              X_sample, Y_sample = X.iloc[row_indices], Y.iloc[row_indices]
          return (X_sample, Y_sample)
docs: Stratified uniform sampling of rows, according to the classes in Y.
          Ensures there are enough samples from each class in Y for cross
          validation.