Skip to content

Commit 30bfb55

Browse files
authored
[Feat] Provide derivatives for pow (#246)
* [Feat] Provide manual derivatives for __pow__ * [Feat] Also applied changes to rpow * [Test] Another pow test added.
1 parent 0ce765a commit 30bfb55

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

pyerrors/obs.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -856,15 +856,12 @@ def __rtruediv__(self, y):
856856

857857
def __pow__(self, y):
858858
if isinstance(y, Obs):
859-
return derived_observable(lambda x: x[0] ** x[1], [self, y])
859+
return derived_observable(lambda x, **kwargs: x[0] ** x[1], [self, y], man_grad=[y.value * self.value ** (y.value - 1), self.value ** y.value * np.log(self.value)])
860860
else:
861-
return derived_observable(lambda x: x[0] ** y, [self])
861+
return derived_observable(lambda x, **kwargs: x[0] ** y, [self], man_grad=[y * self.value ** (y - 1)])
862862

863863
def __rpow__(self, y):
864-
if isinstance(y, Obs):
865-
return derived_observable(lambda x: x[0] ** x[1], [y, self])
866-
else:
867-
return derived_observable(lambda x: y ** x[0], [self])
864+
return derived_observable(lambda x, **kwargs: y ** x[0], [self], man_grad=[y ** self.value * np.log(y)])
868865

869866
def __abs__(self):
870867
return derived_observable(lambda x: anp.abs(x[0]), [self])

tests/obs_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,18 @@ def test_cobs_overloading():
461461
obs / cobs
462462

463463

464+
def test_pow():
465+
data = [1, 2.341, pe.pseudo_Obs(4.8, 0.48, "test_obs"), pe.cov_Obs(1.1, 0.3 ** 2, "test_cov_obs")]
466+
467+
for d in data:
468+
assert d * d == d ** 2
469+
assert d * d * d == d ** 3
470+
471+
for d2 in data:
472+
assert np.log(d ** d2) == d2 * np.log(d)
473+
assert (d ** d2) ** (1 / d2) == d
474+
475+
464476
def test_reweighting():
465477
my_obs = pe.Obs([np.random.rand(1000)], ['t'])
466478
assert not my_obs.reweighted

0 commit comments

Comments
 (0)