Skip to content

Commit 31e9698

Browse files
authored
Merge pull request #156 from cadenmyers13/fitcontrib-dep-final
Deprecate: Deprecate `setResidualEquation` and `getResidualEquation` in `Fitcontribution`
2 parents 545ab13 + 1a3aa78 commit 31e9698

File tree

8 files changed

+119
-25
lines changed

8 files changed

+119
-25
lines changed

docs/examples/crystalpdfall.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ def makeRecipe(
9797
xcontribution_sini.set_equation("scale * (xG_sini_ni + xG_sini_si)")
9898

9999
# As explained in another example, we want to minimize using Rw^2.
100-
xcontribution_ni.setResidualEquation("resv")
101-
xcontribution_si.setResidualEquation("resv")
102-
ncontribution_ni.setResidualEquation("resv")
103-
xcontribution_sini.setResidualEquation("resv")
100+
xcontribution_ni.set_residual_equation("resv")
101+
xcontribution_si.set_residual_equation("resv")
102+
ncontribution_ni.set_residual_equation("resv")
103+
xcontribution_sini.set_residual_equation("resv")
104104

105105
# Make the FitRecipe and add the FitContributions.
106106
recipe = FitRecipe()

docs/examples/crystalpdftwodata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ def makeRecipe(ciffile, xdatname, ndatname):
105105
# The contribution's residual can be either chi^2, Rw^2, or custom crafted.
106106
# In this case, we should minimize Rw^2 of each contribution so that each
107107
# one can contribute roughly equally to the fit.
108-
xcontribution.setResidualEquation("resv")
109-
ncontribution.setResidualEquation("resv")
108+
xcontribution.set_residual_equation("resv")
109+
ncontribution.set_residual_equation("resv")
110110

111111
# Make the FitRecipe and add the FitContributions.
112112
recipe = FitRecipe()

docs/examples/ellipsoidsas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def makeRecipe(datname):
6464
# higher-Q information remains significant. There are no I(Q) uncertainty
6565
# values with the data, so we do not need to worry about the effect this
6666
# will have on the estimated parameter uncertainties.
67-
contribution.setResidualEquation("log(eq) - log(y)")
67+
contribution.set_residual_equation("log(eq) - log(y)")
6868

6969
# Make the FitRecipe and add the FitContribution.
7070
recipe = FitRecipe()

docs/examples/nppdfsas.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def makeRecipe(ciffile, grdata, iqdata):
5959
stru = loadCrystal(ciffile)
6060
pdfgenerator.setStructure(stru)
6161
pdfcontribution.add_profile_generator(pdfgenerator)
62-
pdfcontribution.setResidualEquation("resv")
62+
pdfcontribution.set_residual_equation("resv")
6363

6464
# Create a SAS contribution as well. We assume the nanoparticle is roughly
6565
# elliptical.
@@ -78,7 +78,7 @@ def makeRecipe(ciffile, grdata, iqdata):
7878
model = EllipsoidModel()
7979
sasgenerator = SASGenerator("generator", model)
8080
sascontribution.add_profile_generator(sasgenerator)
81-
sascontribution.setResidualEquation("resv")
81+
sascontribution.set_residual_equation("resv")
8282

8383
# Now we set up a characteristic function calculator that depends on the
8484
# sas model.

news/fitcontrib-dep-final.rst

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
**Added:**
2+
3+
* Added ``get_residual_equation`` method to ``FitContribution``.
4+
* Added ``set_residual_equation`` method to ``FitContribution``.
5+
6+
**Changed:**
7+
8+
* <news item>
9+
10+
**Deprecated:**
11+
12+
* Deprecated ``getResidualEquation`` method of ``FitContribution`` for removal in 4.0.0.
13+
* Deprecated ``setResidualEquation`` method of ``FitContribution`` for removal in 4.0.0.
14+
15+
**Removed:**
16+
17+
* <news item>
18+
19+
**Fixed:**
20+
21+
* <news item>
22+
23+
**Security:**
24+
25+
* <news item>

src/diffpy/srfit/fitbase/fitcontribution.py

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@
6363
removal_version,
6464
)
6565

