code: def test_raises_for_multi_output_model(self):
      train_X = torch.rand(10, 1, device=self.device)
      model = SingleTaskVariationalGP(
          train_X=train_X,
          likelihood=GaussianLikelihood(),
          num_outputs=5,
      ).to(self.device)
      ipa = GreedyImprovementReduction(model, maximize=True)
      with self.assertRaises(NotImplementedError):
          ipa.allocate_inducing_points(
              inputs=train_X,
              covar_module=MaternKernel(),
              num_inducing=5,
              input_batch_shape=torch.Size([]),
          )
  
imports: import gc
  import torch
  from botorch.exceptions.errors import UnsupportedError
  from botorch.models.approximate_gp import SingleTaskVariationalGP
  from botorch.models.utils.inducing_point_allocators import _pivoted_cholesky_init, ExpectedImprovementQualityFunction, GreedyImprovementReduction, GreedyVarianceReduction, UnitQualityFunction
  from botorch.utils.testing import BotorchTestCase
  from gpytorch.kernels import MaternKernel, ScaleKernel
  from gpytorch.likelihoods import GaussianLikelihood
  from gpytorch.mlls import VariationalELBO
label_desc: Use image node_id 3 for calling the TestGreedyImprovementReduction obj's underlying member method code with example usage: obj.test_raises_for_multi_output_model() without return types