2015-08-10 11:32:08 +02:00
|
|
|
r"""
|
|
|
|
Tests of 'parse_shells()' defined in ConfigParameters class
|
|
|
|
"""
|
2015-10-16 11:16:48 +02:00
|
|
|
import os
|
|
|
|
import rpath
|
|
|
|
_rpath = os.path.dirname(rpath.__file__) + '/'
|
|
|
|
|
2015-08-10 11:32:08 +02:00
|
|
|
import arraytest
|
|
|
|
import numpy as np
|
2018-09-06 13:48:24 +02:00
|
|
|
from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters
|
2015-08-10 11:32:08 +02:00
|
|
|
|
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# TestParseShells
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
class TestParseShells(arraytest.ArrayTestCase):
|
|
|
|
"""
|
|
|
|
Function:
|
|
|
|
|
|
|
|
def parse_shells(self)
|
|
|
|
|
|
|
|
Scenarios:
|
|
|
|
|
|
|
|
- **if** config-file does not contain a valid [Shell] section
|
|
|
|
**raise** AssertionError
|
|
|
|
- **if** a [Shell] section does not contain a valid index
|
|
|
|
**raise** ValueError
|
|
|
|
- **if** a [Shell] section does not contain all required parameters
|
|
|
|
**raise** Exception
|
|
|
|
- **if** two correct [Shell] sections are defined
|
|
|
|
**return** a dictionary of shell parameters
|
|
|
|
"""
|
|
|
|
# Scenario 1
|
|
|
|
def test_no_shell(self):
|
2015-10-16 11:16:48 +02:00
|
|
|
conf_pars = ConfigParameters(_rpath + 'parse_shells_1.cfg')
|
2015-08-10 11:32:08 +02:00
|
|
|
err_mess = "No projected shells"
|
|
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
|
|
conf_pars.parse_shells()
|
|
|
|
|
|
|
|
# Scenario 2
|
|
|
|
def test_bad_indices(self):
|
2015-10-16 11:16:48 +02:00
|
|
|
conf_pars = ConfigParameters(_rpath + 'parse_shells_2.cfg')
|
2015-08-10 11:32:08 +02:00
|
|
|
err_mess = "Failed to extract shell indices"
|
|
|
|
with self.assertRaisesRegexp(ValueError, err_mess):
|
|
|
|
conf_pars.parse_shells()
|
|
|
|
|
|
|
|
# Scenario 3
|
|
|
|
def test_sh_required(self):
|
2015-10-16 11:16:48 +02:00
|
|
|
conf_pars = ConfigParameters(_rpath + 'parse_shells_3.cfg')
|
2015-08-10 11:32:08 +02:00
|
|
|
err_mess = "Required parameter"
|
|
|
|
with self.assertRaisesRegexp(Exception, err_mess):
|
|
|
|
conf_pars.parse_shells()
|
|
|
|
|
|
|
|
# Scenario 4
|
|
|
|
def test_two_shells(self):
|
2015-10-16 11:16:48 +02:00
|
|
|
conf_pars = ConfigParameters(_rpath + 'parse_shells_4.cfg')
|
2015-08-10 11:32:08 +02:00
|
|
|
conf_pars.parse_shells()
|
|
|
|
res = conf_pars.shells
|
2018-05-04 16:21:08 +02:00
|
|
|
expected = [{'user_index': 1, 'lshell': 2, 'ions': {'nion': 4, 'ion_list': [[4],[5],[6],[7]]}},
|
|
|
|
{'user_index': 2, 'lshell': 1, 'ions': {'nion': 4, 'ion_list': [[0],[1],[2],[3]]},
|
2015-08-10 11:32:08 +02:00
|
|
|
'tmatrix': np.array([[ 0., 1., 0.], [ 1., 0., 0.], [ 0., 0., 1.]])}]
|
|
|
|
# ...lousy way to test equality of two dictionaries containing numpy arrays
|
|
|
|
self.assertEqual(len(res), len(expected))
|
|
|
|
|
2018-05-04 16:21:08 +02:00
|
|
|
arr = res[0].pop('ions')
|
|
|
|
arr_exp = expected[0].pop('ions')
|
|
|
|
self.assertDictEqual(arr, arr_exp)
|
2015-08-10 11:32:08 +02:00
|
|
|
|
2018-05-04 16:21:08 +02:00
|
|
|
arr = res[1].pop('ions')
|
|
|
|
arr_exp = expected[1].pop('ions')
|
|
|
|
self.assertDictEqual(arr, arr_exp)
|
2015-08-10 11:32:08 +02:00
|
|
|
|
|
|
|
arr = res[1].pop('tmatrix')
|
|
|
|
arr_exp = expected[1].pop('tmatrix')
|
|
|
|
self.assertEqual(arr, arr_exp)
|
|
|
|
|
|
|
|
self.assertListEqual(res, expected)
|
|
|
|
|
|
|
|
|
2018-05-04 16:21:08 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
import unittest
|
|
|
|
unittest.main(verbosity=2, buffer=False)
|
|
|
|
|