def test_find_triangle_critical_pt(self): """Test three atom ring critical pts.""" atoms = np.array([[-2, -2, 0], [2, -2, 0], [0, 1, 0]]) alf = 1 def fun_v(coors): return (self.gauss_func(coors, atoms[0], alphas=alf) + self.gauss_func(coors, atoms[1], alphas=alf) + self.gauss_func(coors, atoms[2], alphas=alf)) def fun_d(coors): return (self.gauss_deriv(coors, atoms[0], alphas=alf) + self.gauss_deriv(coors, atoms[1], alphas=alf) + self.gauss_deriv(coors, atoms[2], alphas=alf)) def fun_d2(coors): return (self.gauss_deriv2(coors, atoms[0], alphas=alf) + self.gauss_deriv2(coors, atoms[1], alphas=alf) + self.gauss_deriv2(coors, atoms[2], alphas=alf)) tp_ins = Topo(atoms, fun_v, fun_d, fun_d2, extra=1) tp_ins.find_critical_pts() assert len(tp_ins._crit_bond) == 3 assert len(tp_ins._crit_ring) == 1 assert len(tp_ins._crit_max) == 0 assert len(tp_ins._crit_cage) == 0
def test_is_coors_pt(self): """Test same pts as nuclear position.""" coors = np.array([[1, 1, 1], [-1, -1, -1]]) pts = np.random.rand(4, 3) topo = Topo(coors, self.gauss_func, self.gauss_deriv, self.gauss_deriv2, pts) for i in coors: result = topo._is_coors_pt(i) assert result pt = (np.random.rand(4, 3) + 0.1) / 2 for i in pt: result = topo._is_coors_pt(i) assert not result
def test_get_gradietn(self): """Test get proper gradient.""" # initiate topo obj. coors = np.array([[1, 1, 1], [-1, -1, -1]]) pts = np.random.rand(4, 3) topo = Topo(coors, self.gauss_func, self.gauss_deriv, self.gauss_deriv2, pts) # get cage points pts = Topo._construct_cage(np.array([0.5, 0.5, 0.5]), 0.1) g_pts = topo.get_gradient(pts) # assert len(g_pts) == 4 ref_g = self.gauss_deriv(pts) assert_allclose(ref_g, g_pts)
def test_topo(self): """Test properly initiate topo instance.""" coors = np.array([[1, 1, 1], [-1, -1, -1]]) pts = np.random.rand(4, 3) topo = Topo(coors, self.gauss_func, self.gauss_deriv, self.gauss_deriv2, pts) assert isinstance(topo, Topo)
def test_add_critical_points(self): """Test add critical points to class.""" coors = np.array([[1, 1, 1], [-1, -1, -1]]) pts = np.random.rand(4, 3) topo = Topo(coors, self.gauss_func, self.gauss_deriv, self.gauss_deriv2, pts) pt = CriticalPoint(np.random.rand(3), None, None) # bond ct_type = -1 topo._add_critical_point(pt, ct_type) assert_allclose(topo._crit_bond[0].point, pt.point, atol=1e-10) # maxima ct_type = -3 topo._add_critical_point(pt, ct_type) assert_allclose(topo._crit_max[0].point, pt.point, atol=1e-10) # ring ct_type = 1 topo._add_critical_point(pt, ct_type) assert_allclose(topo._crit_ring[0].point, pt.point, atol=1e-10) # cage ct_type = 3 topo._add_critical_point(pt, ct_type) assert_allclose(topo._crit_cage[0].point, pt.point, atol=1e-10)
def test_find_one_critical_pt(self): """Test two atoms critical pts.""" atoms = np.array([[-2, -2, -2], [2, 2, 2]]) alf = 0.3 def fun_v(coors): """Generate value function.""" return self.gauss_func(coors, atoms[0], alphas=alf) + self.gauss_func( coors, atoms[1], alphas=alf) def fun_d(coors): """Generate 1st order deriv function.""" return self.gauss_deriv(coors, atoms[0], alphas=alf) + self.gauss_deriv( coors, atoms[1], alphas=alf) def fun_d2(coors): """Generate 2nd order deriv function.""" return self.gauss_deriv2(coors, atoms[0], alphas=alf) + self.gauss_deriv2( coors, atoms[1], alphas=alf) pts = np.random.rand(20, 3) * 0.5 pts = np.vstack((pts, np.array([0.05, 0.05, 0.05]), np.array([-0.05, -0.05, -0.05]))) tp_ins = Topo(atoms, fun_v, fun_d, fun_d2, pts) tp_ins.find_critical_pts() # one critical pt assert len(tp_ins._found_ct) == 1 assert len(tp_ins._crit_bond) == 1 # one critical type bond assert tp_ins._found_ct_type[0] == -1 # one critical point at origin assert_allclose(tp_ins._found_ct[0], [0, 0, 0], atol=1e-10)
def test_construct_cage(self): """Test construct cage among target points.""" pts = Topo._construct_cage(np.array([0, 0, 0]), 1) assert len(pts) == 4 dis = np.linalg.norm(pts[:] - np.array([0, 0, 0]), axis=-1) assert_allclose(dis, np.ones(4) * 4.89898, rtol=1e-5)
def test_default_cube(self): """Test default cube for points.""" coors = np.array([[1, 1, 1], [-1, -1, -1]]) topo = Topo(coors, self.gauss_func, self.gauss_deriv, self.gauss_deriv2) assert topo._kdtree.data.shape == (60 * 60 * 60, 3)