class_docstr: Ishigami test function.
  
  three-dimensional function (usually evaluated on `[-pi, pi]^3`):
  
      f(x) = sin(x_1) + a sin(x_2)^2 + b x_3^4 sin(x_1)
  
  Here `a` and `b` are constants where a=7 and b=0.1 or b=0.05
  Proposed to test sensitivity analysis methods because it exhibits strong
  nonlinearity and nonmonotonicity and a peculiar dependence on x_3.
docstr: Args:
      b: the b constant, should be 0.1 or 0.05.
      noise_std: Standard deviation of the observation noise.
      negative: If True, negative the objective.
docstr_tok: ["Args",":","b",":","the","b","constant",",","should","be","0.1","or","0.05.","noise_std",":","Standard","deviation","of","the","observation","noise",".","negative",":","If","True",",","negative","the","objective","."]
code: def __init__(
      self,
      b: float = 0.1,
      noise_std: Optional[float] = None,
      negate: bool = False,
  ) -> None:
      r"""
      Args:
          b: the b constant, should be 0.1 or 0.05.
          noise_std: Standard deviation of the observation noise.
          negative: If True, negative the objective.
      """
      self._optimizers = None
      if b not in (0.1, 0.05):
          raise ValueError("b parameter should be 0.1 or 0.05")
      self.dim = 3
      if b == 0.1:
          self.si = [0.3138, 0.4424, 0]
          self.si_t = [0.558, 0.442, 0.244]
          self.s_ij = [0, 0.244, 0]
          self.dgsm_gradient = [-0.0004, -0.0004, -0.0004]
          self.dgsm_gradient_abs = [1.9, 4.45, 1.97]
          self.dgsm_gradient_square = [7.7, 24.5, 11]
      elif b == 0.05:
          self.si = [0.218, 0.687, 0]
          self.si_t = [0.3131, 0.6868, 0.095]
          self.s_ij = [0, 0.094, 0]
          self.dgsm_gradient = [-0.0002, -0.0002, -0.0002]
          self.dgsm_gradient_abs = [1.26, 4.45, 1.97]
          self.dgsm_gradient_square = [2.8, 24.5, 11]
      self._bounds = [(-math.pi, math.pi) for _ in range(self.dim)]
      self.b = b
      super().__init__(noise_std=noise_std, negate=negate)
  
imports: import math
  from typing import List, Optional, Tuple
  import torch
  from botorch.test_functions.synthetic import SyntheticTestFunction
  from torch import Tensor
label_desc: Use image node_id 1 to create a new Ishigami object from inherited base classes: SyntheticTestFunction with example: obj = Ishigami(b, noise_std, negate)