code: def predict_noiseless(self, Xnew, full_cov=False, kern=None):
          
          # Predict the latent function values
          mu, var = self._raw_predict(Xnew, full_cov=full_cov, kern=kern)
  
          # Un-apply normalization
          if self.normalizer is not None:
              mu, var = self.normalizer.inverse_mean(mu), self.normalizer.inverse_variance(var)
  
          return mu, var
docs: Predict the underlying function  f at the new point(s) Xnew.
  
          :param Xnew: The points at which to make a prediction
          :type Xnew: np.ndarray (Nnew x self.input_dim)
          :param full_cov: whether to return the full covariance matrix, or just the diagonal
          :type full_cov: bool
          :param kern: The kernel to use for prediction (defaults to the model kern).
  
          :returns: (mean, var):
              mean: posterior mean, a Numpy array, Nnew x self.input_dim
              var: posterior variance, a Numpy array, Nnew x 1 if full_cov=False, Nnew x Nnew otherwise
  
             If full_cov and self.input_dim > 1, the return shape of var is Nnew x Nnew x self.input_dim.
             If self.input_dim == 1, the return shape is Nnew x Nnew.
             This is to allow for different normalizations of the output dimensions.