Skip to content

Commit

Permalink
Release 3.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
reiher-research-group committed Aug 26, 2024
1 parent 0213ae7 commit bc269cf
Show file tree
Hide file tree
Showing 11 changed files with 185 additions and 180 deletions.
83 changes: 3 additions & 80 deletions .conan_test_package/conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from conans import ConanFile


class TestPackageConan(ConanFile):
def build(self):
pass
Expand All @@ -16,84 +17,6 @@ def test(self):
import scine_serenity_wrapper
self.output.info("Import worked")

import scine_utilities as utils

h2 = utils.AtomCollection(
[utils.ElementType.H, utils.ElementType.H],
[[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]]
)

# Test R-KS-DFT
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'dft')
assert calculator.name() == 'SerenityDFTCalculator'
calculator.structure = h2
calculator.settings['method'] = 'pbe-d3bj'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.166043) < 1e-6
self.output.info("R-KS-DFT worked")

# Test U-KS-DFT
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'dft')
assert calculator.name() == 'SerenityDFTCalculator'
calculator.structure = h2
calculator.settings['spin_mode'] = 'unrestricted'
calculator.settings['method'] = 'pbe-d3bj'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.166043) < 1e-6
self.output.info("U-KS-DFT worked")

# Test R-HF
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'hf')
assert calculator.name() == 'SerenityHFCalculator'
calculator.structure = h2
calculator.settings['method'] = 'hf'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.132535) < 1e-6
self.output.info("U-KS-DFT worked")

# Test U-HF
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'hf')
assert calculator.name() == 'SerenityHFCalculator'
calculator.structure = h2
calculator.settings['spin_mode'] = 'unrestricted'
calculator.settings['method'] = 'hf'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.132535) < 1e-6
self.output.info("U-KS-DFT worked")

# Test R-CCSD(T)
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'cc')
assert calculator.name() == 'SerenityCCCalculator'
calculator.structure = h2
calculator.settings['method'] = 'ccsd(t)'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.168261) < 1e-6
self.output.info("R-CCSD(T) worked")

# Test R-DLPNO-CCSD(T0)
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'cc')
assert calculator.name() == 'SerenityCCCalculator'
calculator.structure = h2
calculator.settings['method'] = 'dlpno-ccsd(t0)'
calculator.settings['basis_set'] = 'def2-tzvp'
results = calculator.calculate()
assert results.successful_calculation
assert abs(results.energy - -1.168311) < 1e-6
self.output.info("R-DLPNO-CCSD(T) worked")
from scine_serenity_wrapper.Tests.test_calculators import run_all_tests
run_all_tests()

5 changes: 5 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Changelog
=========

Release 3.1.0
-------------

- Add unit tests for Python package and remove obsolete tests

Release 3.0.0
-------------

Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.9)

# Setup the Scine Project
project(Serenity
VERSION 3.0.0
VERSION 3.1.0
DESCRIPTION "SCINE Serenity Wrapper."
)

Expand Down
7 changes: 7 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ When publishing results obtained with the SCINE Serenity wrapper, please cite th
release as archived on `Zenodo <https://doi.org/10.5281/zenodo.6695038>`_ (DOI
10.5281/zenodo.6695038; please use the DOI of the respective release).

Furthermore, when publishing results obtained with any SCINE module, please cite the following paper:

T. Weymuth, J. P. Unsleber, P. L. Türtscher, M. Steiner, J.-G. Sobez, C. H. Müller, M. Mörchen,
V. Klasovita, S. A. Grimmel, M. Eckhoff, K.-S. Csizi, F. Bosia, M. Bensberg, M. Reiher,
"SCINE—Software for chemical interaction networks", *J. Chem. Phys.*, **2024**, *160*, 222501
(DOI `10.1063/5.0206974 <https://doi.org/10.1063/5.0206974>`_).

This wrapper should also not be mistaken for the actual Serenity code it wraps.
For the latter code and its citations, we refer you to the original
Serenity repository. There you will find the references of the actual methods
Expand Down
4 changes: 2 additions & 2 deletions conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

