code: def setUp(self):
      super().setUp()
      with torch.random.fork_rng():
          torch.manual_seed(0)
          train_X = torch.linspace(0, 1, 10).unsqueeze(-1)
          train_Y = torch.sin((2 * pi) * train_X)
          train_Y = train_Y + 0.1 * torch.randn_like(train_Y)
  
      self.mlls = {}
      model = SingleTaskGP(
          train_X=train_X,
          train_Y=train_Y,
          input_transform=Normalize(d=1),
          outcome_transform=Standardize(m=1),
      )
      mll = ExactMarginalLogLikelihood(model.likelihood, model)
      self.mlls[
          type(mll), type(model.likelihood), type(model)
      ] = mll.to(self.device)
  
      model = ModelListGP(model, model)
      mll = SumMarginalLogLikelihood(model.likelihood, model)
      self.mlls[
          type(mll), type(model.likelihood), type(model)
      ] = mll.to(self.device)
  
file_path: botorch/test/optim/closures/test_model_closures.py
imports: from itertools import zip_longest
  from math import pi
  import torch
  from botorch.models import ModelListGP, SingleTaskGP
  from botorch.models.transforms.input import Normalize
  from botorch.models.transforms.outcome import Standardize
  from botorch.optim.closures.model_closures import get_loss_closure, get_loss_closure_with_grads
  from botorch.utils.testing import BotorchTestCase
  from gpytorch import settings
  from gpytorch.mlls import ExactMarginalLogLikelihood, SumMarginalLogLikelihood
  from torch.utils.data import DataLoader, TensorDataset
label_desc: Use image node_id 1 for calling the TestLossClosures obj's underlying member method code with example usage: obj.setUp() without return types