class_docstr: Sparse GP regression.
  
  The key reference is :cite:t:`titsias2009variational`.
  
  For a use example see :doc:`../../../../notebooks/getting_started/large_data`.
docstr: Bound from Jensen's Inequality:
  
  .. math::
      \log |K + σ²I| <= \log |Q + σ²I| + N * \log (1 + \textrm{tr}(K - Q)/(σ²N))
  
  :param common: A named tuple containing matrices that will be used
  :return: log_det, lower bound on :math:`-.5 * \textrm{output_dim} * \log |K + σ²I|`
docstr_tok: ["Bound","from","Jensen","'s","Inequality",":","..","math",":",":","\\log","|K","+","\u03c3\u00b2I|","<","=","\\log","|Q","+","\u03c3\u00b2I|","+","N","*","\\log","(","1","+","\\textrm","{","tr","}","(","K","-","Q",")","\/","(","\u03c3\u00b2N",")",")",":","param","common",":","A","named","tuple","containing","matrices","that","will","be","used",":","return",":","log_det",",","lower","bound","on",":","math",":","`","-.5","*","\\textrm","{","output_dim","}","*","\\log","|K","+","\u03c3\u00b2I|","`"]
code: def logdet_term(self, common: "SGPR.CommonTensors") -> tf.Tensor:
      r"""
      Bound from Jensen's Inequality:
  
      .. math::
          \log |K + σ²I| <= \log |Q + σ²I| + N * \log (1 + \textrm{tr}(K - Q)/(σ²N))
  
      :param common: A named tuple containing matrices that will be used
      :return: log_det, lower bound on :math:`-.5 * \textrm{output_dim} * \log |K + σ²I|`
      """
      sigma_sq = common.sigma_sq
      LB = common.LB
      AAT = common.AAT
  
      x, y = self.data
      outdim = to_default_float(tf.shape(y)[1])
      kdiag = self.kernel(x, full_cov=False)
  
      # tr(K) / σ²
      trace_k = tf.reduce_sum(kdiag / sigma_sq)
      # tr(Q) / σ²
      trace_q = tf.reduce_sum(tf.linalg.diag_part(AAT))
      # tr(K - Q) / σ²
      trace = trace_k - trace_q
  
      # 0.5 * log(det(B))
      half_logdet_b = tf.reduce_sum(
          tf.math.log(tf.linalg.diag_part(LB))
      )
  
      # sum log(σ²)
      log_sigma_sq = tf.reduce_sum(tf.math.log(sigma_sq))
  
      logdet_k = -outdim * (
          half_logdet_b + 0.5 * log_sigma_sq + 0.5 * trace
      )
      return logdet_k
  
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 3 for calling the SGPR_deprecated obj's underlying member method code with example usage: obj.logdet_term(common) and returns: logdet_k