code: def _expectation_gaussian_linear_inducingpoints__sqe_inducingpoints(
      p: Union[Gaussian, DiagonalGaussian],
      lin_kern: kernels.Linear,
      feat1: InducingPoints,
      sqexp_kern: kernels.SquaredExponential,
      feat2: InducingPoints,
      nghp: None = None,
  ) -> tf.Tensor:
      """
      Compute the expectation:
      expectation[n] = <Ka_{Z1, x_n} Kb_{x_n, Z2}>_p(x_n)
          - K_lin_{.,.} :: Linear kernel
          - K_sqexp_{.,.} :: sqexp kernel
      Different Z1 and Z2 are handled if p is diagonal and K_lin and K_sqexp have disjoint
      active_dims, in which case the joint expectations simplify into a product of expectations
  
      :return: NxM1xM2
      """
      return tf.linalg.adjoint(
          expectation(p, (sqexp_kern, feat2), (lin_kern, feat1))
      )
  
file_path: GPflow/gpflow/expectations/cross_kernels.py
imports: from typing import Union, cast
  import tensorflow
  from check_shapes import check_shapes
  from ..None import kernels
  from ..base import TensorType
  from ..inducing_variables import InducingPoints
  from ..probability_distributions import DiagonalGaussian, Gaussian
  from .None import dispatch
  from .expectations import expectation
label_desc: Use image node_id 2 for calling a global function with example usage: _expectation_gaussian_linear_inducingpoints__sqe_inducingpoints(p, lin_kern, feat1, sqexp_kern, feat2, nghp) and returns: tf