def test_jump_proposal_call(self): with mock.patch("numpy.random.normal") as m: m.return_value = 0.5 sample = proposal.Sample(dict(reflective=0.0, periodic=0.0, default=0.0)) new_sample = self.jump_proposal(sample) expected = proposal.Sample(dict(reflective=0.5, periodic=0.5, default=0.5)) self.assertDictEqual(expected, new_sample)
def test_jump_proposal_call_case_2(self): with mock.patch('random.random') as m: m.return_value = 0.7 sample = proposal.Sample(dict(phase=0.2, psi=0.5)) alpha = 0.7 beta = 3.0 * np.pi * 0.7 - 2 * np.pi expected = proposal.Sample(dict(phase=0.5*(alpha-beta), psi=0.5*(alpha+beta))) self.assertEqual(expected, self.jump_proposal(sample))
def test_jump_proposal_update_eigenvectors_1_d(self): coordinates = [proposal.Sample(dict(periodic=0.3)), proposal.Sample(dict(periodic=0.1))] with mock.patch('numpy.var') as m: m.return_value = 1 self.jump_proposal.update_eigenvectors(coordinates) self.assertTrue(np.equal(np.array([1]), self.jump_proposal.eigen_values)) self.assertTrue(np.equal(np.array([1]), self.jump_proposal.covariance)) self.assertTrue(np.equal(np.array([[1.]]), self.jump_proposal.eigen_vectors))
def test_jump_proposal_call_with_inverse_temperature(self): with mock.patch("random.gauss") as m: m.return_value = 1 sample = proposal.Sample(dict(ra=0.2, dec=-0.5)) expected = proposal.Sample(dict(ra=1.2, dec=0.5)) new_sample = self.jump_proposal(sample, inverse_temperature=2.0) for key, value in new_sample.items(): self.assertAlmostEqual(expected[key], value) m.assert_called_with(0, np.sqrt(1 / 2.0) / 2 / np.pi)
def test_jump_proposal_call_case_1(self): with mock.patch("random.random") as m: m.return_value = 0.3 sample = proposal.Sample(dict(phase=0.2, psi=0.5)) alpha = 3.0 * np.pi * 0.3 beta = 0.3 expected = proposal.Sample( dict(phase=0.5 * (alpha - beta), psi=0.5 * (alpha + beta))) self.assertEqual(expected, self.jump_proposal(sample, coordinates=None))
def test_jump_proposal_call(self): with mock.patch('random.sample') as m: self.jump_proposal.random_number_generator = lambda: 2 m.return_value = [proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3)), proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1))] sample = proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1)) new_sample = self.jump_proposal(sample, coordinates=None) expected = proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1)) for key, value in new_sample.items(): self.assertAlmostEqual(expected[key], value)
def test_get_center_of_mass(self): samples = [ proposal.Sample( dict(reflective=0.1 * i, periodic=0.1 * i, default=0.1 * i)) for i in range(3) ] expected = proposal.Sample( dict(reflective=0.1, periodic=0.1, default=0.1)) actual = self.jump_proposal.get_center_of_mass(samples) for key in samples[0].keys(): self.assertAlmostEqual(expected[key], actual[key])
def test_jump_proposal_update_eigenvectors_n_d(self): coordinates = [proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3)), proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1))] with mock.patch('numpy.cov') as m: with mock.patch('numpy.linalg.eigh') as n: m.side_effect = lambda x: x n.return_value = 1, 2 self.jump_proposal.update_eigenvectors(coordinates) self.assertTrue(np.array_equal(np.array([[0.3, 0.1], [0.3, 0.1], [0.3, 0.1]]), self.jump_proposal.covariance)) self.assertEqual(1, self.jump_proposal.eigen_values) self.assertEqual(2, self.jump_proposal.eigen_vectors)
def test_jump_proposal_call(self): with mock.patch('random.sample') as m: with mock.patch('random.gauss') as n: m.return_value = proposal.Sample(dict(periodic=0.2, reflective=0.2, default=0.2)),\ proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3)) n.return_value = 1 sample = proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1)) expected = proposal.Sample(dict(periodic=0.2, reflective=0.2, default=0.2)) new_sample = self.jump_proposal(sample, coordinates=None) for key, value in new_sample.items(): self.assertAlmostEqual(expected[key], value)
def test_log_j_after_call(self): with mock.patch('random.uniform') as m1: with mock.patch('numpy.log') as m2: with mock.patch('numpy.exp') as m3: m1.return_value = 1 m2.return_value = 1 m3.return_value = 1 coordinates = [proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3)), proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3))] sample = proposal.Sample(dict(periodic=0.2, reflective=0.2, default=0.2)) self.jump_proposal(sample=sample, coordinates=coordinates) self.assertEqual(3, self.jump_proposal.log_j)
def test_jump_proposal_call(self): with mock.patch('random.choice') as m: with mock.patch('random.uniform') as n: second_sample = proposal.Sample(dict(periodic=0.3, reflective=0.3, default=0.3)) random_number = 0.5 m.return_value = second_sample n.return_value = random_number sample = proposal.Sample(dict(periodic=0.1, reflective=0.1, default=0.1)) new_sample = self.jump_proposal(sample, coordinates=None) coords = 0.3 - 0.2 * np.exp(random_number * np.log(self.jump_proposal.scale)) expected = proposal.Sample(dict(periodic=coords, reflective=coords, default=coords)) for key, value in new_sample.items(): self.assertAlmostEqual(expected[key], value)
def test_jump_proposal_call(self): self.jump_proposal.update_eigenvectors = lambda x: None self.jump_proposal.eigen_values = np.array([1, np.nan, np.nan]) self.jump_proposal.eigen_vectors = np.array([[0.1, np.nan, np.nan], [0.4, np.nan, np.nan], [0.7, np.nan, np.nan]]) with mock.patch("random.randrange") as m: with mock.patch("random.gauss") as n: m.return_value = 0 n.return_value = 1 expected = proposal.Sample() expected["periodic"] = 0.2 expected["reflective"] = 0.5 expected["default"] = 0.8 sample = proposal.Sample() sample["periodic"] = 0.1 sample["reflective"] = 0.1 sample["default"] = 0.1 new_sample = self.jump_proposal(sample, coordinates=None) for key, value in new_sample.items(): self.assertAlmostEqual(expected[key], value)
def test_multiply_sample(self): other = 2 expected = proposal.Sample(dict(a=2, c=4)) self.assertDictEqual(expected, self.sample * other)
def test_subtract_sample(self): other = proposal.Sample(dict(a=2, c=5)) expected = proposal.Sample(dict(a=-1, c=-3)) self.assertDictEqual(expected, self.sample - other)
def setUp(self): self.sample = proposal.Sample(dict(a=1, c=2))
def test_jump_proposal_call(self): sample = proposal.Sample(dict(phase=0.2, psi=0.5)) expected = proposal.Sample(dict(phase=0.2 + np.pi, psi=0.5 + np.pi / 2)) self.assertEqual(expected, self.jump_proposal(sample))
def test_jump_proposal_call(self): with mock.patch("bilby.core.prior.Uniform.sample") as m: m.return_value = 0.3 sample = proposal.Sample(dict(phase=0.2, psi=0.5)) expected = proposal.Sample(dict(phase=0.3, psi=0.3)) self.assertEqual(expected, self.jump_proposal(sample))
def test_add_sample(self): other = proposal.Sample(dict(a=2, c=5)) expected = proposal.Sample(dict(a=3, c=7)) self.assertDictEqual(expected, self.sample + other)