def test_replace_pattern_in_structure__pattern_and_reverse_pattern_on_x_axis_positions_are_unchanged(): structure = Atoms(elements='HHCCCHH', positions=[(-1., 1, 0), (-1., -1, 0), (0., 0., 0), (1., 0., 0.), (3., 0., 0.), (4., 1, 0), (4., -1, 0)], cell=7*np.identity(3)) structure.translate([2, 2, 0.1]) search_pattern = Atoms(elements='HHC', positions=[(0., 1, 0), (0., -1, 0), (1., 0., 0.)]) replace_pattern = Atoms(elements='HHC', positions=[(0., 1, 0), (0., -1, 0), (1., 0., 0.)]) final_structure = replace_pattern_in_structure(structure, search_pattern, replace_pattern) assert Counter(final_structure.elements) == {"C":3, "H": 4} 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)