class ScineSerenityConan(ScineConan):
name = "scine_serenity_wrapper"
version = "3.0.0"
version = "3.1.0"
url = "https://github.com/qcscine/serenity_wrapper"
description = """A wrapper around Serenity (https://github.com/qcserenity/serenity),
it exports DFT, HF and other quantum chemistry capabilities into the SCINE tool
Expand All @@ -29,5 +29,5 @@ class ScineSerenityConan(ScineConan):
"dev/cmake/*", "src/*", "CMakeLists.txt", "README.rst", "LICENSE.txt",
"dev/conan/hook.cmake", "dev/conan/glue/*"
]
requires = ["scine_utilities/9.0.0", "serenity/1.5.2"]
requires = ["scine_utilities/[=10.0.0]", "serenity/1.5.2"]
cmake_name = "Serenity"
9 changes: 7 additions & 2 deletions src/Serenity/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ if(SCINE_BUILD_PYTHON_BINDINGS)

add_custom_command(TARGET Serenity POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:Serenity> ${CMAKE_CURRENT_BINARY_DIR}/scine_serenity_wrapper
COMMENT "Copying 'serenity.module.so' to 'scine_serenity'"
COMMENT "Copying 'serenity.module.so' to 'scine_serenity_wrapper'"
)

install(CODE
Expand All @@ -68,13 +68,18 @@ if(SCINE_BUILD_PYTHON_BINDINGS)
message(FATAL_ERROR \"Fatal error when installing Python module using PIP.\")
endif()"
)
# Copy the setup file and README.rst into the binary dir so you can install
# Copy the setup file into the binary dir so you can install
# using pip or make a distribution with the compiled binary
file(
COPY ${CMAKE_CURRENT_SOURCE_DIR}/Python/__init__.py
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/scine_serenity_wrapper
)

file(
COPY ${CMAKE_CURRENT_SOURCE_DIR}/Python/Tests
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/scine_serenity_wrapper
)

# Figure out the location of serenity's data directory dependending on
# whether serenity is imported or in-tree
get_target_property(_serenity_imported serenity IMPORTED)
Expand Down
4 changes: 4 additions & 0 deletions src/Serenity/Python/Tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
__copyright__ = """This code is licensed under the 3-clause BSD license.
Copyright ETH Zurich, Department of Chemistry and Applied Biosciences, Reiher Group.
See LICENSE.txt for details.
"""
152 changes: 152 additions & 0 deletions src/Serenity/Python/Tests/test_calculators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
__copyright__ = """This code is licensed under the 3-clause BSD license.
Copyright ETH Zurich, Department of Chemistry and Applied Biosciences, Reiher Group.
See LICENSE.txt for details.
"""

import pytest
import scine_utilities as utils

def create_h2() -> utils.AtomCollection:
return utils.AtomCollection(
[utils.ElementType.H, utils.ElementType.H],
[[-0.7, 0.0, 0.0], [0.7, 0.0, 0.0]]
)

def test_dft_restricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'dft')
assert calculator.name() == 'SerenityDFTCalculator'
calculator.structure = h2
calculator.settings['method'] = 'pbe-d3bj'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.166043) < 1e-6

def test_dft_restricted_other_properties() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'dft')
assert calculator.name() == 'SerenityDFTCalculator'
calculator.structure = h2
calculator.settings['method'] = 'pbe-d3bj'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.AOtoAtomMapping,
utils.Property.AtomicCharges,
# utils.Property.OneElectronMatrix,
utils.Property.OverlapMatrix,
utils.Property.Thermochemistry,
utils.Property.Gradients])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy is not None
assert abs(results.energy - -1.166043) < 1e-6
assert results.gradients is not None
assert results.ao_to_atom_mapping is not None
assert results.atomic_charges is not None
assert results.overlap_matrix is not None
# assert results.one_electron_matrix is not None

# TODO This should be included again as soon as the serenity wrapper avoids running SCF calculations for everything.
# def test_dft_restricted_non_scf_properties() -> None:
# h2 = create_h2()
# module_manager = utils.core.ModuleManager.get_instance()
# calculator = module_manager.get('calculator', 'dft')
# assert calculator.name() == 'SerenityDFTCalculator'
# calculator.structure = h2
# calculator.settings['method'] = 'pbe-d3bj'
# calculator.settings['basis_set'] = 'def2-tzvp'
# calculator.set_required_properties([utils.Property.AOtoAtomMapping,
# utils.Property.OneElectronMatrix,
# utils.Property.OverlapMatrix,
# ])
# results = calculator.calculate()
# assert results.successful_calculation
# assert results.ao_to_atom_mapping is not None
# assert results.overlap_matrix is not None
# assert results.one_electron_matrix is not None
# assert results.energy is None

def test_dft_unrestricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'dft')
assert calculator.name() == 'SerenityDFTCalculator'
calculator.structure = h2
calculator.settings['spin_mode'] = 'unrestricted'
calculator.settings['method'] = 'pbe-d3bj'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.166043) < 1e-6

def test_hf_restricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'hf')
assert calculator.name() == 'SerenityHFCalculator'
calculator.structure = h2
calculator.settings['method'] = 'hf'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.132535) < 1e-6

def test_hf_unrestricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'hf')
assert calculator.name() == 'SerenityHFCalculator'
calculator.structure = h2
calculator.settings['spin_mode'] = 'unrestricted'
calculator.settings['method'] = 'hf'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.132535) < 1e-6

def test_ccsd_t_restricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'cc')
assert calculator.name() == 'SerenityCCCalculator'
calculator.structure = h2
calculator.settings['method'] = 'ccsd(t)'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.168261) < 1e-6

def test_dlpno_ccsd_t0_restricted() -> None:
h2 = create_h2()
module_manager = utils.core.ModuleManager.get_instance()
calculator = module_manager.get('calculator', 'cc')
assert calculator.name() == 'SerenityCCCalculator'
calculator.structure = h2
calculator.settings['method'] = 'dlpno-ccsd(t0)'
calculator.settings['basis_set'] = 'def2-tzvp'
calculator.set_required_properties([utils.Property.Energy])
results = calculator.calculate()
assert results.successful_calculation
assert results.energy
assert abs(results.energy - -1.168311) < 1e-6

def run_all_tests() -> None:
test_dft_restricted()
test_dft_unrestricted()
test_dft_restricted_other_properties()
test_hf_restricted()
test_hf_unrestricted()
test_ccsd_t_restricted()
test_dlpno_ccsd_t0_restricted()
5 changes: 3 additions & 2 deletions src/Serenity/Python/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def package_files(directory):
return paths

# Read README.rst for the long description
with open("README.rst", "r") as fh:
with open("README.rst", "r", encoding="utf-8") as fh:
long_description = fh.read()


Expand All @@ -37,7 +37,8 @@ def __len__(self):
long_description=long_description,
url="https://www.scine.ethz.ch",
packages=["scine_serenity_wrapper"],
package_data={"scine_serenity_wrapper": ['*.txt' @serenity_PY_DEPS@]},
include_package_data=True,
package_data={"scine_serenity_wrapper": ['*.txt' @serenity_PY_DEPS@, "Tests/*"]},
install_requires=["scine_utilities"],
classifiers=[
"Programming Language :: Python",
Expand Down
Loading

0 comments on commit bc269cf

Please sign in to comment.