class_docstr: Sparse GP regression.
  
  The key reference is :cite:t:`titsias2009variational`.
  
  For a use example see :doc:`../../../../notebooks/getting_started/large_data`.
docstr: Computes the mean and variance of q(u) = N(mu, cov), the variational distribution on
  inducing outputs.
  
  SVGP with this q(u) should predict identically to SGPR.
  
  :return: mu, cov
docstr_tok: ["Computes","the","mean","and","variance","of","q","(","u",")","=","N","(","mu",",","cov",")",",","the","variational","distribution","on","inducing","outputs",".","SVGP","with","this","q","(","u",")","should","predict","identically","to","SGPR",".",":","return",":","mu",",","cov"]
code: def compute_qu(self) -> Tuple[tf.Tensor, tf.Tensor]:
      """
      Computes the mean and variance of q(u) = N(mu, cov), the variational distribution on
      inducing outputs.
  
      SVGP with this q(u) should predict identically to SGPR.
  
      :return: mu, cov
      """
      X_data, Y_data = self.data
  
      kuf = Kuf(self.inducing_variable, self.kernel, X_data)
      kuu = Kuu(
          self.inducing_variable, self.kernel, jitter=default_jitter()
      )
  
      var = tf.squeeze(self.likelihood.variance_at(X_data), axis=-1)
      std = tf.sqrt(var)
      scaled_kuf = kuf / std
      sig = kuu + tf.matmul(scaled_kuf, scaled_kuf, transpose_b=True)
      sig_sqrt = tf.linalg.cholesky(sig)
  
      sig_sqrt_kuu = tf.linalg.triangular_solve(sig_sqrt, kuu)
  
      cov = tf.linalg.matmul(
          sig_sqrt_kuu, sig_sqrt_kuu, transpose_a=True
      )
      err = Y_data - self.mean_function(X_data)
      scaled_err = err / std[..., None]
      mu = tf.linalg.matmul(
          sig_sqrt_kuu,
          tf.linalg.triangular_solve(
              sig_sqrt, tf.linalg.matmul(scaled_kuf, scaled_err)
          ),
          transpose_a=True,
      )
  
      return mu, cov
  
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 7 for calling the SGPR_deprecated obj's underlying member method code with example usage: obj.compute_qu() and returns: mu,  cov