"""
LMFIT: Non-Linear Least-Squares Minimization and Curve-Fitting for Python
=========================================================================

Lmfit provides a high-level interface to non-linear optimization and
curve-fitting problems for Python. It builds on the Levenberg-Marquardt
algorithm of scipy.optimize.leastsq(), but also supports most of the
optimization methods from scipy.optimize. It has a number of useful
enhancements, including:

  * Using Parameter objects instead of plain floats as variables. A
    Parameter has a value that can be varied in the fit, fixed, have
    upper and/or lower bounds. It can even have a value that is
    constrained by an algebraic expression of other Parameter values.

  * Ease of changing fitting algorithms. Once a fitting model is set
    up, one can change the fitting algorithm without changing the
    objective function.

  * Improved estimation of confidence intervals. While
    scipy.optimize.leastsq() will automatically calculate uncertainties
    and correlations from the covariance matrix, lmfit also has functions
    to explicitly explore parameter space to determine confidence levels
    even for the most difficult cases.

  * Improved curve-fitting with the Model class. This extends the
    capabilities of scipy.optimize.curve_fit(), allowing you to turn a
    function that models your data into a Python class that helps you
    parametrize and fit data with that model.

  * Many built-in models for common lineshapes are included and ready
    to use.

Copyright (c) 2020 Lmfit Developers ; BSD-3 license ; see LICENSE

"""
from asteval import Interpreter

from .confidence import conf_interval, conf_interval2d
from .minimizer import Minimizer, MinimizerException, minimize
from .parameter import Parameter, Parameters
from .printfuncs import (ci_report, fit_report, report_ci, report_errors,
                         report_fit)
from .model import Model, CompositeModel
from . import lineshapes, models

# versioneer code
from ._version import get_versions

__version__ = get_versions()['version']
del get_versions
