Fits `scipy_data_fitting.Fit.function` to the data and returns
        the output from the specified curve fit function.

        See `scipy_data_fitting.Fit.options` for details on how to control
        or override the the curve fitting algorithm.

def curve_fit(self):
        """
        Fits `scipy_data_fitting.Fit.function` to the data and returns
        the output from the specified curve fit function.

        See `scipy_data_fitting.Fit.options` for details on how to control
        or override the the curve fitting algorithm.
        """
        if not hasattr(self,'_curve_fit'):
            options = self.options.copy()
            fit_function = options.pop('fit_function')
            independent_values = self.data.array[0]
            dependent_values = self.data.array[1]

            if fit_function == 'lmfit':
                self._curve_fit = lmfit.minimize(
                    self.lmfit_fcn2min, self.lmfit_parameters,
                    args=(independent_values, dependent_values, self.data.error), **options)
            else:
                p0 = [ prefix_factor(param) * param['guess'] for param in self.fitting_parameters ]
                self._curve_fit = fit_function(
                    self.function, independent_values, dependent_values, p0, **options)

        return self._curve_fit