code: def testFunction(self):
      with self.assertRaises(ValueError):
          Ishigami(b=0.33)
      f = Ishigami(b=0.1)
      self.assertEqual(f.b, 0.1)
      f = Ishigami(b=0.05)
      self.assertEqual(f.b, 0.05)
      X = torch.tensor([[1.0, 1.0, 1.0], [2.0, 2.0, 2.0]])
      m1, m2, m3 = f.compute_dgsm(X)
      for m in [m1, m2, m3]:
          self.assertEqual(len(m), 3)
      Z = f.evaluate_true(X)
      Ztrue = torch.tensor([5.8401, 7.4245])
      self.assertAllClose(Z, Ztrue, atol=1e-3)
      self.assertIsNone(f._optimizers)
      with self.assertRaises(NotImplementedError):
          f.optimal_value
  
file_path: botorch/test/test_functions/test_sensitivity_analysis.py
imports: import torch
  from botorch.test_functions.sensitivity_analysis import Gsobol, Ishigami, Morris
  from botorch.utils.testing import BotorchTestCase
label_desc: Use image node_id 1 for calling the TestIshigami obj's underlying member method code with example usage: obj.testFunction() without return types