66+
setresidualequation_dep_msg = build_deprecation_message(
67+
base,
68+
"setResidualEquation",
69+
"set_residual_equation",
70+
removal_version,
71+
)
72+
73+
getresidualequation_dep_msg = build_deprecation_message(
74+
base,
75+
"getResidualEquation",
76+
"get_residual_equation",
77+
removal_version,
78+
)
79+
6680

6781
class FitContribution(ParameterSet):
6882
"""FitContribution class.
@@ -186,7 +200,7 @@ def set_profile(self, profile, xname=None, yname=None, dyname=None):
186200

187201
# If we have _eq, but not _reseq, set the residual
188202
if self._eq is not None and self._reseq is None:
189-
self.setResidualEquation("chiv")
203+
self.set_residual_equation("chiv")
190204

191205
return
192206

@@ -262,7 +276,7 @@ def set_equation(self, eqstr, ns={}):
262276
263277
This sets the equation that will be used when generating the residual
264278
for this FitContribution. The equation will be usable within
265-
setResidualEquation as "eq", and it takes no arguments.
279+
set_residual_equation as "eq", and it takes no arguments.
266280
267281
Attributes
268282
----------
@@ -296,7 +310,7 @@ def set_equation(self, eqstr, ns={}):
296310

297311
# Set the residual if we need to
298312
if self.profile is not None and self._reseq is None:
299-
self.setResidualEquation("chiv")
313+
self.set_residual_equation("chiv")
300314

301315
return
302316

@@ -334,7 +348,7 @@ def getEquation(self):
334348
"""
335349
return self.get_equation()
336350

337-
def setResidualEquation(self, eqstr):
351+
def set_residual_equation(self, eqstr):
338352
"""Set the residual equation for the FitContribution.
339353
340354
Attributes
@@ -378,7 +392,19 @@ def setResidualEquation(self, eqstr):
378392

379393
return
380394

381-
def getResidualEquation(self):
395+
@deprecated(setresidualequation_dep_msg)
396+
def setResidualEquation(self, eqstr):
397+
"""This function has been deprecated and will be removed in version
398+
4.0.0.
399+
400+
Please use
401+
diffpy.srfit.fitbase.FitContribution.set_residual_equation
402+
instead.
403+
"""
404+
self.set_residual_equation(eqstr)
405+
return
406+
407+
def get_residual_equation(self):
382408
"""Get math expression string for the active residual equation.
383409
384410
Return normalized math formula or an empty string if residual
@@ -391,6 +417,18 @@ def getResidualEquation(self):
391417
rv = getExpression(self._reseq, eqskip="eq$")
392418
return rv
393419

420+
@deprecated(getresidualequation_dep_msg)
421+
def getResidualEquation(self):
422+
"""This function has been deprecated and will be removed in version
423+
4.0.0.
424+
425+
Please use
426+
diffpy.srfit.fitbase.FitContribution.get_residual_equation
427+
instead.
428+
"""
429+
430+
return self.get_residual_equation()
431+
394432
def residual(self):
395433
"""Calculate the residual for this fitcontribution.
396434
@@ -402,7 +440,7 @@ def residual(self):
402440
chiv = (eq() - self.profile.y) / self.profile.dy
403441
The value that is optimized is dot(chiv, chiv).
404442
405-
The residual equation can be changed with the setResidualEquation
443+
The residual equation can be changed with the set_residual_equation
406444
method.
407445
"""
408446
# Assign the calculated profile

src/diffpy/srfit/fitbase/simplerecipe.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@
5151
removal_version,
5252
)
5353

54+
setEquation_dep_msg = build_deprecation_message(
55+
base,
56+
"setEquation",
57+
"set_equation",
58+
removal_version,
59+
)
60+
5461

5562
class SimpleRecipe(FitRecipe):
5663
"""SimpleRecipe class.
@@ -224,6 +231,7 @@ def set_calculation_range(self, xmin=None, xmax=None, dx=None):
224231
"""
225232
return self.profile.set_calculation_range(xmin, xmax, dx)
226233

