class_docstr: This implements GP regression with the FITC approximation.
  
  The key reference is :cite:t:`Snelson06sparsegaussian`.
  
  Implementation loosely based on code from GPML matlab library although
  obviously gradients are automatic in GPflow.
docstr: Compute the mean and variance of the latent function at some new points
  Xnew.
docstr_tok: ["Compute","the","mean","and","variance","of","the","latent","function","at","some","new","points","Xnew","."]
code: def predict_f(
      self,
      Xnew: InputData,
      full_cov: bool = False,
      full_output_cov: bool = False,
  ) -> MeanAndVariance:
      """
      Compute the mean and variance of the latent function at some new points
      Xnew.
      """
      assert_params_false(
          self.predict_f, full_output_cov=full_output_cov
      )
  
      _, _, Luu, L, _, _, gamma = self.common_terms()
      Kus = Kuf(self.inducing_variable, self.kernel, Xnew)  # [M, N]
  
      w = tf.linalg.triangular_solve(Luu, Kus, lower=True)  # [M, N]
  
      tmp = tf.linalg.triangular_solve(
          tf.transpose(L), gamma, lower=False
      )
      mean = tf.linalg.matmul(
          w, tmp, transpose_a=True
      ) + self.mean_function(Xnew)
      intermediateA = tf.linalg.triangular_solve(L, w, lower=True)
  
      if full_cov:
          var = (
              self.kernel(Xnew)
              - tf.linalg.matmul(w, w, transpose_a=True)
              + tf.linalg.matmul(
                  intermediateA, intermediateA, transpose_a=True
              )
          )
          var = tf.tile(
              var[None, ...], [self.num_latent_gps, 1, 1]
          )  # [P, N, N]
      else:
          var = (
              self.kernel(Xnew, full_cov=False)
              - tf.reduce_sum(tf.square(w), 0)
              + tf.reduce_sum(tf.square(intermediateA), 0)
          )  # [N, P]
          var = tf.tile(var[:, None], [1, self.num_latent_gps])
  
      return mean, var
  
imports: from typing import NamedTuple, Optional, Tuple
  import numpy
  import tensorflow
  from check_shapes import check_shapes, inherit_check_shapes
  from ..None import posteriors
  from ..base import InputData, MeanAndVariance, RegressionData, TensorData
  from ..config import default_float, default_jitter
  from ..covariances.dispatch import Kuf, Kuu
  from ..inducing_variables import InducingPoints
  from ..kernels import Kernel
  from ..likelihoods import Gaussian
  from ..mean_functions import MeanFunction
  from ..utilities import add_noise_cov, assert_params_false, to_default_float
  from .model import GPModel
  from .training_mixins import InternalDataTrainingLossMixin
  from .util import InducingPointsLike, data_input_to_tensor, inducingpoint_wrapper
label_desc: Use image node_id 4 for calling the GPRFITC obj's underlying member method code with example usage: obj.predict_f(Xnew, full_cov, full_output_cov) and returns: mean,  var