docs: def reeval(self, X, fit, func, ask, args=()):
          """store two fitness lists, `fit` and ``fitre`` reevaluating some
          solutions in `X`.
          ``self.evaluations`` evaluations are done for each reevaluated
          fitness value.
          See `__call__()`, where `reeval()` is called.
  
          """
          self.fit = list(fit)
          self.fitre = list(fit)
          self.idx = self.indices(fit)
          if not len(self.idx):
              return self.idx
          evals = int(self.evaluations) if self.f_aggregate else 1
          fagg = np.median if self.f_aggregate is None else self.f_aggregate
          for i in self.idx:
              X_i = X[i]
              if self.epsilon:
                  if self.parallel:
                      self.fitre[i] = fagg(func(ask(evals, X_i, self.epsilon), *args))
                  else:
                      self.fitre[i] = fagg([func(ask(1, X_i, self.epsilon)[0], *args)
                                              for _k in xrange(evals)])
              else:
                  self.fitre[i] = fagg([func(X_i, *args) for _k in xrange(evals)])
          self.evaluations_just_done = evals * len(self.idx)
          return self.fit, self.fitre, self.idx