234+
@deprecated(setCalculationRange_dep_msg)
227235
def setCalculationRange(self, xmin=None, xmax=None, dx=None):
228236
"""This function has been deprecated and will be removed in version
229237
4.0.0.
@@ -280,8 +288,8 @@ def set_equation(self, eqstr, ns={}):
280288
"""Set the profile equation for the FitContribution.
281289
282290
This sets the equation that will be used when generating the residual.
283-
The equation will be usable within setResidualEquation as "eq", and it
284-
takes no arguments.
291+
The equation will be usable within set_residual_equation as "eq", and
292+
it takes no arguments.
285293
286294
Attributes
287295
----------
@@ -309,6 +317,18 @@ def set_equation(self, eqstr, ns={}):
309317
self.addVar(par)
310318
return
311319

320+
@deprecated(setEquation_dep_msg)
321+
def setEquation(self, eqstr, ns={}):
322+
"""This function has been deprecated and will be removed in version
323+
4.0.0.
324+
325+
Please use
326+
diffpy.srfit.fitbase.simplerecipe.SimpleRecipe.set_equation
327+
instead.
328+
"""
329+
self.set_equation(eqstr, ns)
330+
return
331+
312332
def __call__(self):
313333
"""Evaluate the contribution equation."""
314334
return self.contribution.evaluate()

tests/test_contribution.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,26 @@ def testReplacements(self):
155155
self.assertEqual(len(xobs2), len(fc.residual()))
156156
return
157157

158+
def test_get_residual_equation(self):
159+
"""Check getting the current formula for residual equation."""
160+
fc = self.fitcontribution
161+
self.assertEqual("", fc.get_residual_equation())
162+
fc.set_profile(self.profile)
163+
fc.set_equation("A * x + B")
164+
self.assertEqual("((eq - y) / dy)", fc.get_residual_equation())
165+
fc.set_residual_equation("2 * (eq - y)")
166+
self.assertEqual("(2 * (eq - y))", fc.get_residual_equation())
167+
return
168+
158169
def test_getResidualEquation(self):
159170
"""Check getting the current formula for residual equation."""
160171
fc = self.fitcontribution
161-
self.assertEqual("", fc.getResidualEquation())
172+
self.assertEqual("", fc.get_residual_equation())
162173
fc.set_profile(self.profile)
163174
fc.set_equation("A * x + B")
164175
self.assertEqual("((eq - y) / dy)", fc.getResidualEquation())
165176
fc.setResidualEquation("2 * (eq - y)")
166-
self.assertEqual("(2 * (eq - y))", fc.getResidualEquation())
177+
self.assertEqual("(2 * (eq - y))", fc.get_residual_equation())
167178
return
168179

169180
def test_releaseOldEquations(self):
@@ -175,7 +186,7 @@ def test_releaseOldEquations(self):
175186
self.assertEqual(1, len(fc._eqfactory.equations))
176187
fc.set_profile(self.profile)
177188
for i in range(5):
178-
fc.setResidualEquation("chiv")
189+
fc.set_residual_equation("chiv")
179190
self.assertEqual(2, len(fc._eqfactory.equations))
180191
return
181192

@@ -258,26 +269,26 @@ def testResidual(noObserversInGlobalBuilders):
258269

259270
# Choose a new residual.
260271
fc.set_equation("2*I")
261-
fc.setResidualEquation("resv")
272+
fc.set_residual_equation("resv")
262273
chiv = fc.residual()
263274
assert dot(chiv, chiv) == pytest.approx(
264275
sum((2 * xobs - yobs) ** 2) / sum(yobs**2)
265276
)
266277

267278
# Make a custom residual.
268-
fc.setResidualEquation("abs(eq-y)**0.5")
279+
fc.set_residual_equation("abs(eq-y)**0.5")
269280
chiv = fc.residual()
270281
assert dot(chiv, chiv) == pytest.approx(sum(abs(2 * xobs - yobs)))
271282

272283
# Test configuration checks
273284
fc1 = FitContribution("test1")
274285
with pytest.raises(SrFitError):
275-
fc1.setResidualEquation("chiv")
286+
fc1.set_residual_equation("chiv")
276287
fc1.set_profile(profile)
277288
with pytest.raises(SrFitError):
278-
fc1.setResidualEquation("chiv")
289+
fc1.set_residual_equation("chiv")
279290
fc1.set_equation("A * x")
280-
fc1.setResidualEquation("chiv")
291+
fc1.set_residual_equation("chiv")
281292
assert noObserversInGlobalBuilders
282293
return
283294

0 commit comments

Comments
 (0)