docs: def infer_x(self, y, sigma=None, k=None, **kwargs):
          """Infer probable x from input y
  
          @param y  the desired output for infered x.
          @param k  how many neighbors to consider for the average
                    this value override the class provided one on a per
                    method call basis.
          """
          assert len(y) == self.fmodel.dim_y, "Wrong dimension for y. Expected %i, got %i" % (self.fmodel.dim_y, len(y))
          k = k or self.k
          sigma = sigma or self.sigma
          x_guess = self._guess_x(y, k = k)[0]
          dists, index = self.fmodel.dataset.nn_x(x_guess, k = k)
          w = self._weights(index, dists, sigma*sigma,  y)
          return [np.sum([wi*self.fmodel.dataset.get_x(idx)
                  for wi, idx in zip(w, index)], axis = 0)]