def test_replace_pattern_in_structure__special2_rotated_pattern_replaced_with_itself_does_not_change_positions(): search_pattern = Atoms(elements='CCH', positions=[(0., 0., 0.), (4., 0., 0.),(0., 1., 0.)]) replace_pattern = Atoms(elements='FFHe', positions=search_pattern.positions) structure = search_pattern.copy() structure.cell = 15 * np.identity(3) r = R.from_quat([ 0.02814096, 0.99766676, 0.03984918, -0.04776152]) structure.positions = r.apply(structure.positions) structure.positions = structure.positions % 15 final_structure = replace_pattern_in_structure(structure, search_pattern, replace_pattern, axis1a_idx=0, axis1b_idx=1) assert_structure_positions_are_unchanged(structure, final_structure)
def test_replace_pattern_in_structure__special_rotated_pattern_replaced_with_itself_does_not_change_positions(): search_pattern = Atoms(elements='CCH', positions=[(0., 0., 0.), (4., 0., 0.),(0., 1., 0.)]) replace_pattern = Atoms(elements='FFHe', positions=search_pattern.positions) structure = search_pattern.copy() structure.cell = [15] * np.identity(3) r = R.from_quat([-0.4480244, -0.50992783, 0.03212454, -0.7336319 ]) structure.positions = r.apply(structure.positions) structure.positions = structure.positions % 15 final_structure = replace_pattern_in_structure(structure, search_pattern, replace_pattern, axis1a_idx=0, axis1b_idx=1) assert_structure_positions_are_unchanged(structure, final_structure)
def test_replace_pattern_in_structure__3way_symmetrical_structure_raises_position_exception(): structure = Atoms(elements='CCHH', positions=[(0., 0., 0.), (1., 0., 0.),(0., 1., 0.), (0., 0., 1.)]) structure.translate((3,3,3)) structure.cell = 15 * np.identity(3) search_pattern = structure.copy() replace_pattern = Atoms(elements='FFHeHe', positions=search_pattern.positions) with pytest.raises(PositionsNotEquivalent): final_structure = replace_pattern_in_structure(structure, search_pattern, replace_pattern, verbose=True)
def test_replace_pattern_in_structure__100_randomly_rotated_patterns_replaced_with_itself_does_not_change_positions(): search_pattern = Atoms(elements='CCH', positions=[(0., 0., 0.), (4., 0., 0.),(0., 1., 0.)]) replace_pattern = Atoms(elements='FFHe', positions=search_pattern.positions) structure = search_pattern.copy() structure.cell = 15 * np.identity(3) for _ in range(100): r = R.random(1) print("quat: ", r.as_quat()) structure.positions = r.apply(structure.positions) dp = np.random.random(3) * 15 print(dp) structure.translate(dp) structure.positions = structure.positions % 15 final_structure = replace_pattern_in_structure(structure, search_pattern, replace_pattern, axis1a_idx=0, axis1b_idx=1) assert_structure_positions_are_unchanged(structure, final_structure)