mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-15 23:00:25 +01:00
test_correlators added, tests extended
This commit is contained in:
parent
e46746e4ca
commit
25d250cd53
4 changed files with 64 additions and 5 deletions
|
@ -242,7 +242,9 @@ class Corr:
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
variant -- log: uses the standard effective mass log(C(t) / C(t+1))
|
variant -- log: uses the standard effective mass log(C(t) / C(t+1))
|
||||||
periodic : Solves C(t) / C(t+1) = cosh(m * (t - T/2)) / cosh(m * (t + 1 - T/2)) for m. See, e.g., arXiv:1205.5380
|
cosh : Use periodicitiy of the correlator by solving C(t) / C(t+1) = cosh(m * (t - T/2)) / cosh(m * (t + 1 - T/2)) for m.
|
||||||
|
sinh : Use anti-periodicitiy of the correlator by solving C(t) / C(t+1) = sinh(m * (t - T/2)) / sinh(m * (t + 1 - T/2)) for m.
|
||||||
|
See, e.g., arXiv:1205.5380
|
||||||
guess -- guess for the root finder, only relevant for the root variant
|
guess -- guess for the root finder, only relevant for the root variant
|
||||||
"""
|
"""
|
||||||
if self.N != 1:
|
if self.N != 1:
|
||||||
|
|
48
tests/test_correlators.py
Normal file
48
tests/test_correlators.py
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
import numpy as np
|
||||||
|
import pyerrors as pe
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
np.random.seed(0)
|
||||||
|
|
||||||
|
|
||||||
|
def test_function_overloading():
|
||||||
|
corr_content_a = []
|
||||||
|
corr_content_b = []
|
||||||
|
for t in range(24):
|
||||||
|
corr_content_a.append(pe.pseudo_Obs(np.random.normal(1e-10, 1e-8), 1e-4, 't'))
|
||||||
|
corr_content_b.append(pe.pseudo_Obs(np.random.normal(1e8, 1e10), 1e7, 't'))
|
||||||
|
|
||||||
|
corr_a = pe.correlators.Corr(corr_content_a)
|
||||||
|
corr_b = pe.correlators.Corr(corr_content_b)
|
||||||
|
|
||||||
|
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], lambda x: x[0] / x[1], lambda x: x[1] / x[0],
|
||||||
|
lambda x: np.exp(x[0]), lambda x: np.sin(x[0]), lambda x: np.cos(x[0]), lambda x: np.tan(x[0]),
|
||||||
|
lambda x: np.log(x[0] + 0.1), lambda x: np.sqrt(np.abs(x[0])),
|
||||||
|
lambda x: np.sinh(x[0]), lambda x: np.cosh(x[0]), lambda x: np.tanh(x[0])]
|
||||||
|
|
||||||
|
for i, f in enumerate(fs):
|
||||||
|
t1 = f([corr_a, corr_b])
|
||||||
|
for o_a, o_b, con in zip(corr_content_a, corr_content_b, t1.content):
|
||||||
|
t2 = f([o_a, o_b])
|
||||||
|
t2.gamma_method()
|
||||||
|
assert np.isclose(con[0].value, t2.value)
|
||||||
|
assert np.isclose(con[0].dvalue, t2.dvalue)
|
||||||
|
assert np.allclose(con[0].deltas['t'], t2.deltas['t'])
|
||||||
|
|
||||||
|
def test_modify_correlator():
|
||||||
|
corr_content = []
|
||||||
|
for t in range(24):
|
||||||
|
exponent = np.random.normal(3, 5)
|
||||||
|
corr_content.append(pe.pseudo_Obs(2 + 10 ** exponent, 10 ** (exponent - 1), 't'))
|
||||||
|
|
||||||
|
corr = pe.correlators.Corr(corr_content)
|
||||||
|
|
||||||
|
with pytest.warns(RuntimeWarning):
|
||||||
|
corr.symmetric()
|
||||||
|
with pytest.warns(RuntimeWarning):
|
||||||
|
corr.anti_symmetric()
|
||||||
|
corr.roll(np.random.randint(100))
|
||||||
|
corr.deriv(symmetric=True)
|
||||||
|
corr.deriv(symmetric=False)
|
||||||
|
corr.second_deriv()
|
|
@ -35,7 +35,7 @@ def test_function_overloading():
|
||||||
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],
|
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], 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],
|
||||||
lambda x: np.exp(x[0]), lambda x: np.sin(x[0]), lambda x: np.cos(x[0]), lambda x: np.tan(x[0]),
|
lambda x: np.exp(x[0]), lambda x: np.sin(x[0]), lambda x: np.cos(x[0]), lambda x: np.tan(x[0]),
|
||||||
lambda x: np.log(x[0]), lambda x: np.sqrt(x[0]),
|
lambda x: np.log(x[0]), lambda x: np.sqrt(np.abs(x[0])),
|
||||||
lambda x: np.sinh(x[0]), lambda x: np.cosh(x[0]), lambda x: np.tanh(x[0])]
|
lambda x: np.sinh(x[0]), lambda x: np.cosh(x[0]), lambda x: np.tanh(x[0])]
|
||||||
|
|
||||||
for i, f in enumerate(fs):
|
for i, f in enumerate(fs):
|
||||||
|
@ -47,8 +47,17 @@ def test_function_overloading():
|
||||||
|
|
||||||
|
|
||||||
def test_overloading_vectorization():
|
def test_overloading_vectorization():
|
||||||
a = np.random.randint(0, 100, 10)
|
a = np.random.randint(1, 100, 10)
|
||||||
b = pe.pseudo_Obs(4, 0.8, 'e1')
|
b = pe.pseudo_Obs(4, 0.8, 't')
|
||||||
|
|
||||||
|
assert [o.value for o in a * b] == [o.value for o in b * a]
|
||||||
|
assert [o.value for o in a + b] == [o.value for o in b + a]
|
||||||
|
assert [o.value for o in a - b] == [-1 * o.value for o in b - a]
|
||||||
|
assert [o.value for o in a / b] == [o.value for o in [p / b for p in a]]
|
||||||
|
assert [o.value for o in b / a] == [o.value for o in [b / p for p in a]]
|
||||||
|
|
||||||
|
a = np.random.normal(0.0, 1e10, 10)
|
||||||
|
b = pe.pseudo_Obs(4, 0.8, 't')
|
||||||
|
|
||||||
assert [o.value for o in a * b] == [o.value for o in b * a]
|
assert [o.value for o in a * b] == [o.value for o in b * a]
|
||||||
assert [o.value for o in a + b] == [o.value for o in b + a]
|
assert [o.value for o in a + b] == [o.value for o in b + a]
|
||||||
|
|
|
@ -16,4 +16,4 @@ def test_root_linear():
|
||||||
|
|
||||||
assert np.isclose(my_root.value, value)
|
assert np.isclose(my_root.value, value)
|
||||||
difference = my_obs - my_root
|
difference = my_obs - my_root
|
||||||
assert all(np.isclose(0.0, difference.deltas['t']))
|
assert np.allclose(0.0, difference.deltas['t'])
|
||||||
|
|
Loading…
Add table
Reference in a new issue