code: def test_eval_iteration(
      self,
      data_batch_shape=None,
      inducing_batch_shape=None,
      model_batch_shape=None,
      eval_data_batch_shape=None,
      expected_batch_shape=None,
  ):
      # Batch shapes
      model_batch_shape = (
          model_batch_shape
          if model_batch_shape is not None
          else self.batch_shape
      )
      data_batch_shape = (
          data_batch_shape
          if data_batch_shape is not None
          else self.batch_shape
      )
      inducing_batch_shape = (
          inducing_batch_shape
          if inducing_batch_shape is not None
          else self.batch_shape
      )
      expected_batch_shape = (
          expected_batch_shape
          if expected_batch_shape is not None
          else self.batch_shape
      )
      eval_data_batch_shape = (
          eval_data_batch_shape
          if eval_data_batch_shape is not None
          else self.batch_shape
      )
  
      # Mocks
      _wrapped_cholesky = MagicMock(wraps=torch.linalg.cholesky_ex)
      _wrapped_cg = MagicMock(wraps=linear_operator.utils.linear_cg)
      _wrapped_ciq = MagicMock(
          wraps=linear_operator.utils.contour_integral_quad
      )
      _cholesky_mock = patch(
          "torch.linalg.cholesky_ex", new=_wrapped_cholesky
      )
      _cg_mock = patch(
          "linear_operator.utils.linear_cg", new=_wrapped_cg
      )
      _ciq_mock = patch(
          "linear_operator.utils.contour_integral_quad",
          new=_wrapped_ciq,
      )
  
      # Make model and likelihood
      model, likelihood = self._make_model_and_likelihood(
          batch_shape=model_batch_shape,
          inducing_batch_shape=inducing_batch_shape,
          distribution_cls=self.distribution_cls,
          strategy_cls=self.strategy_cls,
      )
  
      # Do one forward pass
      self._training_iter(
          model,
          likelihood,
          data_batch_shape,
          mll_cls=self.mll_cls,
          cuda=self.cuda,
      )
  
      # Now do evaluation
      with _cholesky_mock as cholesky_mock, _cg_mock as cg_mock, _ciq_mock as ciq_mock:
          # Iter 1
          _ = self._eval_iter(
              model, eval_data_batch_shape, cuda=self.cuda
          )
          output = self._eval_iter(
              model, eval_data_batch_shape, cuda=self.cuda
          )
          self.assertEqual(output.batch_shape, expected_batch_shape)
          self.assertEqual(output.event_shape, self.event_shape)
          return cg_mock, cholesky_mock, ciq_mock
  
imports: from abc import abstractproperty
  from unittest.mock import MagicMock, patch
  import linear_operator
  import torch
  import gpytorch
  from .base_test_case import BaseTestCase
label_desc: Use image node_id 12 for calling the VariationalTestCase obj's underlying member method code with example usage: obj.test_eval_iteration(data_batch_shape, inducing_batch_shape, model_batch_shape, eval_data_batch_shape, expected_batch_shape) and returns: cg_mock,  cholesky_mock,  ciq_mock