docstr: Run 'allocate_inducing_points' and check that all tensors allocated
  in that function are garbabe-collected.
code: def test_allocate_inducing_points_doesnt_leak(self) -> None:
      """
      Run 'allocate_inducing_points' and check that all tensors allocated
      in that function are garbabe-collected.
      """
  
      def _get_n_tensors_tracked_by_gc() -> int:
          gc.collect()
          return sum(
              1
              for elt in gc.get_objects()
              if isinstance(elt, torch.Tensor)
          )
  
      def f() -> None:
          """Construct and use a GreedyVarianceReduction allocator."""
          x = torch.rand(7, 3).to(self.device)
          kernel = ScaleKernel(MaternKernel())
          allocator = GreedyVarianceReduction()
          allocator.allocate_inducing_points(x, kernel, 4, x.shape[:-2])
  
      n_tensors_before = _get_n_tensors_tracked_by_gc()
      f()
      n_tensors_after = _get_n_tensors_tracked_by_gc()
  
      self.assertEqual(n_tensors_before, n_tensors_after)
  
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 TestGreedyVarianceReduction obj's underlying member method code with example usage: obj.test_allocate_inducing_points_doesnt_leak() and returns: sum