'Generate indices to split data into training and test set.
Parameters
X : array-like, shape (n_samples, n_features)
Training data, where n_samples is the number of samples
and n_features is the number of features.
y : array-like, shape (n_samples,)
The target variable for supervised learning problems.
groups : array-like, with shape (n_samples,), optional
Group labels for the samples used while splitting the dataset into
train/test set.
Returns
train : ndarray
The training set indices for that split.
test : ndarray
The testing set indices for that split.
Notes
Randomized CV splitters may return different results for each call of
split. You can make the results identical by setting ``random_state``
to an integer.'

def split(self, X, y=None, groups=None):

    (X, y, groups) = indexable(X, y, groups)
    n_samples = _num_samples(X)
    if (self.n_splits > n_samples):
        raise ValueError('Cannot    have    number    of    splits    n_splits={0}    greater    than    the    number    of    samples:    {1}.'.format(self.n_splits, n_samples))
    for (train, test) in super(_BaseKFold, self).split(X, y, groups):
        (yield (train, test))
