From 31f696078cd57fe0a2dba5c2fe02c6917041700d Mon Sep 17 00:00:00 2001 From: Timothy Poon Date: Tue, 6 Jul 2021 16:03:52 +0100 Subject: [PATCH 1/3] Used parameter attribute to accommodate polynomial with different orders --- hyperspy/_components/polynomial.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hyperspy/_components/polynomial.py b/hyperspy/_components/polynomial.py index b0d4291cbf..3aac6c9b44 100644 --- a/hyperspy/_components/polynomial.py +++ b/hyperspy/_components/polynomial.py @@ -33,7 +33,7 @@ class Polynomial(Expression): """n-order polynomial component. Polynomial component consisting of order + 1 parameters. - The parameters are named "a" followed by the corresponding order, + The parameters are named "a" followed by the corresponding order, i.e. .. math:: @@ -60,10 +60,10 @@ def __init__(self, order=2, module="numexpr", **kwargs): raise ValueError("Polynomial of order 0 is not supported.") coeff_list = ['{}'.format(o).zfill(len(list(str(order)))) for o in range(order, -1, -1)] - expr = "+".join(["a{}*x**{}".format(c, o) for c, o in + expr = "+".join(["a{}*x**{}".format(c, o) for c, o in zip(coeff_list, range(order, -1, -1))]) name = "{} order Polynomial".format(ordinal(order)) - super().__init__(expression=expr, name=name, module=module, + super().__init__(expression=expr, name=name, module=module, autodoc=False, **kwargs) self._id_name = "eab91275-88db-4855-917a-cdcbe7209592" @@ -107,7 +107,7 @@ def estimate_parameters(self, signal, x1, x2, only_current=False): para.value = estim return True else: - if self.a0.map is None: + if self.parameters[0].map is None: self._create_arrays() nav_shape = signal.axes_manager._navigation_shape_in_array @@ -142,7 +142,7 @@ def convert_to_polynomial(poly_dict): """ _logger.info("Converting the polynomial to the new definition") poly_order = poly_dict['order'] - coeff_list = ['{}'.format(o).zfill(len(list(str(poly_dict['order'])))) + coeff_list = ['{}'.format(o).zfill(len(list(str(poly_dict['order'])))) for o in range(poly_dict['order'], -1, -1)] poly2_dict = dict(poly_dict) coefficient_dict = poly_dict['parameters'][0] From 322fc97c97d11aa86a4f0f5e2a9cc2f69f9e02df Mon Sep 17 00:00:00 2001 From: Timothy Poon Date: Tue, 6 Jul 2021 16:29:48 +0100 Subject: [PATCH 2/3] Modified relevant test for higher order polynomial component --- hyperspy/tests/component/test_components.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hyperspy/tests/component/test_components.py b/hyperspy/tests/component/test_components.py index 446b722dfc..4d332e8e8e 100644 --- a/hyperspy/tests/component/test_components.py +++ b/hyperspy/tests/component/test_components.py @@ -308,16 +308,17 @@ def test_fitting(self): m_2d.multifit(iterpath='serpentine', grad='analytical') np.testing.assert_allclose(m_2d.red_chisq.data.sum(), 0.0, atol=1E-7) + @pytest.mark.parametrize(("order"), (2, 12)) @pytest.mark.parametrize(("only_current", "binned"), TRUE_FALSE_2_TUPLE) - def test_estimate_parameters(self, only_current, binned): + def test_estimate_parameters(self, only_current, binned, order): self.m.signal.metadata.Signal.binned = binned s = self.m.as_signal() s.metadata.Signal.binned = binned - p = hs.model.components1D.Polynomial(order=2, legacy=False) + p = hs.model.components1D.Polynomial(order=order, legacy=False) p.estimate_parameters(s, None, None, only_current=only_current) - np.testing.assert_allclose(p.a2.value, 0.5) - np.testing.assert_allclose(p.a1.value, 2) - np.testing.assert_allclose(p.a0.value, 3) + np.testing.assert_allclose(p.parameters[2].value, 0.5) + np.testing.assert_allclose(p.parameters[1].value, 2) + np.testing.assert_allclose(p.parameters[0].value, 3) def test_zero_order(self): m = self.m_offset From d85c486cd8a67c02fccda18adceb8a9665bbb612 Mon Sep 17 00:00:00 2001 From: Timothy Poon Date: Tue, 6 Jul 2021 21:57:28 +0100 Subject: [PATCH 3/3] Added changelog for #2790 --- upcoming_changes/2790.bugfix.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 upcoming_changes/2790.bugfix.rst diff --git a/upcoming_changes/2790.bugfix.rst b/upcoming_changes/2790.bugfix.rst new file mode 100644 index 0000000000..3d72b9cb5a --- /dev/null +++ b/upcoming_changes/2790.bugfix.rst @@ -0,0 +1,2 @@ +Method `estimate_parameters` in `Polynomial` component now supports order +greater than 10.