code: def mknfold(dall, nfold, param, seed, evals=(), fpreproc=None):
      
      evals = list(evals)
      np.random.seed(seed)
      randidx = np.random.permutation(dall.num_row())
      kstep = len(randidx) / nfold
      idset = [randidx[(i * kstep): min(len(randidx), (i + 1) * kstep)] for i in range(nfold)]
      ret = []
      for k in range(nfold):
          dtrain = dall.slice(np.concatenate([idset[i] for i in range(nfold) if k != i]))
          dtest = dall.slice(idset[k])
          # run preprocessing on the data set if needed
          if fpreproc is not None:
              dtrain, dtest, tparam = fpreproc(dtrain, dtest, param.copy())
          else:
              tparam = param
          plst = list(tparam.items()) + [('eval_metric', itm) for itm in evals]
          ret.append(CVPack(dtrain, dtest, plst))
      return ret
docs: Make an n-fold list of CVPack from random indices.