def test_with_cov(self): simdict = Simulations() meadict = Measurements() covdict = Covariances() # mock measurements arr_a = np.random.rand(1, 4*mpisize) comm.Bcast(arr_a, root=0) mea = Observable(arr_a, 'measured') meadict.append(name=('test', None, 4*mpisize, None), data=mea, otype='plain') # mock sims arr_b = np.random.rand(5, 4*mpisize) sim = Observable(arr_b, 'simulated') simdict.append(name=('test', None, 4*mpisize, None), data=sim, otype='plain') # mock covariance arr_c = np.random.rand(4, 4*mpisize) cov = Observable(arr_c, 'covariance') covdict.append(name=('test', None, 4*mpisize, None), cov_data=cov) # with covariance lh = SimpleLikelihood(meadict, covdict) # calc by likelihood rslt = lh(simdict) # feed variable value, not parameter value # calc by hand full_b = np.vstack(comm.allgather(arr_b)) # global arr_b diff = (np.mean(full_b, axis=0) - arr_a) full_cov = np.vstack(comm.allgather(arr_c)) # global covariance (sign, logdet) = np.linalg.slogdet(full_cov*2.*np.pi) baseline = -0.5*(np.vdot(diff, np.linalg.solve(full_cov, diff.T))+sign*logdet) assert np.allclose(rslt, baseline)
def test_without_simcov(self): simdict = Simulations() meadict = Measurements() covdict = Covariances() # mock measurements arr_a = np.random.rand(1, 4*mpisize) comm.Bcast(arr_a, root=0) mea = Observable(arr_a, 'measured') meadict.append(name=('test', None, 4*mpisize, None), data=mea, otype='plain') # mock covariance arr_c = np.random.rand(4, 4*mpisize) cov = Observable(arr_c, 'covariance') covdict.append(name=('test', None, 4*mpisize, None), cov_data=cov) # mock observable with repeated single realisation arr_b = np.random.rand(1, 4*mpisize) comm.Bcast(arr_b, root=0) arr_ens = np.zeros((2, 4*mpisize)) for i in range(len(arr_ens)): arr_ens[i] = arr_b sim = Observable(arr_ens, 'simulated') simdict.append(name=('test', None, 4*mpisize, None), data=sim, otype='plain') # simplelikelihood lh_simple = SimpleLikelihood(meadict, covdict) rslt_simple = lh_simple(simdict) # ensemblelikelihood lh_ensemble = EnsembleLikelihood(meadict, covdict) rslt_ensemble = lh_ensemble(simdict) assert rslt_ensemble == rslt_simple
def test_diag(self): simdict = Simulations() meadict = Measurements() covdict = Covariances() # mock measurements arr_a = np.random.rand(1, 40) mea = Observable(arr_a, 'measured') meadict.append(name=('test', None, 40, None), data=mea, otype='plain') # mock (diagonal) covariance arr_var = np.random.rand(40) cov = Observable(np.diag(arr_var), 'covariance') covdict.append(name=('test', None, 40, None), cov_data=cov) # mock observable arr_ens = np.random.rand(10, 40) sim = Observable(arr_ens, 'simulated') simdict.append(name=('test', None, 40, None), data=sim, otype='plain') # ensemblelikelihood + diagonal_covcov lh_ens = EnsembleLikelihood(meadict, covdict, cov_func=diagonal_mcov) result_ens = lh_ens(simdict) # EnsembleLikelihoodDiagonal lh_diag = EnsembleLikelihoodDiagonal(meadict, covdict) result_diag = lh_diag(simdict) assert np.allclose(result_diag, result_ens)
def test_with_trace_approximation(self): simdict = Simulations() meadict = Measurements() covdict = Covariances() # mock measurements arr_a = np.random.rand(1, 4*mpisize) comm.Bcast(arr_a, root=0) mea = Observable(arr_a, 'measured') meadict.append(name=('test', None, 4*mpisize, None), data=mea, otype='plain') # mock covariance (NB for the trace approximation to work, the data # covariance needs to be diagonal) arr_c = np.diag(np.random.rand(4)) cov = Observable(arr_c, 'covariance') covdict.append(name=('test', None, 4*mpisize, None), cov_data=cov) # mock observable with repeated single realisation arr_b = np.random.rand(1, 4*mpisize) comm.Bcast(arr_b, root=0) arr_ens = np.zeros((2, 4*mpisize)) for i in range(len(arr_ens)): arr_ens[i] = arr_b sim = Observable(arr_ens, 'simulated') simdict.append(name=('test', None, 4*mpisize, None), data=sim, otype='plain') # simplelikelihood lh_simple = SimpleLikelihood(meadict, covdict) result_simple = lh_simple(simdict) # ensemblelikelihood lh_ensemble = EnsembleLikelihood(meadict, covdict, use_trace_approximation=True) result_ensemble = lh_ensemble(simdict) assert result_ensemble == result_simple
def test_covdict_apply_mask(self): msk = np.random.randint(0, 2, 2 * mpisize).reshape(1, -1) mskdict = Masks() comm.Bcast(msk, root=0) mskdict.append(name=('test', None, 2 * mpisize, None), data=msk, otype='plain') cov = np.random.rand(2, 2 * mpisize) covdict = Covariances() covdict.append(name=('test', None, 2 * mpisize, None), cov_data=cov) covdict = mskdict(covdict) pix_num = msk.sum() assert ('test', None, pix_num, None) in covdict.keys()
def test_covdict_append_observable(self): cov = Observable(np.random.rand(2, 2 * mpisize), 'covariance') covdict = Covariances() covdict.append(name=('test', None, 2 * mpisize, None), cov_data=cov) # plain covariance assert np.allclose(covdict[('test', None, 2 * mpisize, None)].data, cov.data) cov = Observable(np.random.rand(12 * mpisize, 12 * mpisize * mpisize), 'covariance') covdict.append(name=('test', None, mpisize, None), cov_data=cov) # healpix covariance assert np.allclose(covdict[('test', None, mpisize, None)].data, cov.data)
def test_covdict_append_array(self): cov = np.random.rand(2, 2 * mpisize) covdict = Covariances() covdict.append(name=('test', None, 2 * mpisize, None), cov_data=cov) # plain covariance assert covdict[('test', None, 2 * mpisize, None)].shape == (2 * mpisize, 2 * mpisize) assert np.allclose(covdict[('test', None, 2 * mpisize, None)].data, cov) cov = np.random.rand(12 * mpisize, 12 * mpisize * mpisize) covdict.append(name=('test', None, mpisize, None), cov_data=cov) # healpix covariance assert covdict[('test', None, mpisize, None)].shape == (12 * mpisize * mpisize, 12 * mpisize * mpisize) assert np.allclose(covdict[('test', None, mpisize, None)].data, cov)