code: def _build_predict(self, Xnew, full_cov=False):
          
          _, _, Luu, L, _, _, gamma = self._build_common_terms()
          Kus = features.Kuf(self.feature, self.kern, Xnew)  # size  M x Xnew
  
          w = tf.matrix_triangular_solve(Luu, Kus, lower=True)  # size M x Xnew
  
          tmp = tf.matrix_triangular_solve(tf.transpose(L), gamma, lower=False)
          mean = tf.matmul(w, tmp, transpose_a=True) + self.mean_function(Xnew)
          intermediateA = tf.matrix_triangular_solve(L, w, lower=True)
  
          if full_cov:
              var = self.kern.K(Xnew) - tf.matmul(w, w, transpose_a=True) \
                    + tf.matmul(intermediateA, intermediateA, transpose_a=True)
              var = tf.tile(var[None, ...], [self.num_latent, 1, 1])  # P x N x N
          else:
              var = self.kern.Kdiag(Xnew) - tf.reduce_sum(tf.square(w), 0) \
                    + tf.reduce_sum(tf.square(intermediateA), 0)  # size Xnew,
              var = tf.tile(var[:, None], [1, self.num_latent])
  
          return mean, var
docs: Compute the mean and variance of the latent function at some new points
          Xnew.