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.
code: def common_terms(
      self,
  ) -> Tuple[
      tf.Tensor,
      tf.Tensor,
      tf.Tensor,
      tf.Tensor,
      tf.Tensor,
      tf.Tensor,
      tf.Tensor,
  ]:
      X_data, Y_data = self.data
      num_inducing = self.inducing_variable.num_inducing
      err = Y_data - self.mean_function(X_data)  # size [N, R]
      Kdiag = self.kernel(X_data, full_cov=False)
      kuf = Kuf(self.inducing_variable, self.kernel, X_data)
      kuu = Kuu(
          self.inducing_variable, self.kernel, jitter=default_jitter()
      )
  
      sigma_sq = tf.squeeze(
          self.likelihood.variance_at(X_data), axis=-1
      )
  
      Luu = tf.linalg.cholesky(kuu)  # => Luu Luu^T = kuu
      V = tf.linalg.triangular_solve(
          Luu, kuf
      )  # => V^T V = Qff = kuf^T kuu^-1 kuf
  
      diagQff = tf.reduce_sum(tf.square(V), 0)
      nu = Kdiag - diagQff + sigma_sq
  
      B = tf.eye(
          num_inducing, dtype=default_float()
      ) + tf.linalg.matmul(V / nu, V, transpose_b=True)
      L = tf.linalg.cholesky(B)
      beta = err / tf.expand_dims(nu, 1)  # size [N, R]
      alpha = tf.linalg.matmul(V, beta)  # size [M, R]
  
      gamma = tf.linalg.triangular_solve(
          L, alpha, lower=True
      )  # size [M, R]
  
      return err, nu, Luu, L, alpha, beta, gamma
  
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 1 for calling the GPRFITC obj's underlying member method code with example usage: obj.common_terms() and returns: err,  nu,  Luu,  L,  alpha,  beta,  gamma