def METHOD_NAME(self, cuda=False, cg=False):
    # This test throws a warning because the fixed noise likelihood gets the wrong input
    warnings.simplefilter("ignore", GPInputWarning)
    train_x, test_x, train_y, test_y = self._get_data(cuda=cuda)
    # We're manually going to set the hyperparameters to something they shouldn't be
    likelihood = FixedNoiseGaussianLikelihood(torch.ones(11) * 0.001)
    gp_model = ExactGPModel(train_x, train_y, likelihood)
    mll = gpytorch.ExactMarginalLogLikelihood(likelihood, gp_model)
    gp_model.rbf_covar_module.initialize(lengthscale=exp(1))
    gp_model.mean_module.initialize(constant=0)
    if cuda:
        gp_model.cuda()
        likelihood.cuda()
    # Find optimal model hyperparameters
    gp_model.train()
    likelihood.train()
    optimizer = optim.Adam(gp_model.parameters(), lr=0.1)
    optimizer.n_iter = 0
    with gpytorch.settings.debug(False), gpytorch.settings.max_cholesky_size(0 if cg else 1e10):
        for _ in range(75):
            optimizer.zero_grad()
            output = gp_model(train_x)
            loss = -mll(output, train_y)
            loss.backward()
            optimizer.n_iter += 1
            optimizer.step()
        for param in gp_model.parameters():
            self.assertTrue(param.grad is not None)
            self.assertGreater(param.grad.norm().item(), 0)
        optimizer.step()
        # Test the model
        gp_model.eval()
        likelihood.eval()
        test_function_predictions = likelihood(gp_model(test_x))
        mean_abs_error = torch.mean(torch.abs(test_y - test_function_predictions.mean))
    self.assertLess(mean_abs_error.squeeze().item(), 0.05)