From 2ba4e747601037cd8d378a79fc80150e30c6455c Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Fri, 12 Nov 2021 14:46:45 +0000 Subject: [PATCH 1/2] tests for gamma method kwargs added --- tests/{pyerrors_test.py => obs_test.py} | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) rename tests/{pyerrors_test.py => obs_test.py} (89%) diff --git a/tests/pyerrors_test.py b/tests/obs_test.py similarity index 89% rename from tests/pyerrors_test.py rename to tests/obs_test.py index 8f2ca2bd..f0c63ac7 100644 --- a/tests/pyerrors_test.py +++ b/tests/obs_test.py @@ -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)) From db94a49d76539033e23f147d13c73153a5eb71ad Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Fri, 12 Nov 2021 15:13:50 +0000 Subject: [PATCH 2/2] added special case for tau_exp error analysis and less than 8 samples --- pyerrors/obs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyerrors/obs.py b/pyerrors/obs.py index 2b4398cf..ed3c23a2 100644 --- a/pyerrors/obs.py +++ b/pyerrors/obs.py @@ -264,6 +264,8 @@ class Obs: # if type(self.idl[e_name]) is range: # scale tau_exp according to step size # texp /= self.idl[e_name].step # Critical slowing down analysis + if w_max // 2 <= 1: + raise Exception("Need at least 8 samples for tau_exp error analysis") for n in range(1, w_max // 2): _compute_drho(n + 1) if (self.e_rho[e_name][n] - self.N_sigma[e_name] * self.e_drho[e_name][n]) < 0 or n >= w_max // 2 - 2: