diff --git a/lmfit-1.3.1.tar.gz b/lmfit-1.3.1.tar.gz deleted file mode 100644 index ce0f3a9..0000000 --- a/lmfit-1.3.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc386244adbd10ef1a2a2c4f9d17b3def905552c0a64aef854f0ad46cc309cc5 -size 629917 diff --git a/lmfit-1.3.2.tar.gz b/lmfit-1.3.2.tar.gz new file mode 100644 index 0000000..807b37a --- /dev/null +++ b/lmfit-1.3.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31beeae1f027c1b8c14dcd7f2e8488a80b75fb389e77fca677549bdc2fe597bb +size 623945 diff --git a/lmfit-pr965-asteval.patch b/lmfit-pr965-asteval.patch new file mode 100644 index 0000000..ee4ae1f --- /dev/null +++ b/lmfit-pr965-asteval.patch @@ -0,0 +1,357 @@ +From e62b1784e7516f543402c013cfd532d6003aa859 Mon Sep 17 00:00:00 2001 +From: Matthew Newville +Date: Sun, 4 Aug 2024 20:34:44 -0500 +Subject: [PATCH 1/9] BUG: fix typo in 'create_uvars' method + +Closes: #962 +--- + lmfit/parameter.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lmfit/parameter.py b/lmfit/parameter.py +index a7ec9a65..243d4227 100644 +--- a/lmfit/parameter.py ++++ b/lmfit/parameter.py +@@ -515,9 +515,9 @@ def create_uvars(self, covar=None): + vindex += 1 + vnames.append(par.name) + vbest.append(par.value) +- if getattr(par, 'sdterr', None) is None and covar is not None: ++ if getattr(par, 'stderr', None) is None and covar is not None: + par.stderr = sqrt(covar[vindex, vindex]) +- uvars[par.name] = ufloat(par.value, getattr(par, 'sdterr', 0.0)) ++ uvars[par.name] = ufloat(par.value, getattr(par, 'stderr', 0.0)) + + corr_uvars = None + if covar is not None: + +From 7fd4e42e84b3ab8f0bdc05274aa270d4ded765bf Mon Sep 17 00:00:00 2001 +From: Matthew Newville +Date: Sun, 11 Aug 2024 12:40:21 -0500 +Subject: [PATCH 2/9] MAINT: 'uncertainties' fails if 'stderr' is None, so set + to zero + +--- + lmfit/parameter.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/lmfit/parameter.py b/lmfit/parameter.py +index 243d4227..cd6d9626 100644 +--- a/lmfit/parameter.py ++++ b/lmfit/parameter.py +@@ -517,7 +517,10 @@ def create_uvars(self, covar=None): + vbest.append(par.value) + if getattr(par, 'stderr', None) is None and covar is not None: + par.stderr = sqrt(covar[vindex, vindex]) +- uvars[par.name] = ufloat(par.value, getattr(par, 'stderr', 0.0)) ++ stderr = getattr(par, 'stderr', 0.0) ++ if stderr is None: ++ stderr = 0.0 ++ uvars[par.name] = ufloat(par.value, stderr) + + corr_uvars = None + if covar is not None: + +From b812b4731805f9d85d717aff0ad34031c747d1d4 Mon Sep 17 00:00:00 2001 +From: Matthew Newville +Date: Sun, 11 Aug 2024 12:44:30 -0500 +Subject: [PATCH 3/9] MAINT: asteval no longer raises NameError to Python + +- so we suppress 'asteval' expections to stderr and look for them when creating parameters +--- + lmfit/parameter.py | 25 +++++++++++++++++++++++-- + tests/test_parameters.py | 3 +-- + 2 files changed, 24 insertions(+), 4 deletions(-) + +diff --git a/lmfit/parameter.py b/lmfit/parameter.py +index cd6d9626..77ba882c 100644 +--- a/lmfit/parameter.py ++++ b/lmfit/parameter.py +@@ -27,6 +27,20 @@ def check_ast_errors(expr_eval): + expr_eval.raise_exception(None) + + ++class Writer: ++ """Replace 'stdout' and 'stderr' for asteval.""" ++ def __init__(self, **kws): ++ self.messages = [] ++ for k, v in kws.items(): ++ setattr(self, k, v) ++ ++ def write(self, msg): ++ """Internal writer.""" ++ o = msg.strip() ++ if len(o) > 0: ++ self.messages.append(msg) ++ ++ + def asteval_with_uncertainties(*vals, obj=None, pars=None, names=None, **kwargs): + """Calculate object value, given values for variables. + +@@ -76,8 +90,9 @@ def __init__(self, usersyms=None): + + """ + super().__init__(self) +- +- self._asteval = Interpreter() ++ self._ast_msgs = Writer() ++ self._asteval = Interpreter(writer=self._ast_msgs, ++ err_writer=self._ast_msgs) + + _syms = {} + _syms.update(SCIPY_FUNCTIONS) +@@ -86,6 +101,9 @@ def __init__(self, usersyms=None): + for key, val in _syms.items(): + self._asteval.symtable[key] = val + ++ def _writer(self, msg): ++ self._asteval_msgs.append(msg) ++ + def copy(self): + """Parameters.copy() should always be a deepcopy.""" + return self.__deepcopy__(None) +@@ -433,6 +451,9 @@ def add(self, name, value=None, vary=True, min=-inf, max=inf, expr=None, + self.__setitem__(name, Parameter(value=value, name=name, vary=vary, + min=min, max=max, expr=expr, + brute_step=brute_step)) ++ if len(self._asteval.error) > 0: ++ err = self._asteval.error[0] ++ raise err.exc(err.msg) + + def add_many(self, *parlist): + """Add many parameters, using a sequence of tuples. +diff --git a/tests/test_parameters.py b/tests/test_parameters.py +index 7e12b1f0..998341e3 100644 +--- a/tests/test_parameters.py ++++ b/tests/test_parameters.py +@@ -39,8 +39,7 @@ def assert_parameter_attributes(par, expected): + def test_check_ast_errors(): + """Assert that an exception is raised upon AST errors.""" + pars = lmfit.Parameters() +- +- msg = r"at expr='<_?ast.Module object at" ++ msg = "name 'par2' is not defined" + with pytest.raises(NameError, match=msg): + pars.add('par1', expr='2.0*par2') + + +From 05fb78e8ebab8d3cc3360f3eb1ee852c8f4a7528 Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 10:50:54 -0400 +Subject: [PATCH 4/9] DOC: tweak 'sphinx-gallery' settings + +--- + doc/conf.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/conf.py b/doc/conf.py +index 1a36156b..972b552b 100644 +--- a/doc/conf.py ++++ b/doc/conf.py +@@ -167,7 +167,7 @@ + 'examples_dirs': '../examples', + 'gallery_dirs': 'examples', + 'filename_pattern': r'(\\|/)documentation|(\\|/)example_', +- 'ignore_pattern': r'(\\|/)doc_', ++ 'ignore_pattern': 'doc_', + 'ignore_repr_types': r'matplotlib', + 'image_srcset': ["3x"], + } + +From 07d65bf8ebcf013e7b47ce0c4930aa39d7cd2cc3 Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 10:51:28 -0400 +Subject: [PATCH 5/9] MAINT: update pre-commit hooks + +--- + .pre-commit-config.yaml | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml +index ee53e906..bad4bf3f 100644 +--- a/.pre-commit-config.yaml ++++ b/.pre-commit-config.yaml +@@ -2,7 +2,7 @@ exclude: 'doc/conf.py' + + repos: + - repo: https://github.com/asottile/pyupgrade +- rev: v3.16.0 ++ rev: v3.17.0 + hooks: + - id: pyupgrade + args: [--py38-plus] +@@ -12,18 +12,18 @@ repos: + hooks: + - id: check-ast + - id: check-builtin-literals ++ - id: check-docstring-first + - id: check-case-conflict + - id: check-merge-conflict + - id: check-toml ++ - id: check-yaml + - id: debug-statements + - id: end-of-file-fixer + - id: mixed-line-ending + - id: trailing-whitespace +- - id: fix-encoding-pragma +- args: [--remove] + + - repo: https://github.com/PyCQA/flake8 +- rev: 7.1.0 ++ rev: 7.1.1 + hooks: + - id: flake8 + additional_dependencies: [flake8-deprecated, flake8-mutable, Flake8-pyproject] + +From 805263ddfac4f877dfd2c4e834155bd274020e3d Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 10:53:22 -0400 +Subject: [PATCH 6/9] CI: update to latest NumPy version + +--- + azure-pipelines.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/azure-pipelines.yml b/azure-pipelines.yml +index 314d8704..01bc9d6e 100644 +--- a/azure-pipelines.yml ++++ b/azure-pipelines.yml +@@ -256,7 +256,7 @@ stages: + displayName: 'Install build, pip, setuptools, wheel, pybind11, and cython' + - script: | + export PATH=/home/vsts/.local/bin:$PATH +- export numpy_version=2.0.0 ++ export numpy_version=2.0.1 + wget https://github.com/numpy/numpy/releases/download/v${numpy_version}/numpy-${numpy_version}.tar.gz + tar xzvf numpy-${numpy_version}.tar.gz + cd numpy-${numpy_version} + +From 16f8cbd176ed5b9f5e1ac6a369c7bd75dbd5046a Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 12:39:05 -0400 +Subject: [PATCH 7/9] BLD: remove redundant wheel dependency + +--- + pyproject.toml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pyproject.toml b/pyproject.toml +index e41e844b..9578466d 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -1,5 +1,5 @@ + [build-system] +-requires = ["setuptools>=45", "wheel", "setuptools_scm>=6.2"] ++requires = ["setuptools>=45", "setuptools_scm>=6.2"] + build-backend = "setuptools.build_meta" + + [project] + +From d6810a558887956f598d58d9876be8fe96090d6d Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 18:06:34 -0400 +Subject: [PATCH 8/9] DOC: update names of the documentation examples in + Gallery + +- also rename the file doc_uvars_params.py to follow the usual naming + conventions +--- + doc/doc_examples_to_gallery.py | 13 ++++++++----- + doc/model.rst | 2 +- + ...{doc_uvars_params.py => doc_parameters_uvars.py} | 4 ++-- + 3 files changed, 11 insertions(+), 8 deletions(-) + rename examples/{doc_uvars_params.py => doc_parameters_uvars.py} (96%) + +diff --git a/doc/doc_examples_to_gallery.py b/doc/doc_examples_to_gallery.py +index 4cfeb5bc..49695ffd 100755 +--- a/doc/doc_examples_to_gallery.py ++++ b/doc/doc_examples_to_gallery.py +@@ -5,7 +5,7 @@ + + - create a "documentation" directory within "examples" + - add a README.txt file +-- copy the examples from the documentation, bu remove the "doc_" from the ++- copy the examples from the documentation, removing the "doc_" from the + filename + - add the required docstring to the files for proper rendering + - copy the data files +@@ -46,12 +46,15 @@ def copy_data_files(src_dir, dest_dir): + ) + + for fn in files: ++ sname = fn.name[4:] ++ lmfit_class, *description = sname[:-3].split('_') ++ gallery_name = f"{lmfit_class.capitalize()} - {' '.join(description)}" + + script_text = fn.read_text() + +- gallery_file = examples_documentation_dir / fn.name[4:] +- msg = "" # add optional message f +- gallery_file.write_text(f'"""\n{fn.name}\n{"=" * len(fn.name)}\n\n' ++ gallery_file = examples_documentation_dir / sname ++ msg = "" # add optional message ++ gallery_file.write_text(f'"""\n{gallery_name}\n{"=" * len(gallery_name)}\n\n' + f'{msg}\n"""\n{script_text}') + + # make sure the saved Models and ModelResult are available +@@ -67,5 +70,5 @@ def copy_data_files(src_dir, dest_dir): + + os.chdir(doc_dir) + +-# # data files for the other Gallery examples ++# data files for the other Gallery examples + copy_data_files(examples_documentation_dir, doc_dir) +diff --git a/doc/model.rst b/doc/model.rst +index 5c8ae340..e5d6506a 100644 +--- a/doc/model.rst ++++ b/doc/model.rst +@@ -1166,7 +1166,7 @@ that taking correlations between Parameters into account when performing + calculations can have a noticeable influence on the resulting uncertainties. + + +-.. jupyter-execute:: ../examples/doc_uvars_params.py ++.. jupyter-execute:: ../examples/doc_parameters_uvars.py + + + Note that the :meth:`Model.post_fit` does not need to be limited to this +diff --git a/examples/doc_uvars_params.py b/examples/doc_parameters_uvars.py +similarity index 96% +rename from examples/doc_uvars_params.py +rename to examples/doc_parameters_uvars.py +index 124c3024..1c4f2da8 100644 +--- a/examples/doc_uvars_params.py ++++ b/examples/doc_parameters_uvars.py +@@ -1,4 +1,4 @@ +-# ++# + import numpy as np + + from lmfit.models import ExponentialModel, GaussianModel +@@ -67,4 +67,4 @@ def post_fit(result): + + out = mod.fit(y, pars, x=x) + print(out.fit_report(min_correl=0.5)) +-# ++# + +From ff436c270d07433a7ae404fe76bc9c627b4edc3f Mon Sep 17 00:00:00 2001 +From: reneeotten +Date: Fri, 16 Aug 2024 22:02:40 -0400 +Subject: [PATCH 9/9] BLD: remove numexpr dependency (again) + +--- + pyproject.toml | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/pyproject.toml b/pyproject.toml +index 9578466d..cacdb8a4 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -59,7 +59,6 @@ doc = [ + "matplotlib", + "numdifftools", + "pandas", +- "numexpr", # note: Pandas appears to need numexpr to build our docs + "Pillow", + "pycairo;platform_system=='Windows'", + "Sphinx", diff --git a/python-lmfit.changes b/python-lmfit.changes index 72026f0..e858646 100644 --- a/python-lmfit.changes +++ b/python-lmfit.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Thu Sep 5 09:41:05 UTC 2024 - Ben Greiner + +- Update to 1.3.2 + * fix typo in restoring a _buildmodel dict (PR #957, Issue #956) + * fixes for Numpy2 support (PR #959, Issue #958) + * ensure that correct initial params are used when re-fitting a + ModeRresult (PR #961, Issue #960) + * make sure that CompositeModels cannot have a prefix (PR #961, + Issue #954) + * now require asteval>=1.0 and uncertainties>=3.2.2 +- Fix requirements +- Drop support-numpy-2.patch +- Add lmfit-pr965-asteval.patch gh#lmfit/lmfit-py#965 + ------------------------------------------------------------------- Fri Jul 5 03:01:53 UTC 2024 - Steve Kowalik diff --git a/python-lmfit.spec b/python-lmfit.spec index f5095e3..c598621 100644 --- a/python-lmfit.spec +++ b/python-lmfit.spec @@ -17,14 +17,14 @@ Name: python-lmfit -Version: 1.3.1 +Version: 1.3.2 Release: 0 Summary: Least-Squares Minimization with Bounds and Constraints License: BSD-3-Clause AND MIT URL: https://lmfit.github.io/lmfit-py/ Source: https://files.pythonhosted.org/packages/source/l/lmfit/lmfit-%{version}.tar.gz -# PATCH-FIX-UPSTREAM gh#lmfit/lmfit-py#959 -Patch0: support-numpy-2.patch +# PATCH-FIX-UPSTREAM lmfit-pr965-asteval.patch gh#lmfit/lmfit-py#965 +Patch0: https://github.com/lmfit/lmfit-py/pull/965.patch#/lmfit-pr965-asteval.patch BuildRequires: %{python_module base >= 3.8} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools_scm} @@ -32,24 +32,23 @@ BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros -Requires: python-asteval >= 0.9.28 +Requires: python-asteval >= 1 Requires: python-dill >= 0.3.4 -Requires: python-numpy >= 1.23 -Requires: python-scipy >= 1.8 -Requires: python-uncertainties >= 3.1.4 +Requires: python-numpy >= 1.19 +Requires: python-scipy >= 1.6 +Requires: python-uncertainties >= 3.2.2 Recommends: python-emcee Recommends: python-matplotlib Recommends: python-pandas BuildArch: noarch # SECTION test requirements -BuildRequires: %{python_module asteval >= 0.9.28} +BuildRequires: %{python_module asteval >= 1} BuildRequires: %{python_module dill >= 0.3.4} BuildRequires: %{python_module flaky} -BuildRequires: %{python_module numpy >= 1.23} -BuildRequires: %{python_module pytest-cov} +BuildRequires: %{python_module numpy >= 1.19} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module scipy >= 1.8} -BuildRequires: %{python_module uncertainties >= 3.1.4} +BuildRequires: %{python_module scipy >= 1.6} +BuildRequires: %{python_module uncertainties >= 3.2.2} # /SECTION %python_subpackages @@ -75,6 +74,7 @@ questionable. %prep %autosetup -p1 -n lmfit-%{version} sed -i -e '/^#!\//, 1d' lmfit/jsonutils.py +sed -i 's/--cov=lmfit --cov-report html//' pyproject.toml %build %pyproject_wheel diff --git a/support-numpy-2.patch b/support-numpy-2.patch deleted file mode 100644 index 3631a3a..0000000 --- a/support-numpy-2.patch +++ /dev/null @@ -1,343 +0,0 @@ -From eee021f650833f0a2667315b2ab5d8351f0b1a1f Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sat, 29 Jun 2024 10:27:59 -0500 -Subject: [PATCH 1/6] clean un-serializable symbols with NumPy2 that should be - removed from asteval - ---- - lmfit/parameter.py | 31 ++++++++++++++++++++++++------- - pyproject.toml | 3 ++- - 2 files changed, 26 insertions(+), 8 deletions(-) - -diff --git a/lmfit/parameter.py b/lmfit/parameter.py -index ca9ccc72..b68584c4 100644 ---- a/lmfit/parameter.py -+++ b/lmfit/parameter.py -@@ -5,6 +5,8 @@ - - from asteval import Interpreter, get_ast_names, valid_symbol_name - from numpy import arcsin, array, cos, inf, isclose, sin, sqrt -+from numpy import version as npvers -+from packaging.version import Version - from scipy.linalg import LinAlgError - import scipy.special - from uncertainties import correlated_values, ufloat -@@ -21,6 +23,18 @@ - SCIPY_FUNCTIONS[fnc_name] = getattr(scipy.special, fnc_name) - - -+def clean_np2_symbols(user_syms): -+ """clean symbols from self._asteval.user_defined_symbols() -+ that have been deprecated in numpy 2.0 -+ This should be a short term fix, as these are removed from asteval. -+ """ -+ if Version(npvers.version) > Version('1.9'): -+ for sym in ('ogrid', 'mgrid', 'c_', 'r_', 's_', 'index_exp'): -+ if sym in user_syms: -+ user_syms.remove(sym) -+ return user_syms -+ -+ - def check_ast_errors(expr_eval): - """Check for errors derived from asteval.""" - if len(expr_eval.error) > 0: -@@ -95,7 +109,8 @@ def update(self, other): - if not isinstance(other, Parameters): - raise ValueError(f"'{other}' is not a Parameters object") - self.add_many(*other.values()) -- for sym in other._asteval.user_defined_symbols(): -+ usersyms = clean_np2_symbols(other._asteval.user_defined_symbols()) -+ for sym in usersyms: - self._asteval.symtable[sym] = other._asteval.symtable[sym] - return self - -@@ -114,7 +129,8 @@ def __deepcopy__(self, memo): - - # find the symbols that were added by users, not during construction - unique_symbols = {} -- for key in self._asteval.user_defined_symbols(): -+ usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) -+ for key in usersyms: - try: - val = deepcopy(self._asteval.symtable[key]) - unique_symbols[key] = val -@@ -161,7 +177,8 @@ def __add__(self, other): - raise ValueError(f"'{other}' is not a Parameters object") - out = deepcopy(self) - out.add_many(*other.values()) -- for sym in other._asteval.user_defined_symbols(): -+ usersyms = clean_np2_symbols(other._asteval.user_defined_symbols()) -+ for sym in usersyms: - if sym not in out._asteval.symtable: - out._asteval.symtable[sym] = other._asteval.symtable[sym] - return out -@@ -181,9 +198,9 @@ def __reduce__(self): - params = [self[k] for k in self] - - # find the symbols from _asteval.symtable, that need to be remembered. -- sym_unique = self._asteval.user_defined_symbols() -+ usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) - unique_symbols = {key: deepcopy(self._asteval.symtable[key]) -- for key in sym_unique} -+ for key in usersyms} - - return self.__class__, (), {'unique_symbols': unique_symbols, - 'params': params} -@@ -567,9 +584,9 @@ def dumps(self, **kws): - - """ - params = [p.__getstate__() for p in self.values()] -- sym_unique = self._asteval.user_defined_symbols() -+ usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) - unique_symbols = {key: encode4js(deepcopy(self._asteval.symtable[key])) -- for key in sym_unique} -+ for key in usersyms} - return json.dumps({'unique_symbols': unique_symbols, - 'params': params}, **kws) - -diff --git a/pyproject.toml b/pyproject.toml -index 623c6a2d..511e9a97 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -10,7 +10,8 @@ dependencies = [ - "numpy>=1.19", - "scipy>=1.6", - "uncertainties>=3.1.4", -- "dill>=0.3.4" -+ "dill>=0.3.4", -+ "packaging", - ] - requires-python = ">= 3.8" - authors = [ - -From 2a195ac6a375b34245f330f8e60824f564e086bd Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sat, 29 Jun 2024 10:36:34 -0500 -Subject: [PATCH 2/6] fix numpy2 deprecation - ---- - tests/test_model.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/test_model.py b/tests/test_model.py -index 396ea0b1..24dfbfcd 100644 ---- a/tests/test_model.py -+++ b/tests/test_model.py -@@ -900,7 +900,7 @@ def test_independent_var_parsing(self): - yatan = stepmod2.eval(pars, x=x) - - assert (yatan-yline).std() > 0.1 -- assert (yatan-yline).ptp() > 1.0 -+ assert np.ptp(yatan-yline) > 1.0 - - voigtmod = Model(voigt) - assert 'x' in voigtmod.independent_vars - -From 48d3b5f9338312078186543044fb5d0109cec429 Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sat, 29 Jun 2024 10:38:23 -0500 -Subject: [PATCH 3/6] specify numpy>=2 for latest tests - ---- - azure-pipelines.yml | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/azure-pipelines.yml b/azure-pipelines.yml -index 53c7c7f1..54f70890 100644 ---- a/azure-pipelines.yml -+++ b/azure-pipelines.yml -@@ -139,7 +139,7 @@ stages: - swig libmpc-dev - displayName: 'Install dependencies' - - script: | -- python -m pip install --upgrade build pip setuptools wheel -+ python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build -@@ -183,7 +183,7 @@ stages: - versionSpec: '$(python.version)' - displayName: 'Use Python $(python.version)' - - script: | -- python -m pip install --upgrade build pip setuptools wheel -+ python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build -@@ -218,7 +218,7 @@ stages: - versionSpec: '$(python.version)' - displayName: 'Use Python $(python.version)' - - script: | -- python -m pip install --upgrade build pip setuptools wheel -+ python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build - -From 2a40772b20e2c1c48807c6b50d36217d72472d28 Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sat, 29 Jun 2024 10:55:24 -0500 -Subject: [PATCH 4/6] numpy2 not available for Python3.8 - ---- - azure-pipelines.yml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/azure-pipelines.yml b/azure-pipelines.yml -index 54f70890..98f8674b 100644 ---- a/azure-pipelines.yml -+++ b/azure-pipelines.yml -@@ -107,13 +107,13 @@ stages: - - script: | - ./codecov -v -f "coverage.xml" - displayName: 'Upload to codecov.io' -- - - stage: tests_latest_dependencies - dependsOn: check_codestyle - condition: succeededOrFailed() - jobs: - - job: - pool: -+ - vmImage: 'ubuntu-latest' - strategy: - matrix: -@@ -139,7 +139,7 @@ stages: - swig libmpc-dev - displayName: 'Install dependencies' - - script: | -- python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" -+ python -m pip install --upgrade build pip setuptools wheel numpy - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build - -From 4a986540dec49cc714faa726a060c5d9dda66feb Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sun, 30 Jun 2024 13:46:26 -0500 -Subject: [PATCH 5/6] remove packaging, clarify when clean_np2_symbols() can be - removed - ---- - lmfit/parameter.py | 10 +++++++--- - pyproject.toml | 1 - - 2 files changed, 7 insertions(+), 4 deletions(-) - -diff --git a/lmfit/parameter.py b/lmfit/parameter.py -index b68584c4..56e37f94 100644 ---- a/lmfit/parameter.py -+++ b/lmfit/parameter.py -@@ -6,7 +6,6 @@ - from asteval import Interpreter, get_ast_names, valid_symbol_name - from numpy import arcsin, array, cos, inf, isclose, sin, sqrt - from numpy import version as npvers --from packaging.version import Version - from scipy.linalg import LinAlgError - import scipy.special - from uncertainties import correlated_values, ufloat -@@ -26,9 +25,9 @@ - def clean_np2_symbols(user_syms): - """clean symbols from self._asteval.user_defined_symbols() - that have been deprecated in numpy 2.0 -- This should be a short term fix, as these are removed from asteval. -+ This function can be removed when asteval 0.9.33 is no longer supported - """ -- if Version(npvers.version) > Version('1.9'): -+ if npvers.version.startswith('2'): - for sym in ('ogrid', 'mgrid', 'c_', 'r_', 's_', 'index_exp'): - if sym in user_syms: - user_syms.remove(sym) -@@ -109,6 +108,7 @@ def update(self, other): - if not isinstance(other, Parameters): - raise ValueError(f"'{other}' is not a Parameters object") - self.add_many(*other.values()) -+ # FIXME: clear_np2_symbols() can be removed when asteval 0.9.33 is not supported - usersyms = clean_np2_symbols(other._asteval.user_defined_symbols()) - for sym in usersyms: - self._asteval.symtable[sym] = other._asteval.symtable[sym] -@@ -129,6 +129,7 @@ def __deepcopy__(self, memo): - - # find the symbols that were added by users, not during construction - unique_symbols = {} -+ # FIXME: clear_np2_symbols() can be removed when asteval 0.9.33 is not supported - usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) - for key in usersyms: - try: -@@ -177,6 +178,7 @@ def __add__(self, other): - raise ValueError(f"'{other}' is not a Parameters object") - out = deepcopy(self) - out.add_many(*other.values()) -+ # FIXME: clear_np2_symbols() can be removed when asteval 0.9.33 is not supported - usersyms = clean_np2_symbols(other._asteval.user_defined_symbols()) - for sym in usersyms: - if sym not in out._asteval.symtable: -@@ -198,6 +200,7 @@ def __reduce__(self): - params = [self[k] for k in self] - - # find the symbols from _asteval.symtable, that need to be remembered. -+ # FIXME: clear_np2_symbols() can be removed when asteval 0.9.33 is not supported - usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) - unique_symbols = {key: deepcopy(self._asteval.symtable[key]) - for key in usersyms} -@@ -584,6 +587,7 @@ def dumps(self, **kws): - - """ - params = [p.__getstate__() for p in self.values()] -+ # FIXME: clear_np2_symbols() can be removed when asteval 0.9.33 is not supported - usersyms = clean_np2_symbols(self._asteval.user_defined_symbols()) - unique_symbols = {key: encode4js(deepcopy(self._asteval.symtable[key])) - for key in usersyms} -diff --git a/pyproject.toml b/pyproject.toml -index 511e9a97..a40dad96 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -11,7 +11,6 @@ dependencies = [ - "scipy>=1.6", - "uncertainties>=3.1.4", - "dill>=0.3.4", -- "packaging", - ] - requires-python = ">= 3.8" - authors = [ - -From 8c49b0cebef3bc1e05f6c8ccf3278f1049d8cae2 Mon Sep 17 00:00:00 2001 -From: Matthew Newville -Date: Sun, 30 Jun 2024 13:47:14 -0500 -Subject: [PATCH 6/6] revert azure pipeline to not specify numpy version for - most tests - ---- - azure-pipelines.yml | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/azure-pipelines.yml b/azure-pipelines.yml -index 98f8674b..03a3b132 100644 ---- a/azure-pipelines.yml -+++ b/azure-pipelines.yml -@@ -139,7 +139,7 @@ stages: - swig libmpc-dev - displayName: 'Install dependencies' - - script: | -- python -m pip install --upgrade build pip setuptools wheel numpy -+ python -m pip install --upgrade build pip setuptools wheel - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build -@@ -183,7 +183,7 @@ stages: - versionSpec: '$(python.version)' - displayName: 'Use Python $(python.version)' - - script: | -- python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" -+ python -m pip install --upgrade build pip setuptools wheel - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build -@@ -218,7 +218,7 @@ stages: - versionSpec: '$(python.version)' - displayName: 'Use Python $(python.version)' - - script: | -- python -m pip install --upgrade build pip setuptools wheel "numpy>=2.0" -+ python -m pip install --upgrade build pip setuptools wheel - displayName: 'Install latest available version of Python dependencies' - - script: | - python -m build