diff --git a/MANIFEST.in b/MANIFEST.in index e4620319..d6cfad19 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,3 +4,5 @@ exclude adcc/conftest.py global-include libadcc/**/*.hh libadcc/**/*.cc include LICENSE include README.md +include adcc/smoketests/test_smoke.py +include adcc/testdata/static_data.py \ No newline at end of file diff --git a/adcc/smoketests/__init__.py b/adcc/smoketests/__init__.py new file mode 100644 index 00000000..14014a88 --- /dev/null +++ b/adcc/smoketests/__init__.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +## vi: tabstop=4 shiftwidth=4 softtabstop=4 expandtab +## --------------------------------------------------------------------- +## +## Copyright (C) 2022 by the adcc authors +## +## This file is part of adcc. +## +## adcc is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## adcc is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with adcc. If not, see . +## +## --------------------------------------------------------------------- diff --git a/adcc/smoketests/test_smoke.py b/adcc/smoketests/test_smoke.py new file mode 100644 index 00000000..0ba7e30d --- /dev/null +++ b/adcc/smoketests/test_smoke.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +## vi: tabstop=4 shiftwidth=4 softtabstop=4 expandtab +## --------------------------------------------------------------------- +## +## Copyright (C) 2022 by the adcc authors +## +## This file is part of adcc. +## +## adcc is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## adcc is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with adcc. If not, see . +## +## --------------------------------------------------------------------- +import unittest +import pytest +from numpy.testing import assert_allclose + +import adcc +from adcc.backends.testing import cached_backend_hf +from ..misc import expand_test_templates + +methods = ["adc0", "adc1", "adc2", "adc2x", "adc3"] + +_singlets = { + "adc0": [0.99048446, 1.04450741, 1.15356339], + "adc1": [0.48343609, 0.57420044, 0.60213699], + "adc2": [0.47051314, 0.57255495, 0.59367339], + "adc2x": [0.44511182, 0.55139508, 0.57146893], + "adc3": [0.45197068, 0.55572706, 0.57861241], +} + +_triplets = { + "adc0": [0.99048446, 1.04450741, 1.15356339], + "adc1": [0.40544164, 0.48351268, 0.52489129], + "adc2": [0.40288477, 0.4913253, 0.52854722], + "adc2x": [0.38557787, 0.48177562, 0.51336301], + "adc3": [0.3924605, 0.4877098, 0.51755258] +} + +_singlets_cvs = { + "adc0": [20.83623681, 20.99931574], + "adc1": [20.10577515, 20.16512502], + "adc2": [20.0045422, 20.08771799], + "adc2x": [19.90528006, 19.9990468], + "adc3": [19.93138526, 20.02055267], +} + +_triplets_cvs = { + "adc0": [20.83623681, 20.99931574], + "adc1": [20.04302084, 20.12099631], + "adc2": [19.95732865, 20.05239094], + "adc2x": [19.86572075, 19.97241019], + "adc3": [19.89172578, 19.99386631], +} + + +@pytest.mark.skipif("pyscf" not in adcc.backends.available(), + reason="PySCF not found.") +@expand_test_templates(methods) +class TestSmoke(unittest.TestCase): + def template_test_h2o_sto3g(self, method): + scfres = cached_backend_hf("pyscf", "h2o", "sto-3g") + refstate = adcc.ReferenceState(scfres) + state_singlets = adcc.run_adc(refstate, method=method, + n_singlets=3, conv_tol=1e-7) + state_triplets = adcc.run_adc(refstate, method=method, + n_triplets=3, conv_tol=1e-7) + assert_allclose(state_singlets.excitation_energy, + _singlets[method], atol=1e-6) + assert_allclose(state_triplets.excitation_energy, + _triplets[method], atol=1e-6) + + def template_test_h2o_sto3g_cvs(self, method): + scfres = cached_backend_hf("pyscf", "h2o", "sto-3g") + refstate = adcc.ReferenceState(scfres, core_orbitals=1) + cvsmethod = f"cvs-{method}" + state_singlets = adcc.run_adc(refstate, n_singlets=2, method=cvsmethod) + state_triplets = adcc.run_adc(refstate, n_triplets=2, method=cvsmethod) + assert_allclose(state_singlets.excitation_energy, + _singlets_cvs[method], atol=1e-6) + assert_allclose(state_triplets.excitation_energy, + _triplets_cvs[method], atol=1e-6)