class_docstr: Class used to wrap around the minimizer used for local search
  Default local minimizer is SciPy minimizer L-BFGS-B
class_docstr_tok: ["Class","used","to","wrap","around","the","minimizer","used","for","local","search","Default","local","minimizer","is","SciPy","minimizer","L-BFGS-B"]
code: def __init__(self, search_bounds, func_wrapper, **kwargs):
      self.func_wrapper = func_wrapper
      self.kwargs = kwargs
      self.minimizer = minimize
      bounds_list = list(zip(*search_bounds))
      self.lower = np.array(bounds_list[0])
      self.upper = np.array(bounds_list[1])
  
      # If no minimizer specified, use SciPy minimize with 'L-BFGS-B' method
      if not self.kwargs:
          n = len(self.lower)
          ls_max_iter = min(
              max(n * self.LS_MAXITER_RATIO, self.LS_MAXITER_MIN),
              self.LS_MAXITER_MAX,
          )
          self.kwargs["method"] = "L-BFGS-B"
          self.kwargs["options"] = {
              "maxiter": ls_max_iter,
          }
          self.kwargs["bounds"] = list(zip(self.lower, self.upper))
  
imports: import numpy
  from scipy.optimize import OptimizeResult
  from scipy.optimize import minimize
  from scipy.special import gammaln
  from scipy._lib._util import check_random_state
label_desc: Use image node_id 1 to create a new LocalSearchWrapper object  with example: obj = LocalSearchWrapper(search_bounds, func_wrapper)