def test_hpe_likelihood_log_likelihood_equal_ratio_zero_evidence(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, ln_evidences=self.ln_evidences) like.parameters.update(self.params) self.assertEqual(like.log_likelihood_ratio(), like.log_likelihood())
def test_hpe_likelihood_set_selection(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, ) self.assertEqual(like.selection_function("foo"), 2.0)
def test_hpe_likelihood_set_conversion(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, conversion_function=self.conversion_function, ) self.assertEqual(like.conversion_function("foo"), ("foo", ["bar"]))
def test_generate_rate_posterior_sample_returns_positive(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, ln_evidences=self.ln_evidences, ) self.assertGreater(like.generate_rate_posterior_sample(), 0)
def test_generate_rate_posterior_sample_raises_error(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, ln_evidences=self.ln_evidences, ) with self.assertRaises(NotImplementedError): like.generate_rate_posterior_sample()
def test_hpe_likelihood_conversion_function_pops_parameters(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, conversion_function=self.conversion_function, selection_function=self.selection_function, ln_evidences=self.ln_evidences) self.params['bar'] = None like.parameters.update(self.params) like.log_likelihood_ratio() self.assertFalse('bar' in like.parameters)
def test_resampling_posteriors(self): priors = PriorDict( dict(a=Uniform(0, 2), b=Uniform(0, 2), c=Uniform(0, 2))) samples = priors.sample(100) like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, ln_evidences=self.ln_evidences, ) new_samples = like.posterior_predictive_resample(samples=samples) for key in new_samples: self.assertEqual(new_samples[key].shape, like.data[key].shape)
def test_likelihood_pass_sampling_prior_raises_error(self): with self.assertRaises(TypeError): _ = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, sampling_prior=lambda dataset: 5, )
def test_prior_in_posteriors(self): for frame in self.data: frame["prior"] = 1 like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model) self.assertTrue( xp.array_equal(like.sampling_prior, xp.ones_like(like.data["a"])))
def test_generate_extra_statistics(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, selection_function=self.selection_function, conversion_function=self.conversion_function, ln_evidences=self.ln_evidences, ) self.params["bar"] = None new_params = like.generate_extra_statistics(sample=self.params.copy()) expected = { "a": 1, "b": 1, "c": 1, "ln_bf_0": 0.0, "ln_bf_1": 0.0, "ln_bf_2": 0.0, "ln_bf_3": 0.0, "ln_bf_4": 0.0, "selection": 2.0, "bar": None, } self.assertDictEqual(expected, new_params)
def test_hpe_likelihood_dont_set_evidences(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model) self.assertTrue(xp.isnan(like.total_noise_evidence))
def test_hpe_likelihood_set_evidences(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model, ln_evidences=self.ln_evidences) self.assertEqual(like.total_noise_evidence, 0)
def test_not_passing_prior(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model) self.assertEqual(like.sampling_prior, 1)
def test_likelihood_pass_sampling_prior_works(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, sampling_prior=lambda x: 5) self.assertEqual(like.sampling_prior, 5)
def test_hpe_likelihood_log_likelihood_ratio(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model) like.parameters.update(self.params) self.assertEqual(like.log_likelihood_ratio(), 0.0)
def test_hpe_likelihood_set_conversion(self): like = HyperparameterLikelihood( posteriors=self.data, hyper_prior=self.model, conversion_function=self.conversion_function) self.assertEqual(like.conversion_function('foo'), ('foo', ['bar']))
def test_hpe_likelihood_converts_nan_to_neginf(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model) like._get_selection_factor = lambda *args, **kwargs: np.nan like.parameters.update(self.params) self.assertEqual(like.log_likelihood_ratio(), np.nan_to_num(-np.inf))
def test_hpe_likelihood_set_max_samples(self): like = HyperparameterLikelihood(posteriors=self.data, hyper_prior=self.model, max_samples=10) self.assertEqual(like.data["a"].shape, (5, 10))
def test_hpe_likelihood_requires_posteriors(self): with self.assertRaises(TypeError): _ = HyperparameterLikelihood(hyper_prior=self.model)
def get_agn_spin_likelihood(posteriors): return HyperparameterLikelihood( posteriors=posteriors, hyper_prior=agn_spin )
def test_hpe_likelihood_requires_hyper_prior(self): with self.assertRaises(TypeError): _ = HyperparameterLikelihood(posteriors=self.data)