def test_basis_family(aiida_profile, test_structure_data): from aiida.plugins import DataFactory from aiida_crystal_dft.tests import TEST_DIR from aiida_crystal_dft.data.basis import CrystalBasisData root_dir = os.path.join(TEST_DIR, "input_files", "sto3g") basis_files = [os.path.join(root_dir, f) for f in os.listdir(root_dir)] basis_sets = [CrystalBasisData.from_file(f) for f in basis_files] bf, _ = DataFactory('crystal_dft.basis_family').get_or_create( 'STO3G', basis_sets=basis_sets) bf2, _ = DataFactory('crystal_dft.basis_family').get_or_create('STO3G') assert bf.uuid == bf2.uuid with pytest.raises(TypeError): bf.add(["bs1", "bs2"]) with pytest.raises(ValueError): bf.add([basis_sets[0], basis_sets[0]]) assert len(bf.add(basis_sets)) == 0 bf.set_structure(test_structure_data) assert bf.oxi_states == {"Mg": 0., "O": 0.} assert bf.content == """8 2 1 0 3 2.0 0.0 1 1 3 6.0 0.0 12 3 1 0 3 2.0 0.0 1 1 3 8.0 0.0 1 1 3 2.0 0.0 99 0 """ with pytest.raises(ValueError): bf.set_oxistates({"Mg": 2.}) with pytest.raises(ValueError): bf.set_oxistates({"Mg": 2., "O": -1.}) bf.set_oxistates({"Mg": 2., "O": -2.}) assert bf.content == """8 2