code: def _expectation_gaussian_linear_inducingpoints__identity(
      p: Gaussian,
      kernel: kernels.Linear,
      inducing_variable: InducingPoints,
      mean: mfn.Identity,
      _: None,
      nghp: None = None,
  ) -> tf.Tensor:
      """
      Compute the expectation:
      expectation[n] = <K_{Z, x_n} x_n^T>_p(x_n)
          - K_{.,.} :: Linear kernel
  
      :return: NxMxD
      """
      Xmu, Xcov = p.mu, p.cov
  
      N = tf.shape(Xmu)[0]
      var_Z = kernel.variance * inducing_variable.Z  # MxD
      tiled_Z = tf.tile(tf.expand_dims(var_Z, 0), (N, 1, 1))  # NxMxD
      return tf.linalg.matmul(
          tiled_Z, Xcov + (Xmu[..., None] * Xmu[:, None, :])
      )
  
file_path: GPflow/gpflow/expectations/linears.py
imports: from typing import Type, Union
  import tensorflow
  from check_shapes import check_shapes
  from ..None import kernels
  from ..None import mean_functions
  from ..inducing_variables import InducingPoints
  from ..probability_distributions import DiagonalGaussian, Gaussian, MarkovGaussian
  from .None import dispatch
  from .expectations import expectation
label_desc: Use image node_id 3 for calling a global function with example usage: _expectation_gaussian_linear_inducingpoints__identity(p, kernel, inducing_variable, mean, _, nghp) and returns: tf