def test_input_gen(): xtb = XTB() calc = Calculation(name='tmp', molecule=test_mol, method=xtb, keywords=xtb.keywords.sp) Config.keep_input_files = True calc.generate_input() assert os.path.exists('tmp_xtb.xyz') calc.clean_up() # Clean-up should do nothing if keep_input_files = True assert os.path.exists('tmp_xtb.xyz') # but should be able to be forced calc.clean_up(force=True) assert not os.path.exists('tmp_xtb.xyz') # Test the keywords parsing unsupported_func = Functional('PBE', orca='PBE') calc_kwds = Calculation(name='tmp', molecule=test_mol, method=xtb, keywords=SinglePointKeywords([unsupported_func])) with pytest.raises(ex.UnsuppportedCalculationInput): calc_kwds.generate_input()
def test_xtb_calculation(): test_mol = Molecule(name='test_mol', smiles='O=C(C=C1)[C@@](C2NC3C=C2)([H])[C@@]3([H])C1=O') calc = Calculation(name='opt', molecule=test_mol, method=method, keywords=Config.XTB.keywords.opt) calc.run() assert os.path.exists('opt_xtb.xyz') is True assert os.path.exists('opt_xtb.out') is True assert len(calc.get_final_atoms()) == 22 assert calc.get_energy() == -36.990267613593 assert calc.output.exists() assert calc.output.file_lines is not None assert calc.input.filename == 'opt_xtb.xyz' assert calc.output.filename == 'opt_xtb.out' with pytest.raises(NotImplementedError): calc.optimisation_nearly_converged() with pytest.raises(NotImplementedError): calc.get_imaginary_freqs() with pytest.raises(NotImplementedError): calc.get_normal_mode_displacements(4) charges = calc.get_atomic_charges() assert len(charges) == 22 assert all(-1.0 < c < 1.0 for c in charges) const_opt = Calculation(name='const_opt', molecule=test_mol, method=method, distance_constraints={(0, 1): 1.2539792}, cartesian_constraints=[0], keywords=Config.XTB.keywords.opt) const_opt.generate_input() assert os.path.exists('const_opt_xtb.xyz') assert os.path.exists('xcontrol_const_opt_xtb') const_opt.clean_up(force=True) assert not os.path.exists('xcontrol_const_opt_xtb') # Write an empty output file open('tmp.out', 'w').close() const_opt.output.filename = 'tmp.out' const_opt.output.set_lines() # cannot get atoms from an empty file with pytest.raises(AtomsNotFound): _ = const_opt.get_final_atoms()