From b61a87788aa3e4ec601415b5c9e9dc8042fcc665 Mon Sep 17 00:00:00 2001 From: Simon Billinge Date: Tue, 30 Jul 2024 20:13:21 -0400 Subject: [PATCH 1/3] clean out inits --- diffpy/srmise/baselines/__init__.py | 7 ------- diffpy/srmise/modelevaluators/__init__.py | 3 --- diffpy/srmise/peaks/__init__.py | 1 - 3 files changed, 11 deletions(-) diff --git a/diffpy/srmise/baselines/__init__.py b/diffpy/srmise/baselines/__init__.py index 0515732..3a233ae 100644 --- a/diffpy/srmise/baselines/__init__.py +++ b/diffpy/srmise/baselines/__init__.py @@ -12,10 +12,3 @@ # ############################################################################## -__all__ = ["base", "arbitrary", "fromsequence", "nanospherical", "polynomial"] - -from arbitrary import Arbitrary -from base import Baseline -from fromsequence import FromSequence -from nanospherical import NanoSpherical -from polynomial import Polynomial diff --git a/diffpy/srmise/modelevaluators/__init__.py b/diffpy/srmise/modelevaluators/__init__.py index 1d80760..b3133d1 100644 --- a/diffpy/srmise/modelevaluators/__init__.py +++ b/diffpy/srmise/modelevaluators/__init__.py @@ -12,7 +12,4 @@ # ############################################################################## -__all__ = ["base", "aic", "aicc"] -from aic import AIC -from aicc import AICc diff --git a/diffpy/srmise/peaks/__init__.py b/diffpy/srmise/peaks/__init__.py index ea3cdfc..3a233ae 100644 --- a/diffpy/srmise/peaks/__init__.py +++ b/diffpy/srmise/peaks/__init__.py @@ -12,4 +12,3 @@ # ############################################################################## -__all__ = ["base", "gaussian", "gaussianoverr", "terminationripples"] From ab27182645be50c8a1f12389348f49c9719df876 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 00:15:01 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit hooks --- diffpy/srmise/baselines/__init__.py | 1 - diffpy/srmise/modelevaluators/__init__.py | 2 -- diffpy/srmise/peaks/__init__.py | 1 - 3 files changed, 4 deletions(-) diff --git a/diffpy/srmise/baselines/__init__.py b/diffpy/srmise/baselines/__init__.py index 3a233ae..5540acb 100644 --- a/diffpy/srmise/baselines/__init__.py +++ b/diffpy/srmise/baselines/__init__.py @@ -11,4 +11,3 @@ # See LICENSE.txt for license information. # ############################################################################## - diff --git a/diffpy/srmise/modelevaluators/__init__.py b/diffpy/srmise/modelevaluators/__init__.py index b3133d1..5540acb 100644 --- a/diffpy/srmise/modelevaluators/__init__.py +++ b/diffpy/srmise/modelevaluators/__init__.py @@ -11,5 +11,3 @@ # See LICENSE.txt for license information. # ############################################################################## - - diff --git a/diffpy/srmise/peaks/__init__.py b/diffpy/srmise/peaks/__init__.py index 3a233ae..5540acb 100644 --- a/diffpy/srmise/peaks/__init__.py +++ b/diffpy/srmise/peaks/__init__.py @@ -11,4 +11,3 @@ # See LICENSE.txt for license information. # ############################################################################## - From cf2e82f0b9281c70a4e91bb1d69d5487d894e54f Mon Sep 17 00:00:00 2001 From: Simon Billinge Date: Tue, 30 Jul 2024 20:33:55 -0400 Subject: [PATCH 3/3] dataclusters.py, modelevaluators/aicc and modelparts.py --- diffpy/srmise/dataclusters.py | 16 ++++++++-------- diffpy/srmise/modelevaluators/aicc.py | 13 +++++++------ diffpy/srmise/modelparts.py | 22 ++++++++++------------ 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/diffpy/srmise/dataclusters.py b/diffpy/srmise/dataclusters.py index d87a6b9..1eabb26 100644 --- a/diffpy/srmise/dataclusters.py +++ b/diffpy/srmise/dataclusters.py @@ -365,11 +365,11 @@ def cut(self, idx): def cluster_boundaries(self): """Return sequence with (x,y) of all cluster boundaries.""" boundaries = [] - for l in self.clusters: - xlo = np.mean(self.x[l[0] - 1 : l[0] + 1]) - ylo = np.mean(self.y[l[0] - 1 : l[0] + 1]) - xhi = np.mean(self.x[l[1] : l[1] + 2]) - yhi = np.mean(self.y[l[1] : l[1] + 2]) + for cluster in self.clusters: + xlo = np.mean(self.x[cluster[0] - 1 : cluster[0] + 1]) + ylo = np.mean(self.y[cluster[0] - 1 : cluster[0] + 1]) + xhi = np.mean(self.x[cluster[1] : cluster[1] + 2]) + yhi = np.mean(self.y[cluster[1] : cluster[1] + 2]) boundaries.append((xlo, ylo)) boundaries.append((xhi, yhi)) return np.unique(boundaries) @@ -416,9 +416,9 @@ def animate(self): all_lines[i].set_ydata([0, height]) ax.draw_artist(all_lines[i]) else: - l = plt.axvline(b[0], 0, height, color="k", animated=True) - ax.draw_artist(l) - all_lines.append(l) + line = plt.axvline(b[0], 0, height, color="k", animated=True) + ax.draw_artist(line) + all_lines.append(line) canvas.blit(ax.bbox) self.clusters = clusters diff --git a/diffpy/srmise/modelevaluators/aicc.py b/diffpy/srmise/modelevaluators/aicc.py index be1052f..e1b13f2 100644 --- a/diffpy/srmise/modelevaluators/aicc.py +++ b/diffpy/srmise/modelevaluators/aicc.py @@ -16,7 +16,6 @@ import numpy as np -import diffpy.srmise.srmiselog from diffpy.srmise.modelevaluators.base import ModelEvaluator from diffpy.srmise.srmiseerrors import SrMiseModelEvaluatorError @@ -72,7 +71,7 @@ def evaluate(self, fit, count_fixed=False, kshift=0): logger.warn("AICc.evaluate(): too few data to evaluate quality reliably.") n = self.minpoints(k) - if self.chisq == None: + if self.chisq is None: self.chisq = self.chi_squared(fit.value(), fit.y_cluster, fit.error_cluster) self.stat = self.chisq + self.parpenalty(k, n) @@ -96,10 +95,12 @@ def parpenalty(self, k, n): return (2 * k + float(2 * k * (k + 1)) / (n - k - 1)) * fudgefactor def growth_justified(self, fit, k_prime): - """Returns whether adding k_prime parameters to the given model (ModelCluster) is justified given the current quality of the fit. - The assumption is that adding k_prime parameters will result in "effectively 0" chiSquared cost, and so adding it is justified - if the cost of adding these parameters is less than the current chiSquared cost. The validity of this assumption (which - depends on an unknown chiSquared value) and the impact of the errors used should be examined more thoroughly in the future. + """Is adding k_prime parameters to ModelCluster justified given the current quality of the fit. + + The assumption is that adding k_prime parameters will result in "effectively 0" chiSquared cost, + and so adding it is justified if the cost of adding these parameters is less than the current + chiSquared cost. The validity of this assumption (which depends on an unknown chiSquared value) + and the impact of the errors used should be examined more thoroughly in the future. """ if self.chisq is None: diff --git a/diffpy/srmise/modelparts.py b/diffpy/srmise/modelparts.py index 8dd0c40..9bd3f14 100644 --- a/diffpy/srmise/modelparts.py +++ b/diffpy/srmise/modelparts.py @@ -21,20 +21,18 @@ import logging -import numpy as np -from scipy.optimize import leastsq - -from diffpy.srmise import srmiselog -from diffpy.srmise.srmiseerrors import * - -logger = logging.getLogger("diffpy.srmise") - import matplotlib.pyplot as plt +import numpy as np # Output of scipy.optimize.leastsq for a single parameter changed in scipy 0.8.0 # Before it returned a scalar, later it returned an array of length 1. import pkg_resources as pr +from scipy.optimize import leastsq +from diffpy.srmise import srmiselog +from diffpy.srmise.srmiseerrors import SrMiseFitError, SrMiseStaticOwnerError, SrMiseUndefinedCovarianceError + +logger = logging.getLogger("diffpy.srmise") __spv__ = pr.get_distribution("scipy").version __oldleastsqbehavior__ = pr.parse_version(__spv__) < pr.parse_version("0.8.0") @@ -98,7 +96,7 @@ def fit( # raise SrMiseFitError(emsg) return - if range == None: + if range is None: range = slice(None) args = (r, y, y_error, range) @@ -203,7 +201,7 @@ def fit( cov.setcovariance(self, pcov * np.sum(fvec**2) / dof) try: cov.transform(in_format="internal", out_format=cov_format) - except SrMiseUndefinedCovarianceError as e: + except SrMiseUndefinedCovarianceError: logger.warn("Covariance not defined. Fit may not have converged.") return @@ -332,7 +330,7 @@ def covariance(self, format="internal", **kwds): for k, v in kwds.items(): try: - idx = int(k[1:]) + int(k[1:]) except ValueError: emsg = "Invalid format keyword '%s'. They must be specified as 'f0', 'f1', etc." % k raise ValueError(emsg) @@ -559,7 +557,7 @@ def npars(self, count_fixed=True): if count_fixed: return self._owner.npars else: - return (self.free == True).sum() + return (self.free is True).sum() def __str__(self): """Return string representation of ModelPart parameters."""