mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-16 23:30:24 +01:00
Merge branch 'develop' into documentation
This commit is contained in:
commit
b34b6d2abf
3 changed files with 71 additions and 59 deletions
|
@ -32,6 +32,8 @@ class Covobs:
|
||||||
raise Exception('Covariance matrix has to be a square matrix!')
|
raise Exception('Covariance matrix has to be a square matrix!')
|
||||||
else:
|
else:
|
||||||
raise Exception('Covariance matrix has to be a 2 dimensional square matrix!')
|
raise Exception('Covariance matrix has to be a 2 dimensional square matrix!')
|
||||||
|
if '|' in name:
|
||||||
|
raise Exception("Covobs name must not contain replica separator '|'.")
|
||||||
self.name = name
|
self.name = name
|
||||||
if grad is None:
|
if grad is None:
|
||||||
if pos is None:
|
if pos is None:
|
||||||
|
|
69
tests/covobs_test.py
Normal file
69
tests/covobs_test.py
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
import autograd.numpy as np
|
||||||
|
import pyerrors as pe
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
np.random.seed(0)
|
||||||
|
|
||||||
|
|
||||||
|
def test_covobs():
|
||||||
|
val = 1.123124
|
||||||
|
cov = .243423
|
||||||
|
name = 'Covariance'
|
||||||
|
co = pe.cov_Obs(val, cov, name)
|
||||||
|
co.gamma_method()
|
||||||
|
assert (co.dvalue == np.sqrt(cov))
|
||||||
|
assert (co.value == val)
|
||||||
|
|
||||||
|
do = 2 * co
|
||||||
|
assert (do.covobs[name].grad[0] == 2)
|
||||||
|
|
||||||
|
do = co * co
|
||||||
|
assert (do.covobs[name].grad[0] == 2 * val)
|
||||||
|
assert np.array_equal(do.covobs[name].cov, co.covobs[name].cov)
|
||||||
|
|
||||||
|
pi = [16.7457, -19.0475]
|
||||||
|
cov = [[3.49591, -6.07560], [-6.07560, 10.5834]]
|
||||||
|
|
||||||
|
cl = pe.cov_Obs(pi, cov, 'rAP')
|
||||||
|
pl = pe.misc.gen_correlated_data(pi, np.asarray(cov), 'rAPpseudo')
|
||||||
|
|
||||||
|
def rAP(p, g0sq):
|
||||||
|
return -0.0010666 * g0sq * (1 + np.exp(p[0] + p[1] / g0sq))
|
||||||
|
|
||||||
|
for g0sq in [1, 1.5, 1.8]:
|
||||||
|
oc = rAP(cl, g0sq)
|
||||||
|
oc.gamma_method()
|
||||||
|
op = rAP(pl, g0sq)
|
||||||
|
op.gamma_method()
|
||||||
|
assert(np.isclose(oc.value, op.value, rtol=1e-14, atol=1e-14))
|
||||||
|
|
||||||
|
assert(pe.covariance(cl[0], cl[1]) == cov[0][1])
|
||||||
|
assert(pe.covariance2(cl[0], cl[1]) == cov[1][0])
|
||||||
|
|
||||||
|
do = cl[0] * cl[1]
|
||||||
|
assert(np.array_equal(do.covobs['rAP'].grad, np.transpose([pi[1], pi[0]]).reshape(2, 1)))
|
||||||
|
|
||||||
|
|
||||||
|
def test_covobs_overloading():
|
||||||
|
covobs = pe.cov_Obs([0.5, 0.5], np.array([[0.02, 0.02], [0.02, 0.02]]), 'test')
|
||||||
|
assert (covobs[0] / covobs[1]) == 1
|
||||||
|
assert (covobs[0] - covobs[1]) == 0
|
||||||
|
|
||||||
|
my_obs = pe.pseudo_Obs(2.3, 0.2, 'obs')
|
||||||
|
|
||||||
|
assert (my_obs * covobs[0] / covobs[1]) == my_obs
|
||||||
|
|
||||||
|
covobs = pe.cov_Obs(0.0, 0.3, 'test')
|
||||||
|
assert not covobs.is_zero()
|
||||||
|
|
||||||
|
|
||||||
|
def test_covobs_name_collision():
|
||||||
|
covobs = pe.cov_Obs(0.5, 0.002, 'test')
|
||||||
|
my_obs = pe.pseudo_Obs(2.3, 0.2, 'test')
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
summed_obs = my_obs + covobs
|
||||||
|
|
||||||
|
|
||||||
|
def test_covobs_replica_separator():
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
covobs = pe.cov_Obs(0.5, 0.002, 'test|r2')
|
|
@ -542,62 +542,3 @@ def test_import_jackknife():
|
||||||
my_jacks = my_obs.export_jackknife()
|
my_jacks = my_obs.export_jackknife()
|
||||||
reconstructed_obs = pe.import_jackknife(my_jacks, 'test')
|
reconstructed_obs = pe.import_jackknife(my_jacks, 'test')
|
||||||
assert my_obs == reconstructed_obs
|
assert my_obs == reconstructed_obs
|
||||||
|
|
||||||
|
|
||||||
def test_covobs():
|
|
||||||
val = 1.123124
|
|
||||||
cov = .243423
|
|
||||||
name = 'Covariance'
|
|
||||||
co = pe.cov_Obs(val, cov, name)
|
|
||||||
co.gamma_method()
|
|
||||||
assert (co.dvalue == np.sqrt(cov))
|
|
||||||
assert (co.value == val)
|
|
||||||
|
|
||||||
do = 2 * co
|
|
||||||
assert (do.covobs[name].grad[0] == 2)
|
|
||||||
|
|
||||||
do = co * co
|
|
||||||
assert (do.covobs[name].grad[0] == 2 * val)
|
|
||||||
assert np.array_equal(do.covobs[name].cov, co.covobs[name].cov)
|
|
||||||
|
|
||||||
pi = [16.7457, -19.0475]
|
|
||||||
cov = [[3.49591, -6.07560], [-6.07560, 10.5834]]
|
|
||||||
|
|
||||||
cl = pe.cov_Obs(pi, cov, 'rAP')
|
|
||||||
pl = pe.misc.gen_correlated_data(pi, np.asarray(cov), 'rAPpseudo')
|
|
||||||
|
|
||||||
def rAP(p, g0sq):
|
|
||||||
return -0.0010666 * g0sq * (1 + np.exp(p[0] + p[1] / g0sq))
|
|
||||||
|
|
||||||
for g0sq in [1, 1.5, 1.8]:
|
|
||||||
oc = rAP(cl, g0sq)
|
|
||||||
oc.gamma_method()
|
|
||||||
op = rAP(pl, g0sq)
|
|
||||||
op.gamma_method()
|
|
||||||
assert(np.isclose(oc.value, op.value, rtol=1e-14, atol=1e-14))
|
|
||||||
|
|
||||||
assert(pe.covariance(cl[0], cl[1]) == cov[0][1])
|
|
||||||
assert(pe.covariance2(cl[0], cl[1]) == cov[1][0])
|
|
||||||
|
|
||||||
do = cl[0] * cl[1]
|
|
||||||
assert(np.array_equal(do.covobs['rAP'].grad, np.transpose([pi[1], pi[0]]).reshape(2, 1)))
|
|
||||||
|
|
||||||
|
|
||||||
def test_covobs_overloading():
|
|
||||||
covobs = pe.cov_Obs([0.5, 0.5], np.array([[0.02, 0.02], [0.02, 0.02]]), 'test')
|
|
||||||
assert (covobs[0] / covobs[1]) == 1
|
|
||||||
assert (covobs[0] - covobs[1]) == 0
|
|
||||||
|
|
||||||
my_obs = pe.pseudo_Obs(2.3, 0.2, 'obs')
|
|
||||||
|
|
||||||
assert (my_obs * covobs[0] / covobs[1]) == my_obs
|
|
||||||
|
|
||||||
covobs = pe.cov_Obs(0.0, 0.3, 'test')
|
|
||||||
assert not covobs.is_zero()
|
|
||||||
|
|
||||||
|
|
||||||
def test_covobs_name_collision():
|
|
||||||
covobs = pe.cov_Obs(0.5, 0.002, 'test')
|
|
||||||
my_obs = pe.pseudo_Obs(2.3, 0.2, 'test')
|
|
||||||
with pytest.raises(Exception):
|
|
||||||
summed_obs = my_obs + covobs
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue