def test_symmetry_moments(): coordinates, numbers, links, cell, symmetry = get_fake_example() # setup rotated multipole moments m0 = get_pentagon_moments() m00 = m0.copy() m01 = rotate_cartesian_moments_all(symmetry.generators[1][:,:3], m0) m1 = get_pentagon_moments(get_random_rotation()) # perturb them in a controlled way m00[0] += 0.1 m01[0] -= 0.1 m00[1] += 0.1 m01[2] -= 0.1 # run analysis aim_results = { 'cartesian_multipoles': np.array([m00, m01, m1]), } sym_results = symmetry_analysis(coordinates, cell, symmetry, aim_results) # check results assert len(sym_results) == 1 stats = sym_results['cartesian_multipoles'] assert abs(stats[:,0] - [m0, m1]).max() < 1e-10 assert abs(stats[1,1]).max() < 1e-10 assert abs(stats[0,1,:2] - np.std([-0.1, 0.1])).max() < 1e-10 assert abs(stats[0,1,2:]).max() < 1e-10
def test_rotate_cartesian_moments_general(): for i in xrange(10): rmat = get_rotation_matrix(np.array([1,1,1]), 2.0*np.pi/3) m0 = get_pentagon_moments() m1 = get_pentagon_moments(rmat) m2 = rotate_cartesian_moments(m0, rmat) assert abs(m1 - m2).max() < 1e-10
def test_rotate_cartesian_moments_pentagon_general(): for i in xrange(10): rmat = get_random_rotation() m0 = get_pentagon_moments() m1 = get_pentagon_moments(rmat) m2 = rotate_cartesian_moments_all(rmat, m0) assert abs(m1 - m2).max() < 1e-10
def test_symmetry_moments(): coordinates, numbers, links, cell, symmetry = get_fake_example() # setup rotated multipole moments m0 = get_pentagon_moments() m00 = m0.copy() m01 = rotate_cartesian_moments_all(symmetry.generators[1][:, :3], m0) m1 = get_pentagon_moments(get_random_rotation()) # perturb them in a controlled way m00[0] += 0.1 m01[0] -= 0.1 m00[1] += 0.1 m01[2] -= 0.1 # run analysis aim_results = { 'cartesian_multipoles': np.array([m00, m01, m1]), } sym_results = symmetry_analysis(coordinates, cell, symmetry, aim_results) # check results assert len(sym_results) == 1 stats = sym_results['cartesian_multipoles'] assert abs(stats[:, 0] - [m0, m1]).max() < 1e-10 assert abs(stats[1, 1]).max() < 1e-10 assert abs(stats[0, 1, :2] - np.std([-0.1, 0.1])).max() < 1e-10 assert abs(stats[0, 1, 2:]).max() < 1e-10
def test_rotate_cartesian_moments_general(): for i in xrange(10): rmat = get_rotation_matrix(np.array([1, 1, 1]), 2.0 * np.pi / 3) m0 = get_pentagon_moments() m1 = get_pentagon_moments(rmat) m2 = rotate_cartesian_moments(m0, rmat) assert abs(m1 - m2).max() < 1e-10
def test_rotate_cartesian_moments_mult(): for mult in 2, 3, 4, 5, 6, 7: axis = np.random.normal(0, 1, 3) rmat = get_rotation_matrix(axis, 2.0*np.pi/mult) m0 = get_pentagon_moments() m1 = get_pentagon_moments() for i in xrange(mult): m1 = rotate_cartesian_moments(m1, rmat) assert abs(m0 - m1).max() < 1e-10
def test_rotate_cartesian_moments_mult(): for mult in 2, 3, 4, 5, 6, 7: axis = np.random.normal(0, 1, 3) rmat = get_rotation_matrix(axis, 2.0 * np.pi / mult) m0 = get_pentagon_moments() m1 = get_pentagon_moments() for i in xrange(mult): m1 = rotate_cartesian_moments(m1, rmat) assert abs(m0 - m1).max() < 1e-10