Non-Linear Least Squares Minimization, with flexible Parameter settings, based on scipy.optimize, and with many additional classes and methods for curve fitting.
OTHER License
New features:
add 'min_rel_change'
as optional variable in calculation of confidence intervals with
Model.conf_interval()
. (PR #937).
Model.eval_uncertainty
now takes an optional dscale
parameter (default value of 0.01) to
set the step size for calculating derivatives (PR #933).
add calculation of predicted_interval
to Model.eval_uncertainty
(PR #933).
Bug fixes/enhancements:
restore best-fit parameter values for high accuracy values of constrained values (PR #907)
improvement to Model for the difference between Parameter, "independent variable", and
"option". With this change, keyword arguments to model functions with non-numerice
default values such as do_thing=True
, or form='linear'
has those arguments
become clearly identified as independent variables,and use the provided values as
default values. (PR #941)
better saving/loading saved states of Model now use dill, have several cleanups, and
are now versioned for future-proofing. Also, propagate funcdets for Parameters when
loading a Model. (PR #932, PR #934)
in the TNC method, maxfun
is used instead of maxiter
.
fix bug calculating r-squared for fits with weights (PR #921, PR #923)
fix bug in modelresult.eval_uncertainty()
after load_modelresult()
(PR #909)
use StringIO for pandas.read_json
.
add test for MinimizerResult.uvars after successful fit (PR #913)
adding an example using basinhopping, can take other methods as command-line argument
Maintenance/Deprecations:
drop support for Python 3.7 that reached EOL on 2023-06-27 (PR #927)
fix tests for Python 3.12 and Python 3.13-dev
increase minimum numpy verstio to 1.23 and scipy to 1.8.
updates for compatibility with numpy 2.0
the dill
package is now required. (#940)
build switchded to use pyproject.toml (#928)
fix broken links in Examples gallery
fix intersphinx mapping to scipy docs.
New features:
add ModelResult.uvars
output to a ModelResult
after a successful fit
that contains ufloats
from the uncertainties
package which can be
used for downstream calculations that propagate the uncertainties (and
correlations) of the variable Parameters. (PR #888)
Outputs of residual functions, including Model._residual
, are more
explicitly coerced to 1d-arrays of datatype Float64. This decreases the
expectation for the user-supplied code to return ndarrays, and increases the
tolerance for more "array-like" objects or ndarrays that are not Float64 or
1-dimensional. (PR #899)
Model.fit
now takes a coerce_farray
option, defaulting to True
to
control whether to input data and independent variables that are "array-like"
are coerced to ndarrays of datatype Float64 or Complex128. If set to
False
then independent data that "array-like" (pandas.Series
, int32
arrays, etc) will be sent to the model function unaltered. The user may then
use other features of these objects, but may also need to explicitly coerce
the datatype of the result the change described above about coercing the
result causes problems. (Discussion #873; PR #899)
Bug fixes/enhancements:
fixed bug in Model.make_params()
for non-composite models that use a
prefix (Discussion #892; Issue #893; PR #895)
fixed bug with aborted fits for several methods having incorrect or invalid
fit statistics. (Discussion #894; Issue #896; PR #897)
Model.eval_uncertainty
now correctly calculates complex (real/imaginary pairs)
uncertainties for Models that generate complex results. (Issue #900; PR #901)
Model.eval
now returns and array-like value. This adds to the coercion
features above and fixes a bug for composite models that return lists (Issue #875; PR #901)
the HTML representation for a ModelResult
or MinimizerResult
are
improved, and create fewer entries in the Table of Contents for Jupyter lab.
(Issue #884; PR #883; PR #902)
New features:
add ModelResult.uvars
output to a ModelResult
after a successful fit
that contains ufloats
from the uncertainties
package which can be
used for downstream calculations that propagate the uncertainties (and
correlations) of the variable Parameters. (PR #888)
Outputs of residual functions, including Model._residual
, are more
explicitly coerced to 1d-arrays of dataype Float64. This decreases the
expectation for the user-supplied code to return ndarrays, and increases the
tolerance for more "array-like" objects or ndarrays that are not Float64 or
1-dimensional. (PR #899)
Model.fit
now takes a coerce_farray
option, defaulting to True
to
control whether to input data and independent variables that are "array-like"
are coerced to ndarrays of datatype Float64 or Complex128. If set to
False
then independent data that "array-like" (pandas.Series
, int32
arrays, etc) will be sent to the model function unaltered. The user may then
use other features of these objects, but may also need to explicitly coerce
the datatype of the result the change described above about coercing the
result causes problems. (Discussion #873; PR #899)
Bug fixes/enhancements:
fixed bug in Model.make_params()
for non-composite models that use a
prefix (Discussion #892; Issue #893; PR #895)
fixed bug with aborted fits for several methods having incorrect or invalid
fit statistics. (Discussion #894; Issue #896; PR #897)
Model.eval_uncertainty
now correctly calculates complex (real/imaginary pairs)
uncertainties for Models that generate complex results. (Issue #900; PR #901)
Model.eval
now returns and array-like value. This adds to the coercion
features above and fixes a bug for composite models that return lists (Issue #875; PR #901)
the HTML representation for a ModelResult
or MinimizerResult
are
improved, and create fewer entries in the Table of Contents for Jupyter lab.
(Issue #884; PR #883; PR #902)
Bug fixes/enhancements:
fixed bug in Model.make_params()
for initial parameter values that were
not recognized as floats such as np.Int64
. (Issue #871; PR #872)
explicitly set maxfun
for l-bfgs-b
method when setting
maxiter
. (Issue #864; Discussion #865; PR #866)
Published by newville over 1 year ago
New features:
create_params
function (PR #844)chi2_out
and nsigma
options to conf_interval2d()
ModelResult.summary()
to return many resulting fit statistics and attributes into a JSON-able dict.correl_table()
function to lmfit.printfuncs
and correl_mode
option to fit_report()
andModelResult.fit_report()
to optionally display a RST-formatted table of a correlation matrix.Bug fixes/enhancements:
param.vary=True
for a constrained parameter (Issue #859; PR #860)Model
to float64 ndarrays is somewhat less aggressive andmodel_data_coercion_section
for details). The resultingepsfcn
is increased to 1.e-10 to allow for handling of data with precision less than float64conf_interval2d
to use "increase chi-square by sigma**2*reduced chi-square" to give the sigma
-levelModelResult
(Issue #845; included in PR #844)Parameters
and user data (mguhyo; PR #837)Model.make_params
and create_params
to take optional dict of Parameter attributes (PR #844)nfev
from least_squares
to better reflect actual number of function calls (Issue #842; PR #844)Model.eval
when mixing parameters and keyword arguments (PR #844, #839)residual
to saved Model
result (PR #844, #830)ConstantModel
and ComplexConstantModel
will return an ndarray of the same shape as the independent variablex
(JeppeKlitgaard, Issue #840; PR #841)New features:
create_params
function (PR #844)chi2_out
and nsigma
options to conf_interval2d()
ModelResult.summary()
to return many resulting fit statistics and attributes into a JSON-able dict.correl_table()
function to lmfit.printfuncs
and correl_mode
option to fit_report()
andModelResult.fit_report()
to optionally display a RST-formatted table of a correlation matrix.Bug fixes/enhancements:
Model
to float64 ndarrays is somewhat less aggressive andmodel_data_coercion_section
for details). The resultingepsfcn
is increased to 1.e-10 to allow for handling of data with precision less than float64conf_interval2d
to use "increase chi-square by sigma**2*reduced chi-square" to give the sigma
-levelModelResult
(Issue #845; included in PR #844)Parameters
and user data (mguhyo; PR #837)Model.make_params
and create_params
to take optional dict of Parameter attributes (PR #844)nfev
from least_squares
to better reflect actual number of function calls (Issue #842; PR #844)Model.eval
when mixing parameters and keyword arguments (PR #844, #839)residual
to saved Model
result (PR #844, #830)ConstantModel
and ComplexConstantModel
will return an ndarray of the same shape as the independent variablex
(JeppeKlitgaard, Issue #840; PR #841)Supported Python Versions: 3.7, 3.8, 3.9, 3.10, 3.11
Minimal requirements: numpy>=1.19, scipy>=1.6, uncertainties>=3.1.4, asteval>=0.9.28
New features:
Pearson4Model
(@lellid; PR #800)SplineModel
(PR #804)rsquared
statistic to fit outputs and reports for Model fits (Issue #803; PR #810)dely
for model components of composite models (Issue #761; PR #826)Bug fixes/enhancements:
spercent
is always defined in params_html_table
functions (reported by @MySlientWind; Issue #768, PR #770)success
and covar
the MinimizerResult
(reported by Marc W. Pound; PR #771)pyproject.toml
and setup.cfg
; leave setup.py
for now (PR #777)CompositeModel
can now have different independent variables (@Julian-Hochhaus; Discussion #787; PR #788)StepModel(form='linear')
, was not consistent with the other ones (@matpompili; PR #794)Gaussian2dModel
, was not correct (@matpompili; PR #795)None
(PR #813)RectangleModel
(@arunpersaud; Issue #815; PR #816)Deprecations:
New features:
dely
for model components of composite models (Issue #761; PR #826)rsquared
statistic to fit outputs and reports for Model fits (Issue #803; PR #810)SplineModel
(PR #804)Pearson4Model
(@lellid; PR #800)Bug fixes/enhancements:
spercent
is always defined in params_html_table
functions (reported by @MySlientWind; Issue #768, PR #770)success
and covar
the MinimizerResult
(reported by Marc W. Pound; PR #771)pyproject.toml
and setup.cfg
; leave setup.py
for now (PR #777)CompositeModel
can now have different independent variables (@Julian-Hochhaus; Discussion #787; PR #788))StepModel(form='linear')
, was not consistent with the other ones. (@matpompili; PR #794)Gaussian2dModel
, was not correct. (@matpompili; PR #795)None
(PR #813)RectangleModel
(@arunpersaud; Issue #815; PR #816)Deprecations:
Published by newville about 3 years ago
Potentially breaking change:
x
is now required for the guess
method of Models (Issue #747; PR #748)To get reasonable estimates for starting values one should always supply both x
and y
values; in some cases it would work
when only providing data
(i.e., y-values). With the change above, x
is now required in the guess
method call, so scripts might
need to be updated to explicitly supply x
.
Bug fixes/enhancements:
title
keyword argument (PR #711)data
and indepdent_vars
to NumPy array with dtype=float64
or dtype=complex128
where applicable (Issues #723 and #728)max_nfev
to maxiter
when using differential_evolution
(PR #749, reported by Olivier B.)eval
method more precisely and allow for plotting of (Complex)ConstantModel by coercing theirfloat
, int
, or complex
return value to a numpy.ndarray
(Issue #684 and PR #754)dho
(Damped Harmonic Oscillator) lineshape (PR #755; @rayosborn)Minimizer._abort
to False
before starting a new fit (Issue #756 and PR #757; @azelcer)guess_from_peak2d
(@ivan-usovl; PR #758)Various:
DonaichModel
and donaich
lineshape, deprecated in version 1.0.1 (PR #707)name
argument in Parameters.add
(@kristianmeyerr; PR #725)setuptools_scm
for version info instead of versioneer
(PR #729)f-strings
(PR #730)test_manypeaks_speed.py
as flaky to avoid intermittent test failures (repeat up to 5 times; PR #745)lmfit.printfuncs.report_errors
and asteval
argument in Parameters
class (PR #759)Version 1.0.2 officially supports Python 3.9 and has dropped support for Python 3.5. The minimum version
of the following dependencies were updated: asteval>=0.9.21, numpy>=1.18, and scipy>=1.3.
New features:
lmfit.models.lmfit_models
; new Model class attribute valid_forms
(PR #663; @rayosborn)run_mcmc_kwargs argument
to Minimizer.emcee
to pass to the emcee.EnsembleSampler.run_mcmc
function (PR #694; @rbnvrw)Bug fixes:
ModelResult.eval_uncertainty
should use provided Parameters (PR #646)not_zero
to prevent ZeroDivisionError in lineshapes and use in exponential lineshape (Issue #631, PR #664; @s-weigand)last_internal_values
and use to restore internal values if fit is aborted (PR #667)lbfgsb
method now works, convert bytes to string if needed (Issue #677, PR #678; @leonfoks)init_params
and init_fit
are set when loading a ModelResult
(PR #706)Various:
test_check_ast_errors
for Python 3.9 (Issue #674, PR #675; @mwhudson)tiny
and check for it in bounded parameters to avoid "parameter not moving from initial value" (Issue #700, PR #701)max_nfev
to basinhopping
and brute
(now supported everywhere in lmfit) and set to more uniform default values (PR #701)Version 1.0.1 is the last release that supports Python 3.5. All newer version will
require 3.6+ so that we can use formatting-strings and rely on dictionaries being ordered.
New features:
max_nfev
to uniformly specify the maximum number of function evalutions (PR #610)maxfev
, maxiter
, ...) will no longer be passed to the underlyingmax_nfev
.
call_kws
was added to the MinimizerResult
class and contains the keyword arguments that areBug fixes:
load
and __setstate__
methods of the Parameter classguess_from_peak
function now also works correctly with decreasing x-values or when usingParameter.set()
method now correctly first updates the boundaries and then the value (Issue #636, PR #637; @arunpersaud)Various:
isParameter
function and automatic conversion of an uncertainties
object (PR #626)Version 1.0.0 supports Python 3.5, 3.6, 3.7, and 3.8
New features:
Improvements:
six
package are removed. (PR #612)Various:
emcee
. (PR #614)Version 0.9.15 is the last release that supports Python 2.7; it now also fully suports Python 3.8.
New features, improvements, and bug fixes:
Various:
To-be deprecated:
Version 0.9.15 is the last release that supports Python 2.7; it now also fully supports Python 3.8.
New features, improvements, and bug fixes:
Various:
To-be deprecated:
New features:
shgo
and dual_annealing
(new in SciPy v1.2) are now supported (Issue #527; PRs #545 and #556)eval
method added to the Parameter class (PR #550 by @zobristnicholas)printfuncs.params_html_table
(PR #552 by @aaristov and PR #559)brute
method (PR #564, requires SciPy v1.3)Bug fixes:
value
to both min
and max
(PR #571)FWHM
and height
expression calculations (PR #545)result.method
for emcee
algorithm (PR #558)inspect.signature
for PY3 to support wrapped functions (Issue #570; PR #576)result.nfev``` for
brute`` method when using parallelization (Issue #578; PR #579)Various:
jupyter-sphinx
to include examples/output (PRs #573 and #575)sphinx-gallery
(PR #574 and #583)