# IT4Innovations
# LK 2023

easyblock = 'EB_PSI'

name = 'PSI4'
version = '1.8.1'

homepage = 'https://www.psicode.org/'
description = """PSI4 is an open-source suite of ab initio quantum chemistry programs designed for
efficient, high-accuracy simulations of a variety of molecular properties. We can routinely perform
computations with more than 2500 basis functions running serially or in parallel.
"""

toolchain = {'name': 'foss', 'version': '2022b'}
toolchainopts = {'usempi': True}

source_urls = ['https://github.com/psi4/psi4/archive']
sources = ['v%(version)s.tar.gz']
patches = [
    'PSI4-%(version)s_fix_cmake_release.patch',
    'PSI4-%(version)s_fix_snsmp2_version.patch',
]
checksums = [
    'f1431a68fd67ae8c31fdb3a8c135061d148246b9687c80decdc1b7ad917fe80b',  # v1.8.1.tar.gz
    '4b9e7a4335cceae568f44bb3207b4c516ffa15afdee5d04fd855326c4a930710',  # PSI4-1.8.1_fix_cmake_release.patch
    '3000a33e65352ea42b83f52cba10dd96b872ce5b429272a787d5cbfd4c1a5186',  # PSI4-1.8.1_fix_snsmp2_version.patch
]

dependencies = [
    ('Python', '3.10.8'),
    ('libxc', '6.1.0'),
    ('CheMPS2', '1.8.12'),
    ('networkx', '3.1'),
    ('psutil', '5.9.5'),
    ('pytest', '7.2.2'),
    ('Boost', '1.81.0'),
]

builddependencies = [
    ('CMake', '3.24.3'),
    ('Eigen', '3.4.0'),
]

configopts = '-DENABLE_MPI=ON -DENABLE_PLUGINS=ON -DENABLE_XHOST=OFF '
#  Install python module to the standard location instead of lib
configopts += '-DPYMOD_INSTALL_LIBDIR=/python%(pyshortver)s/site-packages '
#  Add bundled (downloaded) packages
# -DENABLE_simint=ON does not work with intel/2018, so have to make with GCCcore
configopts += '-DENABLE_dkh=ON -DENABLE_gdma=ON -DENABLE_resp=ON -DENABLE_snsmp2=ON '
# allow PSI4 to download and build a forked version of PCMSolver otherwise tests fail
configopts += '-DENABLE_PCMSolver=ON '

# runtest uses ctest, and some of the tests have to be manually compared
# to the reference output (those tests are marked failed)
# After installing PSI4, you can test the package using psi4 --test command. (This uses pytest framework)
# runtest = '-L smoke'
runtest = False

exts_defaultclass = 'PythonPackage'
exts_filter = ("python -c 'import %(ext_name)s'", '')
exts_default_options = {
    'source_urls': [PYPI_SOURCE],
    'download_dep_fail': True,
    'use_pip': True,
}

exts_list = [
    ('typing_extensions', '4.5.0', {
        'checksums': ['5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb'],
    }),
    ('pydantic', '1.10.5', {
        'checksums': ['9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a'],
    }),
    ('Pint', '0.20.1', {
        'checksums': ['387cf04078dc7dfe4a708033baad54ab61d82ab06c4ee3d4922b1e45d5626067'],
    }),
    ('msgpack-python', '0.5.6', {
        'modulename': 'msgpack',
        'checksums': ['378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b'],
    }),
    ('py-cpuinfo', '9.0.0', {
        'modulename': 'cpuinfo',
        'checksums': ['3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690'],
    })
]

modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'}

sanity_check_commands = ["python -c 'import psi4'"]

moduleclass = 'chem'