From e41f869d18b6cf4066a7a0945978326a45075aae Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Thu, 9 Mar 2023 13:38:51 +0000 Subject: [PATCH 1/2] docs: version guard added to combined fit example. --- examples/08_combined_fit_example.ipynb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/08_combined_fit_example.ipynb b/examples/08_combined_fit_example.ipynb index a492c674..43ec7097 100644 --- a/examples/08_combined_fit_example.ipynb +++ b/examples/08_combined_fit_example.ipynb @@ -9,7 +9,10 @@ "source": [ "import pyerrors as pe\n", "import numpy as np\n", - "import matplotlib.pyplot as plt" + "import matplotlib.pyplot as plt\n", + "from packaging import version\n", + "if version.parse(pe.__version__) < version.parse(\"2.6.0\"):\n", + " raise Exception(f\"v2.6.0 or newer is required for this example, you are using {pe.__version__}\")" ] }, { From 99a103370378c854b81b5d6bf66d0fe4d65cae29 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Thu, 9 Mar 2023 14:25:37 +0000 Subject: [PATCH 2/2] refactor: refactored construction of prior Obs in least_squares. --- pyerrors/fits.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/pyerrors/fits.py b/pyerrors/fits.py index d9f963d9..20a5ee32 100644 --- a/pyerrors/fits.py +++ b/pyerrors/fits.py @@ -240,13 +240,7 @@ def least_squares(x, y, func, priors=None, silent=False, **kwargs): loc_priors = [] for i_n, i_prior in enumerate(priors): - if isinstance(i_prior, Obs): - loc_priors.append(i_prior) - elif isinstance(i_prior, str): - loc_val, loc_dval = _extract_val_and_dval(i_prior) - loc_priors.append(cov_Obs(loc_val, loc_dval ** 2, '#prior' + str(i_n) + f"_{np.random.randint(2147483647):010d}")) - else: - raise TypeError("Prior entries need to be 'Obs' or 'str'.") + loc_priors.append(_construct_prior_obs(i_prior, i_n)) prior_mask = np.arange(len(priors)) output.priors = loc_priors @@ -260,13 +254,8 @@ def least_squares(x, y, func, priors=None, silent=False, **kwargs): prior_mask.append(pos) else: raise TypeError("Prior position needs to be an integer.") - if isinstance(prior, Obs): - loc_priors.append(prior) - elif isinstance(prior, str): - loc_val, loc_dval = _extract_val_and_dval(prior) - loc_priors.append(cov_Obs(loc_val, loc_dval ** 2, '#prior' + str(pos) + f"_{np.random.randint(2147483647):010d}")) - else: - raise TypeError("Prior entries need to be 'Obs' or 'str'.") + loc_priors.append(_construct_prior_obs(prior, pos)) + output.priors[pos] = loc_priors[-1] if max(prior_mask) >= n_parms: raise ValueError("Prior position out of range.") @@ -823,3 +812,13 @@ def _extract_val_and_dval(string): else: factor = 1 return float(split_string[0]), float(split_string[1][:-1]) * factor + + +def _construct_prior_obs(i_prior, i_n): + if isinstance(i_prior, Obs): + return i_prior + elif isinstance(i_prior, str): + loc_val, loc_dval = _extract_val_and_dval(i_prior) + return cov_Obs(loc_val, loc_dval ** 2, '#prior' + str(i_n) + f"_{np.random.randint(2147483647):010d}") + else: + raise TypeError("Prior entries need to be 'Obs' or 'str'.")