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_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_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_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.0]]), 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_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_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): 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_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_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 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)
def setUp(self): self.sample = proposal.Sample(dict(a=1, c=2))