예제 #1
0
    def test_should_reject_impossible_move(self):
        # setup
        start = np.array([[0., 0., -1.], [0., 2., -1.], [0., 0., -2.],
                          [1., 0., -1.], [0., 0., .0], [-1., 0., -1.]])

        end = np.array([[0., 0., -1.], [0., 2., -1.], [0., 0., -2.],
                        [1., 0., -1.], [0., 0., .0], [-1., 0., -1.]])

        state = meld.system.SystemState(start, np.zeros_like(start), 0., 0.,
                                        np.zeros(3))
        mock_runner = mock.Mock()
        mock_runner.get_energy.return_value = 1000.

        mover = mc.RandomTorsionMover(0, 1, [4, 5])

        # exercise
        with mock.patch('meld.system.montecarlo.generate_uniform_angle'
                        ) as mock_gen_angle:
            mock_gen_angle.return_value = 90.
            new_state, accepted = mover.trial(state, mock_runner)

        # assert
        self.assertEqual(new_state.energy, 0.0)
        self.assertEqual(accepted, False)
        np.testing.assert_array_almost_equal(new_state.positions, end)
예제 #2
0
    def test_should_reject_impossible_move(self):
        # setup
        start = np.array([
            [0.0, 0.0, -1.0],
            [0.0, 2.0, -1.0],
            [0.0, 0.0, -2.0],
            [1.0, 0.0, -1.0],
            [0.0, 0.0, 0.0],
            [-1.0, 0.0, -1.0],
        ])

        end = np.array([
            [0.0, 0.0, -1.0],
            [0.0, 2.0, -1.0],
            [0.0, 0.0, -2.0],
            [1.0, 0.0, -1.0],
            [0.0, 0.0, 0.0],
            [-1.0, 0.0, -1.0],
        ])

        state = SystemState(start, np.zeros_like(start), 0.0, 0.0, np.zeros(3))
        mock_runner = mock.Mock()
        mock_runner.get_energy.return_value = 1000.0

        mover = mc.RandomTorsionMover(
            AtomIndex(0), AtomIndex(1),
            [AtomIndex(4), AtomIndex(5)])

        # exercise
        with mock.patch("meld.system.montecarlo._generate_uniform_angle"
                        ) as mock_gen_angle:
            mock_gen_angle.return_value = 90.0
            new_state, accepted = mover.trial(state, mock_runner)

        # assert
        self.assertEqual(new_state.energy, 0.0)
        self.assertEqual(accepted, False)
        np.testing.assert_array_almost_equal(new_state.positions, end)