docs: def do(self, repetitions=1, locations=np.arange(-0.5, 0.6, 0.2), plot=True):
          """generates, plots and saves function values ``func(y)``,
          where ``y`` is 'close' to `x` (see `__init__()`). The data are stored in
          the ``res`` attribute and the class instance is saved in a file
          with (the weired) name ``str(func)``.
  
          Parameters
          ----------
              `repetitions`
                  for each point, only for noisy functions is >1 useful. For
                  ``repetitions==0`` only already generated data are plotted.
              `locations`
                  coordinated wise deviations from the middle point given in `__init__`
  
          """
          if not repetitions:
              self.plot()
              return
  
          res = self.res
          for i in xrange(len(self.basis)):  # i-th coordinate
              if i not in res:
                  res[i] = {}
              # xx = np.array(self.x)
              # TODO: store res[i]['dx'] = self.basis[i] here?
              for dx in locations:
                  xx = self.x + dx * self.basis[i]
                  xkey = dx  # xx[i] if (self.basis == np.eye(len(self.basis))).all() else dx
                  if xkey not in res[i]:
                      res[i][xkey] = []
                  n = repetitions
                  while n > 0:
                      n -= 1
                      res[i][xkey].append(self.func(xx, *self.args))
                      if plot:
                          self.plot()
                      self.save()
          return self