code: def predict(self, X, with_noise=True):
          
          m, v = self._predict(X, False, with_noise)
          # We can take the square root because v is just a diagonal matrix of variances
          return m, np.sqrt(v)
docs: Predictions with the model. Returns posterior means and standard deviations at X. Note that this is different in GPy where the variances are given.
  
          Parameters:
              X (np.ndarray) - points to run the prediction for.
              with_noise (bool) - whether to add noise to the prediction. Default is True.