Accepting request 1198943 from devel:languages:python:numeric
OBS-URL: https://build.opensuse.org/request/show/1198943 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-lmfit?expand=0&rev=7
This commit is contained in:
commit
a98d45c09e
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:bc386244adbd10ef1a2a2c4f9d17b3def905552c0a64aef854f0ad46cc309cc5
|
|
||||||
size 629917
|
|
3
lmfit-1.3.2.tar.gz
Normal file
3
lmfit-1.3.2.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:31beeae1f027c1b8c14dcd7f2e8488a80b75fb389e77fca677549bdc2fe597bb
|
||||||
|
size 623945
|
357
lmfit-pr965-asteval.patch
Normal file
357
lmfit-pr965-asteval.patch
Normal file
@ -0,0 +1,357 @@
|
|||||||
|
From e62b1784e7516f543402c013cfd532d6003aa859 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Matthew Newville <newville@cars.uchicago.edu>
|
||||||
|
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 <newville@cars.uchicago.edu>
|
||||||
|
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 <newville@cars.uchicago.edu>
|
||||||
|
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 <reneeotten@users.noreply.github.com>
|
||||||
|
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 <reneeotten@users.noreply.github.com>
|
||||||
|
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 <reneeotten@users.noreply.github.com>
|
||||||
|
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 <reneeotten@users.noreply.github.com>
|
||||||
|
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 <reneeotten@users.noreply.github.com>
|
||||||
|
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 @@
|
||||||
|
-# <examples/doc_uvars_params.py>
|
||||||
|
+# <examples/doc_parameters_uvars.py>
|
||||||
|
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))
|
||||||
|
-# <end examples/doc_uvars_params.py>
|
||||||
|
+# <end examples/doc_parameters_uvars.py>
|
||||||
|
|
||||||
|
From ff436c270d07433a7ae404fe76bc9c627b4edc3f Mon Sep 17 00:00:00 2001
|
||||||
|
From: reneeotten <reneeotten@users.noreply.github.com>
|
||||||
|
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",
|
@ -1,3 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 5 09:41:05 UTC 2024 - Ben Greiner <code@bnavigator.de>
|
||||||
|
|
||||||
|
- 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 <steven.kowalik@suse.com>
|
Fri Jul 5 03:01:53 UTC 2024 - Steve Kowalik <steven.kowalik@suse.com>
|
||||||
|
|
||||||
|
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: python-lmfit
|
Name: python-lmfit
|
||||||
Version: 1.3.1
|
Version: 1.3.2
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Least-Squares Minimization with Bounds and Constraints
|
Summary: Least-Squares Minimization with Bounds and Constraints
|
||||||
License: BSD-3-Clause AND MIT
|
License: BSD-3-Clause AND MIT
|
||||||
URL: https://lmfit.github.io/lmfit-py/
|
URL: https://lmfit.github.io/lmfit-py/
|
||||||
Source: https://files.pythonhosted.org/packages/source/l/lmfit/lmfit-%{version}.tar.gz
|
Source: https://files.pythonhosted.org/packages/source/l/lmfit/lmfit-%{version}.tar.gz
|
||||||
# PATCH-FIX-UPSTREAM gh#lmfit/lmfit-py#959
|
# PATCH-FIX-UPSTREAM lmfit-pr965-asteval.patch gh#lmfit/lmfit-py#965
|
||||||
Patch0: support-numpy-2.patch
|
Patch0: https://github.com/lmfit/lmfit-py/pull/965.patch#/lmfit-pr965-asteval.patch
|
||||||
BuildRequires: %{python_module base >= 3.8}
|
BuildRequires: %{python_module base >= 3.8}
|
||||||
BuildRequires: %{python_module pip}
|
BuildRequires: %{python_module pip}
|
||||||
BuildRequires: %{python_module setuptools_scm}
|
BuildRequires: %{python_module setuptools_scm}
|
||||||
@ -32,24 +32,23 @@ BuildRequires: %{python_module setuptools}
|
|||||||
BuildRequires: %{python_module wheel}
|
BuildRequires: %{python_module wheel}
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires: python-asteval >= 0.9.28
|
Requires: python-asteval >= 1
|
||||||
Requires: python-dill >= 0.3.4
|
Requires: python-dill >= 0.3.4
|
||||||
Requires: python-numpy >= 1.23
|
Requires: python-numpy >= 1.19
|
||||||
Requires: python-scipy >= 1.8
|
Requires: python-scipy >= 1.6
|
||||||
Requires: python-uncertainties >= 3.1.4
|
Requires: python-uncertainties >= 3.2.2
|
||||||
Recommends: python-emcee
|
Recommends: python-emcee
|
||||||
Recommends: python-matplotlib
|
Recommends: python-matplotlib
|
||||||
Recommends: python-pandas
|
Recommends: python-pandas
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
# SECTION test requirements
|
# 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 dill >= 0.3.4}
|
||||||
BuildRequires: %{python_module flaky}
|
BuildRequires: %{python_module flaky}
|
||||||
BuildRequires: %{python_module numpy >= 1.23}
|
BuildRequires: %{python_module numpy >= 1.19}
|
||||||
BuildRequires: %{python_module pytest-cov}
|
|
||||||
BuildRequires: %{python_module pytest}
|
BuildRequires: %{python_module pytest}
|
||||||
BuildRequires: %{python_module scipy >= 1.8}
|
BuildRequires: %{python_module scipy >= 1.6}
|
||||||
BuildRequires: %{python_module uncertainties >= 3.1.4}
|
BuildRequires: %{python_module uncertainties >= 3.2.2}
|
||||||
# /SECTION
|
# /SECTION
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
|
|
||||||
@ -75,6 +74,7 @@ questionable.
|
|||||||
%prep
|
%prep
|
||||||
%autosetup -p1 -n lmfit-%{version}
|
%autosetup -p1 -n lmfit-%{version}
|
||||||
sed -i -e '/^#!\//, 1d' lmfit/jsonutils.py
|
sed -i -e '/^#!\//, 1d' lmfit/jsonutils.py
|
||||||
|
sed -i 's/--cov=lmfit --cov-report html//' pyproject.toml
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%pyproject_wheel
|
%pyproject_wheel
|
||||||
|
@ -1,343 +0,0 @@
|
|||||||
From eee021f650833f0a2667315b2ab5d8351f0b1a1f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthew Newville <newville@cars.uchicago.edu>
|
|
||||||
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 <newville@cars.uchicago.edu>
|
|
||||||
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 <newville@cars.uchicago.edu>
|
|
||||||
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 <newville@cars.uchicago.edu>
|
|
||||||
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 <newville@cars.uchicago.edu>
|
|
||||||
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 <newville@cars.uchicago.edu>
|
|
||||||
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
|
|
Loading…
Reference in New Issue
Block a user