mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-15 03:53:41 +02:00
rtruediv implemented for CObs, tests extended
This commit is contained in:
parent
c634d183a1
commit
325293f2b4
3 changed files with 27 additions and 11 deletions
|
@ -95,4 +95,7 @@ def Zq(inv_prop, fermion='Wilson'):
|
||||||
if not res.imag.is_zero_within_error(5):
|
if not res.imag.is_zero_within_error(5):
|
||||||
warnings.warn("Imaginary part of Zq is not zero within 5 sigma")
|
warnings.warn("Imaginary part of Zq is not zero within 5 sigma")
|
||||||
return res
|
return res
|
||||||
|
if not np.abs(res.imag.value) <= 1e-6:
|
||||||
|
warnings.warn("Imaginary part of Zq is not smaller than 1e-6")
|
||||||
|
return res
|
||||||
return res.real
|
return res.real
|
||||||
|
|
|
@ -740,6 +740,13 @@ class CObs:
|
||||||
else:
|
else:
|
||||||
return CObs(self.real / other, self.imag / other)
|
return CObs(self.real / other, self.imag / other)
|
||||||
|
|
||||||
|
def __rtruediv__(self, other):
|
||||||
|
r = self.real ** 2 + self.imag ** 2
|
||||||
|
if hasattr(other, 'real') and hasattr(other, 'imag'):
|
||||||
|
return CObs((self.real * other.real + self.imag * other.imag) / r, (self.real * other.imag - self.imag * other.real) / r)
|
||||||
|
else:
|
||||||
|
return CObs(self.real * other / r, -self.imag * other / r)
|
||||||
|
|
||||||
def __abs__(self):
|
def __abs__(self):
|
||||||
return np.sqrt(self.real**2 + self.imag**2)
|
return np.sqrt(self.real**2 + self.imag**2)
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,12 @@ def test_function_overloading():
|
||||||
t1 = f([a, b])
|
t1 = f([a, b])
|
||||||
t2 = pe.derived_observable(f, [a, b])
|
t2 = pe.derived_observable(f, [a, b])
|
||||||
c = t2 - t1
|
c = t2 - t1
|
||||||
assert c.value == 0.0, str(i)
|
assert c.is_zero()
|
||||||
assert np.all(np.abs(c.deltas['e1']) < 1e-14), str(i)
|
|
||||||
|
assert np.log(np.exp(b)) == b
|
||||||
|
assert np.exp(np.log(b)) == b
|
||||||
|
assert np.sqrt(b ** 2) == b
|
||||||
|
assert np.sqrt(b) ** 2 == b
|
||||||
|
|
||||||
|
|
||||||
def test_overloading_vectorization():
|
def test_overloading_vectorization():
|
||||||
|
@ -197,6 +201,7 @@ def test_overloaded_functions():
|
||||||
assert np.abs((ad_obs.value - item(val)) / ad_obs.value) < 1e-10, item.__name__
|
assert np.abs((ad_obs.value - item(val)) / ad_obs.value) < 1e-10, item.__name__
|
||||||
assert np.abs(ad_obs.dvalue - dval * np.abs(deriv[i](val))) < 1e-6, item.__name__
|
assert np.abs(ad_obs.dvalue - dval * np.abs(deriv[i](val))) < 1e-6, item.__name__
|
||||||
|
|
||||||
|
|
||||||
def test_utils():
|
def test_utils():
|
||||||
my_obs = pe.pseudo_Obs(1.0, 0.5, 't')
|
my_obs = pe.pseudo_Obs(1.0, 0.5, 't')
|
||||||
my_obs.print(0)
|
my_obs.print(0)
|
||||||
|
@ -211,6 +216,7 @@ def test_utils():
|
||||||
assert my_obs > (my_obs - 1)
|
assert my_obs > (my_obs - 1)
|
||||||
assert my_obs < (my_obs + 1)
|
assert my_obs < (my_obs + 1)
|
||||||
|
|
||||||
|
|
||||||
def test_cobs():
|
def test_cobs():
|
||||||
obs1 = pe.pseudo_Obs(1.0, 0.1, 't')
|
obs1 = pe.pseudo_Obs(1.0, 0.1, 't')
|
||||||
obs2 = pe.pseudo_Obs(-0.2, 0.03, 't')
|
obs2 = pe.pseudo_Obs(-0.2, 0.03, 't')
|
||||||
|
@ -227,22 +233,22 @@ def test_cobs():
|
||||||
|
|
||||||
fs = [[lambda x: x[0] + x[1], lambda x: x[1] + x[0]],
|
fs = [[lambda x: x[0] + x[1], lambda x: x[1] + x[0]],
|
||||||
[lambda x: x[0] * x[1], lambda x: x[1] * x[0]]]
|
[lambda x: x[0] * x[1], lambda x: x[1] * x[0]]]
|
||||||
for other in [1, 1.1, (1.1-0.2j), pe.CObs(obs1), pe.CObs(obs1, obs2)]:
|
for other in [3, 1.1, (1.1 - 0.2j), (2.3 + 0j), (0.0 + 7.7j), pe.CObs(obs1), pe.CObs(obs1, obs2)]:
|
||||||
for funcs in fs:
|
for funcs in fs:
|
||||||
ta = funcs[0]([my_cobs, other])
|
ta = funcs[0]([my_cobs, other])
|
||||||
tb = funcs[1]([my_cobs, other])
|
tb = funcs[1]([my_cobs, other])
|
||||||
diff = ta - tb
|
diff = ta - tb
|
||||||
assert np.isclose(0.0, float(diff.real))
|
assert diff.is_zero()
|
||||||
assert np.isclose(0.0, float(diff.imag))
|
|
||||||
assert np.allclose(0.0, diff.real.deltas['t'])
|
|
||||||
assert np.allclose(0.0, diff.imag.deltas['t'])
|
|
||||||
|
|
||||||
ta = my_cobs - other
|
ta = my_cobs - other
|
||||||
tb = other - my_cobs
|
tb = other - my_cobs
|
||||||
diff = ta + tb
|
diff = ta + tb
|
||||||
assert np.isclose(0.0, float(diff.real))
|
assert diff.is_zero()
|
||||||
assert np.isclose(0.0, float(diff.imag))
|
|
||||||
assert np.allclose(0.0, diff.real.deltas['t'])
|
ta = my_cobs / other
|
||||||
assert np.allclose(0.0, diff.imag.deltas['t'])
|
tb = other / my_cobs
|
||||||
|
diff = ta * tb - 1
|
||||||
|
assert diff.is_zero()
|
||||||
|
|
||||||
assert (my_cobs / other * other - my_cobs).is_zero()
|
assert (my_cobs / other * other - my_cobs).is_zero()
|
||||||
|
assert (other / my_cobs * my_cobs - other).is_zero()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue