def test_sample(self): # use the PMCABC scheme for T = 1 T, n_sample, n_simulate, eps_arr, eps_percentile = 1, 10, 1, [10], 10 sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) journal = sampler.sample([self.observation], T, eps_arr, n_sample, n_simulate, eps_percentile) mu_post_sample, sigma_post_sample, post_weights = np.array( journal.get_parameters()['mu']), np.array( journal.get_parameters()['sigma']), np.array( journal.get_weights()) # Compute posterior mean mu_post_mean, sigma_post_mean = np.average(mu_post_sample, weights=post_weights, axis=0), np.average( sigma_post_sample, weights=post_weights, axis=0) # test shape of sample mu_sample_shape, sigma_sample_shape, weights_sample_shape = np.shape( mu_post_sample), np.shape(mu_post_sample), np.shape(post_weights) self.assertEqual(mu_sample_shape, (10, 1)) self.assertEqual(sigma_sample_shape, (10, 1)) self.assertEqual(weights_sample_shape, (10, 1)) self.assertLess(mu_post_mean - 0.03713, 10e-2) self.assertLess(sigma_post_mean - 7.727, 10e-2) #self.assertEqual((mu_post_mean, sigma_post_mean), (,)) # use the PMCABC scheme for T = 2 T, n_sample, n_simulate, eps_arr, eps_percentile = 2, 10, 1, [10, 5], 10 sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) sampler.sample_from_prior(rng=np.random.RandomState(1)) journal = sampler.sample([self.observation], T, eps_arr, n_sample, n_simulate, eps_percentile) mu_post_sample, sigma_post_sample, post_weights = np.array( journal.get_parameters()['mu']), np.array( journal.get_parameters()['sigma']), np.array( journal.get_weights()) # Compute posterior mean mu_post_mean, sigma_post_mean = np.average(mu_post_sample, weights=post_weights, axis=0), np.average( sigma_post_sample, weights=post_weights, axis=0) # test shape of sample mu_sample_shape, sigma_sample_shape, weights_sample_shape = np.shape( mu_post_sample), np.shape(mu_post_sample), np.shape(post_weights) self.assertEqual(mu_sample_shape, (10, 1)) self.assertEqual(sigma_sample_shape, (10, 1)) self.assertEqual(weights_sample_shape, (10, 1)) self.assertLess(mu_post_mean - 0.9356, 10e-2) self.assertLess(sigma_post_mean - 7.819, 10e-2) self.assertFalse(journal.number_of_simulations == 0)
def test_restart_from_journal(self): # test with value of eps_arr_2 > percentile of distances n_sample, n_simulate, eps_arr, eps_percentile = 10, 1, [10, 5], 10 # 2 steps with intermediate journal: sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) sampler.sample_from_prior(rng=np.random.RandomState(1)) journal_intermediate = sampler.sample([self.observation], 1, [eps_arr[0]], n_sample, n_simulate, eps_percentile) journal_intermediate.save("tmp.jnl") journal_final_1 = sampler.sample([self.observation], 1, [eps_arr[1]], n_sample, n_simulate, eps_percentile, journal_file="tmp.jnl") # 2 steps directly sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) sampler.sample_from_prior(rng=np.random.RandomState(1)) journal_final_2 = sampler.sample([self.observation], 2, eps_arr, n_sample, n_simulate, eps_percentile) self.assertEqual(journal_final_1.configuration["epsilon_arr"], journal_final_2.configuration["epsilon_arr"]) self.assertEqual(journal_final_1.posterior_mean()['mu'], journal_final_2.posterior_mean()['mu']) # test with value of eps_arr_2 < percentile of distances n_sample, n_simulate, eps_arr, eps_percentile = 10, 1, [10, 1], 10 # 2 steps with intermediate journal: sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) sampler.sample_from_prior(rng=np.random.RandomState(1)) journal_intermediate = sampler.sample([self.observation], 1, [eps_arr[0]], n_sample, n_simulate, eps_percentile) journal_intermediate.save("tmp.jnl") journal_final_1 = sampler.sample([self.observation], 1, [eps_arr[1]], n_sample, n_simulate, eps_percentile, journal_file="tmp.jnl") # 2 steps directly sampler = PMCABC([self.model], [self.dist_calc], self.backend, seed=1) sampler.sample_from_prior(rng=np.random.RandomState(1)) journal_final_2 = sampler.sample([self.observation], 2, eps_arr, n_sample, n_simulate, eps_percentile) self.assertEqual(journal_final_1.configuration["epsilon_arr"], journal_final_2.configuration["epsilon_arr"]) self.assertEqual(journal_final_1.posterior_mean()['mu'], journal_final_2.posterior_mean()['mu'])