class_docstr: Goldstein function
  
  :param bounds: the box constraints to define the domain in which the function is optimized.
  :param sd: standard deviation, to generate noisy evaluations of the function.
class_docstr_tok: ["Goldstein","function",":","param","bounds",":","the","box","constraints","to","define","the","domain","in","which","the","function","is","optimized",".",":","param","sd",":","standard","deviation",",","to","generate","noisy","evaluations","of","the","function","."]
code: def f(self, X):
      X = reshape(X, self.input_dim)
      n = X.shape[0]
      if X.shape[1] != self.input_dim:
          return "Wrong input dimension"
      else:
          x1 = X[:, 0]
          x2 = X[:, 1]
          fact1a = (x1 + x2 + 1) ** 2
          fact1b = (
              19
              - 14 * x1
              + 3 * x1**2
              - 14 * x2
              + 6 * x1 * x2
              + 3 * x2**2
          )
          fact1 = 1 + fact1a * fact1b
          fact2a = (2 * x1 - 3 * x2) ** 2
          fact2b = (
              18
              - 32 * x1
              + 12 * x1**2
              + 48 * x2
              - 36 * x1 * x2
              + 27 * x2**2
          )
          fact2 = 30 + fact2a * fact2b
          fval = fact1 * fact2
          if self.sd == 0:
              noise = np.zeros(n).reshape(n, 1)
          else:
              noise = np.random.normal(0, self.sd, n).reshape(n, 1)
          return fval.reshape(n, 1) + noise
  
imports: import numpy
  from ..util.general import reshape
label_desc: Use image node_id 2 for calling the goldstein obj's underlying member method code with example usage: obj.f(X) and returns: str, unknown