def test_mos2(i): size = 2 atoms = mx2(formula='MoS2', size=(size, size, 1)) permutation = np.roll(np.arange(3), i) atoms = permute_axes(atoms, permutation) result = find_inversion_symmetry(atoms) check_result(atoms, result)
def test_nanotube(i): size = 4 atoms = nanotube(3, 3, length=size) permutation = np.roll(np.arange(3), i) atoms = permute_axes(atoms, permutation) result = find_inversion_symmetry(atoms) assert result.rmsd < TOL check_result(atoms, result) atoms.rattle() result = find_inversion_symmetry(atoms) check_result(atoms, result)
def test_nanotube(seed, i): size = 4 atoms = nanotube(3, 3, length=size) permutation = np.roll(np.arange(3), i) atoms = permute_axes(atoms, permutation) rng = np.random.RandomState(seed=seed) atoms = randomize(rng, atoms) result = find_crystal_reductions(atoms)[:3] factors = [reduced.factor for reduced in result] assert tuple(factors) == (1, 2, 4) assert all([reduced.rmsd < TOL for reduced in result]) check_components(atoms, result)
def test_permute_axes(seed): rng = np.random.RandomState(seed) n = 10 atoms = Atoms(numbers=[1] * n, scaled_positions=rng.uniform(0, 1, (n, 3)), pbc=rng.randint(0, 2, 3), cell=rng.uniform(-1, 1, (3, 3))) permutation = rng.permutation(3) permuted = permute_axes(atoms, permutation) invperm = np.argsort(permutation) original = permute_axes(permuted, invperm) assert (original.pbc == atoms.pbc).all() assert_allclose(original.cell, atoms.cell, atol=TOL) assert_allclose(original.get_positions(), atoms.get_positions(), atol=TOL) assert_allclose(atoms.get_positions()[:, permutation], permuted.get_positions(), atol=TOL) assert_allclose(atoms.cell.volume, permuted.cell.volume, atol=TOL) assert_allclose(atoms.cell.volume, original.cell.volume, atol=TOL) assert (permuted.pbc == atoms.pbc[permutation]).all()
def test_mos2(seed, i): size = 4 atoms = mx2(formula='MoS2', size=(size, size, 1)) permutation = np.roll(np.arange(3), i) atoms = permute_axes(atoms, permutation) rng = np.random.RandomState(seed=seed) atoms = randomize(rng, atoms) result = find_crystal_reductions(atoms) assert len(result) == size + 1 assert all([reduced.rmsd < TOL for reduced in result]) factors = [reduced.factor for reduced in result] assert tuple(factors) == (1, 2, 4, 8, 16) check_components(atoms, result)
def prepare(seed, i, translate, atoms): rng = np.random.RandomState(seed=seed) atoms = standardize(atoms).atoms permutation = np.roll(np.arange(3), i) atoms = permute_axes(atoms, permutation) if translate: atoms.positions += rng.uniform(-1, 1, atoms.positions.shape) atoms.wrap(eps=0) positions = atoms.get_positions(wrap=False) offset = rng.randint(-5, 6, positions.shape) for i in range(3): if not atoms.pbc[i]: offset[:, i] = 0 scattered = positions.copy() + offset @ atoms.cell wrapped = wrap_positions(scattered, atoms.cell, atoms.pbc) check_result(atoms, positions, wrapped, translate)