code: def test_gen_candidates_scipy_with_fixed_features_inequality_constraints(
      self,
  ):
      options = {"maxiter": 5}
      for double in (True, False):
          self._setUp(double=double, expand=True)
          qEI = qExpectedImprovement(self.model, best_f=self.f_best)
          candidates, _ = gen_candidates_scipy(
              initial_conditions=self.initial_conditions.reshape(
                  1, 1, -1
              ),
              acquisition_function=qEI,
              inequality_constraints=[
                  (torch.tensor([0]), torch.tensor([1]), 0),
                  (torch.tensor([1]), torch.tensor([-1]), -1),
              ],
              fixed_features={1: 0.25},
              options=options,
          )
          # candidates is of dimension 1 x 1 x 2
          # so we are squeezing all the singleton dimensions
          candidates = candidates.squeeze()
          self.assertTrue(-EPS <= candidates[0] <= 1 + EPS)
          self.assertTrue(candidates[1].item() == 0.25)
  
imports: import math
  import warnings
  from unittest import mock
  import torch
  from botorch.acquisition import qExpectedImprovement, qKnowledgeGradient
  from botorch.exceptions.warnings import OptimizationWarning
  from botorch.fit import fit_gpytorch_mll
  from botorch.generation.gen import gen_candidates_scipy, gen_candidates_torch, get_best_candidates
  from botorch.models import SingleTaskGP
  from botorch.utils.testing import BotorchTestCase, MockAcquisitionFunction
  from gpytorch import settings
  from gpytorch.mlls.exact_marginal_log_likelihood import ExactMarginalLogLikelihood
  from scipy.optimize import OptimizeResult
label_desc: Use image node_id 9 for calling the TestGenCandidates obj's underlying member method code with example usage: obj.test_gen_candidates_scipy_with_fixed_features_inequality_constraints() without return types