Source code for ase2sprkkr.asr.test.test_database_duplicates

import pytest
# from .materials import std_test_materials
from pathlib import Path

# @pytest.fixture(params=std_test_materials)
# def duplicates_test_db(request, asr_tmpdir):
#     """Set up a database containing only duplicates of BN."""
#     import numpy as np
#     import ase.db

#     db = ase.db.connect("duplicates.db")
#     atoms = request.param.copy()

#     db.write(atoms=atoms)

#     rotated_atoms = atoms.copy()
#     rotated_atoms.rotate(23, v='z', rotate_cell=True)
#     db.write(atoms=rotated_atoms, magstate='FM')

#     pbc_c = atoms.get_pbc()
#     repeat = np.array([2, 2, 2], int)
#     repeat[~pbc_c] = 1
#     supercell_ref = atoms.repeat(repeat)
#     db.write(supercell_ref)

#     translated_atoms = atoms.copy()
#     translated_atoms.translate(0.5)
#     db.write(translated_atoms)

#     rattled_atoms = atoms.copy()
#     rattled_atoms.rattle(0.001)
#     db.write(rattled_atoms)

#     stretch_nonpbc_atoms = atoms.copy()
#     cell = stretch_nonpbc_atoms.get_cell()
#     pbc_c = atoms.get_pbc()
#     cell[~pbc_c][:, ~pbc_c] *= 2
#     stretch_nonpbc_atoms.set_cell(cell)
#     db.write(stretch_nonpbc_atoms)

#     return (atoms, db)


[docs] @pytest.mark.ci def test_database_duplicates(duplicates_test_db): from asr.database.duplicates import main results = main('duplicates.db', 'duplicates_removed.db', filterstring='<=natoms,<id') assert Path('duplicates_removed.db').is_file() nduplicates = len(duplicates_test_db[1]) duplicate_groups = results['duplicate_groups'] assert duplicate_groups[0]['include'] == [1] assert duplicate_groups[0]['exclude'] == list(range(2, nduplicates + 1))
[docs] @pytest.mark.ci def test_database_duplicates_filter_magstate(duplicates_test_db): from asr.database.duplicates import main results = main('duplicates.db', 'duplicates_removed.db', comparison_keys='magstate', filterstring='<=natoms,<id') duplicate_groups = results['duplicate_groups'] assert duplicate_groups[0]['include'] == [1] assert duplicate_groups[0]['exclude'] == [3, 4, 5, 6]
[docs] @pytest.mark.ci def test_database_duplicates_no_duplicates(duplicates_test_db): from asr.database.duplicates import main # Setting comparison_key = id makes removes all duplicates. results = main('duplicates.db', 'duplicates_removed.db', comparison_keys='id', filterstring='<=natoms,<id') duplicate_groups = results['duplicate_groups'] assert not duplicate_groups