code: def predict_noiseless(self,  Xnew, full_cov=False, Y_metadata=None, kern=None):
          
          return self.predict(Xnew, full_cov, Y_metadata, kern, None, False)
docs: Convenience function to predict the underlying function of the GP (often
          referred to as f) without adding the likelihood variance on the
          prediction function.
  
          This is most likely what you want to use for your predictions.
  
          :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 Y_metadata: metadata about the predicting point to pass to the likelihood
          :param kern: The kernel to use for prediction (defaults to the model
                       kern). this is useful for examining e.g. subprocesses.
  
          :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.
  
          Note: If you want the predictive quantiles (e.g. 95% confidence interval) use :py:func:"~GPy.core.gp.GP.predict_quantiles".