code: def samples(self, gp, Y_metadata=None):
          
          orig_shape = gp.shape
          gp = gp.flatten()
          #FIXME: Very slow as we are computing a new random variable per input!
          #Can't get it to sample all at the same time
          #student_t_samples = np.array([stats.t.rvs(self.v, self.gp_link.transf(gpj),scale=np.sqrt(self.sigma2), size=1) for gpj in gp])
          dfs = np.ones_like(gp)*self.v
          scales = np.ones_like(gp)*np.sqrt(self.sigma2)
          student_t_samples = stats.t.rvs(dfs, loc=self.gp_link.transf(gp),
                                          scale=scales)
          return student_t_samples.reshape(orig_shape)
docs: Returns a set of samples of observations based on a given value of the latent variable.
  
          :param gp: latent variable