From 2f3ca036795a0373a23a9d6a28f7c4eb632fd415 Mon Sep 17 00:00:00 2001 From: MoritzThomasHuebner <email@moritz-huebner.de> Date: Fri, 7 Sep 2018 17:26:29 +1000 Subject: [PATCH] Added tests for the JointLikelihood --- test/likelihood_tests.py | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/test/likelihood_tests.py b/test/likelihood_tests.py index a3d6da004..568832710 100644 --- a/test/likelihood_tests.py +++ b/test/likelihood_tests.py @@ -99,6 +99,7 @@ class TestAnalytical1DLikelihood(unittest.TestCase): def test_set_func(self): def new_func(x): return x + with self.assertRaises(AttributeError): # noinspection PyPropertyAccess self.analytical_1d_likelihood.func = new_func @@ -443,5 +444,81 @@ class TestExponentialLikelihood(unittest.TestCase): self.assertEqual(-3, exponential_likelihood.log_likelihood()) +class TestJointLikelihood(unittest.TestCase): + + def setUp(self): + self.x = np.array([1, 2, 3]) + self.y = np.array([1, 2, 3]) + self.first_likelihood = tupak.core.likelihood.GaussianLikelihood( + x=self.x, + y=self.y, + func=lambda x, param1, param2: (param1 + param2) * x, + sigma=1) + self.second_likelihood = tupak.core.likelihood.PoissonLikelihood( + x=self.x, + y=self.y, + func=lambda x, param2, param3: (param2 + param3) * x) + self.third_likelihood = tupak.core.likelihood.ExponentialLikelihood( + x=self.x, + y=self.y, + func=lambda x, param4, param5: (param4 + param5) * x + ) + self.joint_likelihood = tupak.core.likelihood.JointLikelihood(self.first_likelihood, + self.second_likelihood, + self.third_likelihood) + + self.first_likelihood.parameters['param1'] = 1 + self.first_likelihood.parameters['param2'] = 2 + self.second_likelihood.parameters['param2'] = 2 + self.second_likelihood.parameters['param3'] = 3 + self.third_likelihood.parameters['param4'] = 4 + self.third_likelihood.parameters['param5'] = 5 + + self.joint_likelihood.parameters['param1'] = 1 + self.joint_likelihood.parameters['param2'] = 2 + self.joint_likelihood.parameters['param3'] = 3 + self.joint_likelihood.parameters['param4'] = 4 + self.joint_likelihood.parameters['param5'] = 5 + + def tearDown(self): + del self.x + del self.y + del self.first_likelihood + del self.second_likelihood + del self.third_likelihood + del self.joint_likelihood + + def test_parameters_consistent_from_init(self): + expected = dict(param1=1, param2=2, param3=3, param4=4, param5=5, ) + self.assertDictEqual(expected, self.joint_likelihood.parameters) + + def test_log_likelihood_correctly_sums(self): + expected = self.first_likelihood.log_likelihood() + \ + self.second_likelihood.log_likelihood() + \ + self.third_likelihood.log_likelihood() + self.assertEqual(expected, self.joint_likelihood.log_likelihood()) + + def test_log_likelihood_checks_parameter_updates(self): + self.first_likelihood.parameters['param2'] = 7 + self.second_likelihood.parameters['param2'] = 7 + self.joint_likelihood.parameters['param2'] = 7 + expected = self.first_likelihood.log_likelihood() + \ + self.second_likelihood.log_likelihood() + \ + self.third_likelihood.log_likelihood() + self.assertEqual(expected, self.joint_likelihood.log_likelihood()) + + def test_log_noise_likelihood(self): + self.first_likelihood.noise_log_likelihood = MagicMock(return_value=1) + self.second_likelihood.noise_log_likelihood = MagicMock(return_value=2) + self.third_likelihood.noise_log_likelihood = MagicMock(return_value=3) + self.joint_likelihood = tupak.core.likelihood.JointLikelihood(self.first_likelihood, + self.second_likelihood, + self.third_likelihood) + expected = self.first_likelihood.noise_log_likelihood() + \ + self.second_likelihood.noise_log_likelihood() + \ + self.third_likelihood.noise_log_likelihood() + self.assertEqual(expected, self.joint_likelihood.noise_log_likelihood()) + + if __name__ == '__main__': unittest.main() -- GitLab