diff --git a/test/likelihood_tests.py b/test/likelihood_tests.py index a3d6da004a6b6690332c957acee07256c6b3d67b..5688327100da4fe171e9920d537dcacbb332a725 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()