Пример #1
0
    def test_compute_weights(self):
        """Tes compute weights function."""
        # generate random points
        npoint = 50
        points = np.random.uniform(-5, 5, (npoint, 3))

        nums = np.array([1, 2, 3])
        centers = np.array([[1.2, 2.3, 0.1], [-0.4, 0.0, -2.2],
                            [2.2, -1.5, 0.0]])
        becke = BeckeWeights({1: 0.5, 2: 0.8, 3: 5.0}, order=3)
        indices = [0, 13, 29, 50]
        # compute with old generate_weights method
        weights_ref = becke.generate_weights(points,
                                             centers,
                                             nums,
                                             pt_ind=indices)
        # compute with compute_weights
        weights_compute = becke.compute_weights(points,
                                                centers,
                                                nums,
                                                pt_ind=indices)
        assert_allclose(weights_ref, weights_compute)

        # compute with one selected atom weights
        weights_ref2 = becke.generate_weights(points, centers, nums, select=1)
        weights_compute2 = becke.compute_weights(points,
                                                 centers,
                                                 nums,
                                                 select=1)
        assert_allclose(weights_ref2, weights_compute2)
Пример #2
0
    def test_becke_sum3_one(self):
        """Test becke weights add up to one with three centers."""
        npoint = 100
        points = np.random.uniform(-5, 5, (npoint, 3))

        nums = np.array([1, 2, 3])
        centers = np.array([[1.2, 2.3, 0.1], [-0.4, 0.0, -2.2], [2.2, -1.5, 0.0]])
        becke = BeckeWeights({1: 0.5, 2: 0.8, 3: 5.0}, order=3)

        weights0 = becke.generate_weights(points, centers, nums, select=[0])
        weights1 = becke.generate_weights(points, centers, nums, select=[1])
        weights2 = becke.generate_weights(points, centers, nums, select=2)

        assert_allclose(weights0 + weights1 + weights2, np.ones(100))
Пример #3
0
    def test_becke_compute_atom_weight(self):
        """Test becke compute pa function."""
        npoint = 10
        points = np.random.uniform(-5, 5, (npoint, 3))

        nums = np.array([1, 2, 3])
        centers = np.array([[1.2, 2.3, 0.1], [-0.4, 0.0, -2.2], [2.2, -1.5, 0.0]])
        becke = BeckeWeights({1: 0.5, 2: 0.8, 3: 5.0}, order=3)

        weights0 = becke.generate_weights(points, centers, nums, select=[0])
        weights1 = becke.generate_weights(points, centers, nums, select=[1])
        weights2 = becke.generate_weights(points, centers, nums, select=[2])
        aw_0 = becke.compute_atom_weight(points, centers, nums, 0)
        aw_1 = becke.compute_atom_weight(points, centers, nums, 1)
        aw_2 = becke.compute_atom_weight(points, centers, nums, 2)
        assert_allclose(weights0, aw_0)
        assert_allclose(weights1, aw_1)
        assert_allclose(weights2, aw_2)
Пример #4
0
 def test_raise_errors(self):
     """Test errors raise."""
     npoint = 100
     points = np.random.uniform(-5, 5, (npoint, 3))
     nums = np.array([1, 2])
     centers = np.array([[1.2, 2.3, 0.1], [-0.4, 0.0, -2.2]])
     # error of select and pt_ind
     becke = BeckeWeights({1: 0.5, 2: 0.8})
     with self.assertRaises(ValueError):
         becke.generate_weights(points, centers, nums, select=[])
     with self.assertRaises(ValueError):
         becke.generate_weights(points, centers, nums, pt_ind=[3])
     with self.assertRaises(ValueError):
         becke.generate_weights(points, centers, nums, pt_ind=[3, 6])
     with self.assertRaises(ValueError):
         becke.generate_weights(points, centers, nums, select=[], pt_ind=[])
     with self.assertRaises(ValueError):
         becke.generate_weights(points,
                                centers,
                                nums,
                                select=[0, 1],
                                pt_ind=[0, 10, 50, 99])
     with self.assertRaises(ValueError):
         becke.compute_weights(points, centers, nums, select=[])
     with self.assertRaises(ValueError):
         becke.compute_weights(points, centers, nums, pt_ind=[3])
     with self.assertRaises(ValueError):
         becke.compute_weights(points, centers, nums, pt_ind=[3, 6])
     with self.assertRaises(ValueError):
         becke.compute_weights(points, centers, nums, select=[], pt_ind=[])
     with self.assertRaises(ValueError):
         becke.compute_weights(points,
                               centers,
                               nums,
                               select=[0, 1],
                               pt_ind=[0, 10, 50, 99])
     # error of order
     with self.assertRaises(ValueError):
         BeckeWeights({1: 0.5, 2: 0.8}, order=3.0)
     # error of radii
     with self.assertRaises(TypeError):
         BeckeWeights({1.0: 0.5, 2: 0.8}, order=3)
     with self.assertRaises(TypeError):
         BeckeWeights(np.array([0.5, 0.8]), order=3)
Пример #5
0
    def test_becke_special_points(self):
        """Test becke weights for special cases."""
        nums = np.array([1, 2, 3])
        centers = np.array([[1.2, 2.3, 0.1], [-0.4, 0.0, -2.2], [2.2, -1.5, 0.0]])
        becke = BeckeWeights({1: 0.5, 2: 0.8, 3: 5.0}, order=3)

        weights = becke.generate_weights(centers, centers, nums, select=0)
        assert_allclose(weights, [1, 0, 0])

        weights = becke.generate_weights(centers, centers, nums, select=1)
        assert_allclose(weights, [0, 1, 0])

        weights = becke.generate_weights(centers, centers, nums, select=2)
        assert_allclose(weights, [0, 0, 1])

        # each point in seperate sectors.
        weights = becke.generate_weights(centers, centers, nums, pt_ind=[0, 1, 2, 3])
        assert_allclose(weights, [1, 1, 1])

        weights = becke.generate_weights(
            centers, centers, nums, select=[0, 1], pt_ind=[0, 1, 3]
        )
        assert_allclose(weights, [1, 1, 0])

        weights = becke.generate_weights(
            centers, centers, nums, select=[2, 0], pt_ind=[0, 2, 3]
        )
        assert_allclose(weights, [0, 0, 0])
Пример #6
0
    def test_noble_gas_radius(self):
        """Test np.nan value to be handled properly."""
        noble_list = [2, 10, 18, 36, 54, 85, 86]
        for i in noble_list:
            nums = np.array([i, i - 1]) if i != 86 else np.array([i, i - 2])
            centers = np.array([[0.5, 0.0, 0.0], [-0.5, 0.0, 0.0]])
            pts = np.zeros((10, 3), dtype=float)
            pts[:, 1:] += np.random.rand(10, 2)

            becke = BeckeWeights(order=3)
            wts = becke.generate_weights(pts, centers, nums, pt_ind=[0, 5, 10])
            assert_allclose(wts, 0.5)
            wts = becke.compute_weights(pts, centers, nums, pt_ind=[0, 5, 10])
            assert_allclose(wts, 0.5)