code: def optimize(self, x0, f=None, df=None, f_df=None):
          
  
          if len(self.bounds) == 1:
              raise IndexError("CMA does not work in problems of dimension 1.")
  
          try:
              import cma
              def CMA_f_wrapper(f):
                  def g(x):
                      return f(np.array([x]))
                  return g
              lB = np.asarray(self.bounds)[:,0]
              uB = np.asarray(self.bounds)[:,1]
              x = cma.fmin(CMA_f_wrapper(f), x0, 0.6, options={"bounds":[lB, uB], "verbose":-1})[0]
              return np.atleast_2d(x), f(np.atleast_2d(x))
          except ImportError:
              print("Cannot find cma library, please install it to use this option.")
              raise
docs: :param x0: initial point for a local optimizer.
          :param f: function to optimize.
          :param df: gradient of the function to optimize.
          :param f_df: returns both the function to optimize and its gradient.