mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-14 19:43:41 +02:00
Merge branch 'develop' into feature/corrfits
This commit is contained in:
commit
8155037b38
8 changed files with 505 additions and 184 deletions
|
@ -51,6 +51,51 @@ def test_multi_dot():
|
|||
assert e.is_zero(), t
|
||||
|
||||
|
||||
def test_matmul_irregular_histories():
|
||||
dim = 2
|
||||
length = 500
|
||||
|
||||
standard_array = []
|
||||
for i in range(dim ** 2):
|
||||
standard_array.append(pe.Obs([np.random.normal(1.1, 0.2, length)], ['ens1']))
|
||||
standard_matrix = np.array(standard_array).reshape((dim, dim))
|
||||
|
||||
for idl in [range(1, 501, 2), range(250, 273), [2, 8, 19, 20, 78]]:
|
||||
irregular_array = []
|
||||
for i in range(dim ** 2):
|
||||
irregular_array.append(pe.Obs([np.random.normal(1.1, 0.2, len(idl))], ['ens1'], idl=[idl]))
|
||||
irregular_matrix = np.array(irregular_array).reshape((dim, dim))
|
||||
|
||||
t1 = standard_matrix @ irregular_matrix
|
||||
t2 = pe.linalg.matmul(standard_matrix, irregular_matrix)
|
||||
|
||||
assert np.all([o.is_zero() for o in (t1 - t2).ravel()])
|
||||
assert np.all([o.is_merged for o in t1.ravel()])
|
||||
assert np.all([o.is_merged for o in t2.ravel()])
|
||||
|
||||
|
||||
def test_irregular_matrix_inverse():
|
||||
dim = 3
|
||||
length = 500
|
||||
|
||||
for idl in [range(8, 508, 10), range(250, 273), [2, 8, 19, 20, 78, 99, 828, 10548979]]:
|
||||
irregular_array = []
|
||||
for i in range(dim ** 2):
|
||||
irregular_array.append(pe.Obs([np.random.normal(1.1, 0.2, len(idl)), np.random.normal(0.25, 0.1, 10)], ['ens1', 'ens2'], idl=[idl, range(1, 11)]))
|
||||
irregular_matrix = np.array(irregular_array).reshape((dim, dim))
|
||||
|
||||
invertible_irregular_matrix = np.identity(dim) + irregular_matrix @ irregular_matrix.T
|
||||
|
||||
inverse = pe.linalg.inv(invertible_irregular_matrix)
|
||||
|
||||
assert np.allclose(np.linalg.inv(np.vectorize(lambda x: x.value)(invertible_irregular_matrix)) - np.vectorize(lambda x: x.value)(inverse), 0.0)
|
||||
|
||||
check1 = pe.linalg.matmul(invertible_irregular_matrix, inverse)
|
||||
assert np.all([o.is_zero() for o in (check1 - np.identity(dim)).ravel()])
|
||||
check2 = invertible_irregular_matrix @ inverse
|
||||
assert np.all([o.is_zero() for o in (check2 - np.identity(dim)).ravel()])
|
||||
|
||||
|
||||
def test_matrix_inverse():
|
||||
content = []
|
||||
for t in range(9):
|
||||
|
|
|
@ -117,6 +117,65 @@ def test_gamma_method_persistance():
|
|||
assert ddvalue == my_obs.ddvalue
|
||||
|
||||
|
||||
def test_gamma_method_kwargs():
|
||||
|
||||
my_obs = pe.Obs([np.random.normal(1, 0.8, 5)], ['ens'], idl=[[1, 2, 3, 6, 17]])
|
||||
|
||||
pe.Obs.S_dict['ens13.7'] = 3
|
||||
|
||||
my_obs.gamma_method()
|
||||
assert my_obs.S['ens'] == pe.Obs.S_global
|
||||
assert my_obs.tau_exp['ens'] == pe.Obs.tau_exp_global
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_global
|
||||
|
||||
my_obs.gamma_method(S=3.71)
|
||||
assert my_obs.S['ens'] == 3.71
|
||||
assert my_obs.tau_exp['ens'] == pe.Obs.tau_exp_global
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_global
|
||||
|
||||
my_obs.gamma_method(tau_exp=17)
|
||||
assert my_obs.S['ens'] == pe.Obs.S_global
|
||||
assert my_obs.tau_exp['ens'] == 17
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_global
|
||||
|
||||
my_obs.gamma_method(tau_exp=1.7, N_sigma=2.123)
|
||||
assert my_obs.S['ens'] == pe.Obs.S_global
|
||||
assert my_obs.tau_exp['ens'] == 1.7
|
||||
assert my_obs.N_sigma['ens'] == 2.123
|
||||
|
||||
pe.Obs.S_dict['ens'] = 3
|
||||
pe.Obs.S_dict['ens|23'] = 7
|
||||
|
||||
my_obs.gamma_method()
|
||||
assert my_obs.S['ens'] == pe.Obs.S_dict['ens'] == 3
|
||||
assert my_obs.tau_exp['ens'] == pe.Obs.tau_exp_global
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_global
|
||||
|
||||
pe.Obs.tau_exp_dict['ens'] = 4
|
||||
pe.Obs.N_sigma_dict['ens'] = 4
|
||||
|
||||
my_obs.gamma_method()
|
||||
assert my_obs.S['ens'] == pe.Obs.S_dict['ens'] == 3
|
||||
assert my_obs.tau_exp['ens'] == pe.Obs.tau_exp_dict['ens'] == 4
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_dict['ens'] == 4
|
||||
|
||||
my_obs.gamma_method(S=1.1, tau_exp=1.2, N_sigma=1.3)
|
||||
assert my_obs.S['ens'] == 1.1
|
||||
assert my_obs.tau_exp['ens'] == 1.2
|
||||
assert my_obs.N_sigma['ens'] == 1.3
|
||||
|
||||
pe.Obs.S_dict = {}
|
||||
pe.Obs.tau_exp_dict = {}
|
||||
pe.Obs.N_sigma_dict = {}
|
||||
|
||||
my_obs = pe.Obs([np.random.normal(1, 0.8, 5)], ['ens'])
|
||||
|
||||
my_obs.gamma_method()
|
||||
assert my_obs.S['ens'] == pe.Obs.S_global
|
||||
assert my_obs.tau_exp['ens'] == pe.Obs.tau_exp_global
|
||||
assert my_obs.N_sigma['ens'] == pe.Obs.N_sigma_global
|
||||
|
||||
|
||||
def test_covariance_is_variance():
|
||||
value = np.random.normal(5, 10)
|
||||
dvalue = np.abs(np.random.normal(0, 1))
|
||||
|
@ -445,3 +504,21 @@ def test_covariance2_symmetry():
|
|||
cov_ba = pe.covariance2(a, test_obs1)
|
||||
assert np.abs(cov_ab - cov_ba) <= 10 * np.finfo(np.float64).eps
|
||||
assert np.abs(cov_ab) < test_obs1.dvalue * test_obs2.dvalue * (1 + 10 * np.finfo(np.float64).eps)
|
||||
|
||||
|
||||
def test_jackknife():
|
||||
full_data = np.random.normal(1.1, 0.87, 5487)
|
||||
|
||||
my_obs = pe.Obs([full_data], ['test'])
|
||||
|
||||
n = full_data.size
|
||||
mean = np.mean(full_data)
|
||||
tmp_jacks = np.zeros(n + 1)
|
||||
tmp_jacks[0] = mean
|
||||
for i in range(n):
|
||||
tmp_jacks[i + 1] = (n * mean - full_data[i]) / (n - 1)
|
||||
|
||||
assert np.allclose(tmp_jacks, my_obs.export_jackknife())
|
||||
my_new_obs = my_obs + pe.Obs([full_data], ['test2'])
|
||||
with pytest.raises(Exception):
|
||||
my_new_obs.export_jackknife()
|
Loading…
Add table
Add a link
Reference in a new issue