Skip to content

Commit 2a30b00

Browse files
fix: fix load single peak in py3 support (#178)
* fix: fix load single peak in py3 support * [pre-commit.ci] auto fixes from pre-commit hooks * fix:check what else we edited * fix: fix some unnecessary conversion to int * chore: revert CLI change * [pre-commit.ci] auto fixes from pre-commit hooks * chore: revert try except block * some proper fix to the code * [pre-commit.ci] auto fixes from pre-commit hooks * fix: fix fetch qmax * fix: correctly fix the single peak plot issue with correct plot * fix: fix namespace when we have --no-extract option --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent fb49c4d commit 2a30b00

File tree

12 files changed

+72
-30
lines changed

12 files changed

+72
-30
lines changed

news/fix-single-peak.rst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
**Added:**
2+
3+
* <news item>
4+
5+
**Changed:**
6+
7+
* <news item>
8+
9+
**Deprecated:**
10+
11+
* <news item>
12+
13+
**Removed:**
14+
15+
* <news item>
16+
17+
**Fixed:**
18+
19+
* Fixed extracting single peak with `py2` legacy cleanup
20+
21+
**Security:**
22+
23+
* <news item>

src/diffpy/srmise/applications/extract.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,21 @@
1818
import numpy as np
1919

2020

21+
def _baseline_namespace():
22+
"""Return the baseline classes supported by the CLI."""
23+
from diffpy.srmise.baselines.arbitrary import Arbitrary
24+
from diffpy.srmise.baselines.fromsequence import FromSequence
25+
from diffpy.srmise.baselines.nanospherical import NanoSpherical
26+
from diffpy.srmise.baselines.polynomial import Polynomial
27+
28+
return {
29+
"Arbitrary": Arbitrary,
30+
"FromSequence": FromSequence,
31+
"NanoSpherical": NanoSpherical,
32+
"Polynomial": Polynomial,
33+
}
34+
35+
2136
def main():
2237
"""Default SrMise entry-point."""
2338

@@ -483,10 +498,13 @@ def main():
483498

484499
bl = NanoSpherical()
485500
options.baseline = parsepars(bl, options.bspherical)
486-
501+
elif options.baseline is not None:
487502
try:
488-
options.baseline = eval("baselines." + options.baseline)
489-
503+
options.baseline = eval(
504+
options.baseline,
505+
{"__builtins__": {}},
506+
_baseline_namespace(),
507+
)
490508
except Exception as err:
491509
print(err)
492510
print("Could not create baseline '%s'. Exiting." % options.baseline)

src/diffpy/srmise/dataclusters.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def __next__(self):
221221
self.lastcluster_idx = nearest_cluster[0] + 1
222222
self.clusters = np.insert(
223223
self.clusters,
224-
int(self.lastcluster_idx),
224+
self.lastcluster_idx,
225225
[test_idx, test_idx],
226226
0,
227227
)
@@ -289,7 +289,7 @@ def find_nearest_cluster(self, idx):
289289
return None
290290

291291
flat_idx = clusters_flat.searchsorted(idx)
292-
near_idx = flat_idx / 2
292+
near_idx = flat_idx // 2
293293

294294
if flat_idx == len(clusters_flat):
295295
# test_idx is right of the last cluster
@@ -304,8 +304,8 @@ def find_nearest_cluster(self, idx):
304304
# Calculate which of the two nearest clusters is closer
305305
distances = np.array(
306306
[
307-
self.x[idx] - self.x[self.clusters[int(near_idx) - 1, 1]],
308-
self.x[idx] - self.x[self.clusters[int(near_idx), 0]],
307+
self.x[idx] - self.x[self.clusters[near_idx - 1, 1]],
308+
self.x[idx] - self.x[self.clusters[near_idx, 0]],
309309
]
310310
)
311311
if distances[0] < np.abs(distances[1]):

src/diffpy/srmise/modelcluster.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1174,7 +1174,7 @@ def cleanfit(self):
11741174
pos = np.array([p["position"] for p in self.model])
11751175
left_idx = pos.searchsorted(self.r_cluster[0])
11761176
right_idx = pos.searchsorted(self.r_cluster[-1])
1177-
outside_idx = range(0, left_idx)
1177+
outside_idx = list(range(0, left_idx))
11781178
outside_idx.extend(range(right_idx, len(self.model)))
11791179
# inside_idx = range(left_idx, right_idx)
11801180

src/diffpy/srmise/modelevaluators/aic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def evaluate(self, fit, count_fixed=False, kshift=0):
8585
if self.chisq is None:
8686
self.chisq = self.chi_squared(fit.value(), fit.y_cluster, fit.error_cluster)
8787

88-
self.stat = self.chisq + self.parpenalty(k, n)
88+
self.stat = self.chisq + self.parpenalty(k)
8989

9090
return self.stat
9191

@@ -169,7 +169,7 @@ def growth_justified(self, fit, k_prime):
169169
logger.warning("AIC.growth_justified(): too few data to evaluate quality reliably.")
170170
n = self.minpoints(k_actual)
171171

172-
penalty = self.parpenalty(k_test, n) - self.parpenalty(k_actual, n)
172+
penalty = self.parpenalty(k_test) - self.parpenalty(k_actual)
173173

174174
return penalty < self.chisq
175175

src/diffpy/srmise/modelevaluators/base.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def __lt__(self, other):
7676
assert self.method == other.method # Comparison between same types required
7777
assert self.stat is not None and other.stat is not None # The statistic must already be calculated
7878

79-
if self.higher_is_better is not None:
79+
if self.higher_is_better:
8080
return self.stat < other.stat
8181
else:
8282
return other.stat < self.stat
@@ -87,7 +87,7 @@ def __le__(self, other):
8787
assert self.method == other.method # Comparison between same types required
8888
assert self.stat is not None and other.stat is not None # The statistic must already be calculated
8989

90-
if self.higher_is_better is not None:
90+
if self.higher_is_better:
9191
return self.stat <= other.stat
9292
else:
9393
return other.stat <= self.stat
@@ -114,7 +114,7 @@ def __gt__(self, other):
114114
assert self.method == other.method # Comparison between same types required
115115
assert self.stat is not None and other.stat is not None # The statistic must already be calculated
116116

117-
if self.higher_is_better is not None:
117+
if self.higher_is_better:
118118
return self.stat > other.stat
119119
else:
120120
return other.stat > self.stat
@@ -125,7 +125,7 @@ def __ge__(self, other):
125125
assert self.method == other.method # Comparison between same types required
126126
assert self.stat is not None and other.stat is not None # The statistic must already be calculated
127127

128-
if self.higher_is_better is not None:
128+
if self.higher_is_better:
129129
return self.stat >= other.stat
130130
else:
131131
return other.stat >= self.stat

src/diffpy/srmise/modelparts.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,9 @@ def __getitem__(self, index):
430430
if isinstance(index, tuple) and len(index) == 2:
431431
start, end = index
432432
return self.__class__(super().__getitem__(slice(start, end)))
433-
else:
434-
return super().__getitem__(index)
433+
if isinstance(index, slice):
434+
return self.__class__(super().__getitem__(index))
435+
return super().__getitem__(index)
435436

436437
def transform(self, in_format="internal", out_format="internal"):
437438
"""Transforms format of parameters in this modelpart.

src/diffpy/srmise/pdfpeakextraction.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def defaultvars(self, *args):
247247

248248
# Enable "dg" as alias for "effective_dy"
249249
if "dg" in args and "effective_dy" not in args:
250-
nargs.add("effective_dy")
250+
nargs.append("effective_dy")
251251

252252
# Set other defaults
253253
PeakExtraction.defaultvars(self, *nargs)
@@ -888,9 +888,9 @@ def writepwastr(self, comments):
888888
# Generate parameter labels from the baseline function's parameterdict
889889
blf = self.extracted.baseline.owner()
890890
if blf.npars > 0:
891-
parlbl = blf.parameterdict.keys()
892-
paridx = np.array(blf.parameterdict.values()).argsort()
893-
lines.append("# " + " ".join([str(parlbl[i]) for i in paridx]))
891+
parlbl = list(blf.parameterdict.keys())
892+
paridx = np.array(list(blf.parameterdict.values())).argsort()
893+
lines.append("# " + " ".join(str(parlbl[i]) for i in paridx))
894894
blpars = " ".join([str(p) for p in self.extracted.baseline.pars])
895895
else:
896896
blpars = "(no parameters)"
@@ -1000,7 +1000,7 @@ def find_qmax(r, y, showgraphs=False):
10001000
new_y = resample(r, y, new_r)
10011001
new_dr = (new_r[-1] - r[0]) / (len(new_r) - 1)
10021002

1003-
yfft = np.imag(np.fft.fft(new_y))[: len(new_y) / 2]
1003+
yfft = np.imag(np.fft.fft(new_y))[: len(new_y) // 2]
10041004

10051005
d_ratio = stdratio(yfft)
10061006

src/diffpy/srmise/peakextraction.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ def extract_single(self, recursion_depth=1):
969969
# near_peaks: array containing the indices of two nearest peaks on either side of border_x
970970
# other_peaks: all the other peaks in full_cluster
971971
# left_data, right_data: indices defining the extent of the "interpeak range" for x, etc.
972-
near_peaks = np.array([], dtype=np.int)
972+
near_peaks = np.array([], dtype=np.int64)
973973

974974
# interpeak range goes from peak to peak of next nearest peaks, although their contributions
975975
# to the data are still removed.
@@ -1122,7 +1122,7 @@ def extract_single(self, recursion_depth=1):
11221122
# near_peaks: array containing the indices of two nearest peaks on either side of border_x
11231123
# other_peaks: all the other peaks in new_cluster
11241124
# left_data, right_data: indices defining the extent of the "interpeak range" for x, etc.
1125-
near_peaks = np.array([], dtype=np.int)
1125+
near_peaks = np.array([], dtype=np.int64)
11261126

11271127
# interpeak range goes from peak to peak of next nearest peaks, although their contributions
11281128
# to the data are still removed.

src/diffpy/srmise/peaks/gaussian.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,12 +464,12 @@ def max(self, pars):
464464

465465
guesspars = [[2.7, 0.15, 5], [3.7, 0.3, 5]]
466466
guess_peaks = Peaks([pf.actualize(p, "pwa") for p in guesspars])
467-
cluster = ModelCluster(guess_peaks, r, y, err, None, AICc, [pf])
467+
cluster = ModelCluster(guess_peaks, None, r, y, err, None, AICc, [pf])
468468

469469
qual1 = cluster.quality()
470470
print(qual1.stat)
471471
cluster.fit()
472-
yfit = cluster.calc()
472+
yfit = cluster.value()
473473
qual2 = cluster.quality()
474474
print(qual2.stat)
475475

0 commit comments

Comments
 (0)