code: def _variational_expectations(
      self,
      X: TensorType,
      Fmu: TensorType,
      Fvar: TensorType,
      Y: TensorType,
  ) -> tf.Tensor:
      gh_x, gh_w = hermgauss(self.num_gauss_hermite_points)
      p = self.invlink.prob_is_largest(Y, Fmu, Fvar, gh_x, gh_w)
      ve = p * tf.math.log(1.0 - self.invlink.epsilon) + (
          1.0 - p
      ) * tf.math.log(self.invlink.eps_k1)
      return tf.reduce_sum(ve, axis=-1)
  
imports: from typing import Any, Optional
  import numpy
  import tensorflow
  import tensorflow_probability
  from check_shapes import check_shapes, inherit_check_shapes
  from ..base import MeanAndVariance, Module, Parameter, TensorType
  from ..config import default_float
  from ..quadrature import hermgauss
  from ..utilities import to_default_float, to_default_int
  from .base import Likelihood, MonteCarloLikelihood
label_desc: Use image node_id 3 for calling the MultiClass obj's underlying member method code with example usage: obj._variational_expectations(X, Fmu, Fvar, Y) and returns: tf