mirror of
https://github.com/triqs/dft_tools
synced 2024-09-02 01:03:42 +02:00
![Oleg E. Peil](/assets/img/avatar_default.png)
The classes ProjectorShell and ProjectorGroup are now defined in different source files. This makes 'plotools.py' only contain routines that control the data flows, including consistency checks and output.
297 lines
8.9 KiB
Python
297 lines
8.9 KiB
Python
r"""
|
|
Tests of special parseres defined in ConfigParameters class
|
|
"""
|
|
import os
|
|
import rpath
|
|
_rpath = os.path.dirname(rpath.__file__) + '/'
|
|
|
|
import arraytest
|
|
import numpy as np
|
|
from inpconf import ConfigParameters
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseStringLogical
|
|
#
|
|
################################################################################
|
|
class TestParseStringLogical(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_string_logical(self, par_str)
|
|
|
|
Scenarios:
|
|
|
|
- **if** par_str == 'True' **return** True
|
|
- **if** par_str == 'False' **return** False
|
|
- **if** par_str == '0' **raise** assertion
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_true(self):
|
|
res = self.cpars.parse_string_logical('True')
|
|
self.assertEqual(res, True)
|
|
|
|
# Scenario 2
|
|
def test_false(self):
|
|
res = self.cpars.parse_string_logical('False')
|
|
self.assertEqual(res, False)
|
|
|
|
# Scenario 3
|
|
def test_incorrect(self):
|
|
with self.assertRaises(AssertionError):
|
|
self.cpars.parse_string_logical('0')
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseStringIonList
|
|
#
|
|
################################################################################
|
|
class TestParseStringIonList(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_string_ion_list(self, par_str)
|
|
|
|
Scenarios:
|
|
|
|
- **if** par_str == '5 6 7 8' **return** array([4, 5, 6, 7])
|
|
- **if** par_str == 'Ni' **raise** NotImplementedError
|
|
- **if** par_str == '0 1' **raise** AssertionError
|
|
- **if** par_str == '5..8' **return** array([4, 5, 6, 7])
|
|
- **if** par_str == '8..5' **raise** AssertionError
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_simple_list(self):
|
|
expected = np.array([4, 5, 6, 7])
|
|
res = self.cpars.parse_string_ion_list('5 6 7 8')
|
|
self.assertEqual(res, expected)
|
|
|
|
# Scenario 2
|
|
def test_atomic_symbol(self):
|
|
with self.assertRaises(NotImplementedError):
|
|
self.cpars.parse_string_ion_list('Ni')
|
|
|
|
# Scenario 3
|
|
def test_out_of_bounds(self):
|
|
err_mess = "Lowest ion index is"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_string_ion_list('0 1')
|
|
|
|
# Scenario 4
|
|
def test_list_range(self):
|
|
expected = np.array([4, 5, 6, 7])
|
|
res = self.cpars.parse_string_ion_list('5..8')
|
|
self.assertEqual(res, expected)
|
|
|
|
# Scenario 5
|
|
def test_range_wrong_order(self):
|
|
err_mess = "First index of the range"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_string_ion_list('8..5')
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseStringTmatrix
|
|
#
|
|
################################################################################
|
|
class TestParseStringTmatrix(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_string_tmatrix(self, par_str)
|
|
|
|
Parses a matrix defined as a set of rows in the conf-file.
|
|
|
|
Scenarios:
|
|
|
|
- **if** number of columns is not the same **raise** AssertionError
|
|
- **if** complex matrix is read and the number of columns is odd
|
|
**raise** AssertionError
|
|
- **if** a correct matrix is given **return** an array
|
|
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_number_of_columns(self):
|
|
par_str = "1.0 0.0\n1.0"
|
|
err_mess = "Number of columns"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_string_tmatrix(par_str, real=True)
|
|
|
|
# Scenario 2
|
|
def test_complex_matrix_odd(self):
|
|
par_str = "1.0 0.0 2.0 1.0 0.0\n0.0 1.0 2.0 3.0 -1.0"
|
|
err_mess = "Complex matrix must"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_string_tmatrix(par_str, real=False)
|
|
|
|
# Scenario 3
|
|
def test_complex_matrix(self):
|
|
par_str = "1.0 0.0 2.0 -3.0\n0.0 1.0 -1.0 1.0"
|
|
res = self.cpars.parse_string_tmatrix(par_str, real=False)
|
|
expected = np.array([[1.0, 2.0 - 3.0j], [1.0j, -1.0 + 1.0j]])
|
|
self.assertEqual(res, expected)
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseEnergyWindow
|
|
#
|
|
################################################################################
|
|
class TestParseEnergyWindow(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_energy_window(self, par_str)
|
|
|
|
Scenarios:
|
|
|
|
- **if** par_str == '-1.5 3.0' **return** (-1.5, 3.0)
|
|
- **if** par_str == '3.0 -1.5' **raise** AssertionError
|
|
- **if** par_str == '1.0' **raise** AssertionError
|
|
- **if** par_str == 'aaa' **raise** ValueError
|
|
- **if** par_str == '1.5 3.0 2.0' **raise** AssertionError
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_correct_range(self):
|
|
expected = (-1.5, 3.0)
|
|
res = self.cpars.parse_energy_window('-1.5 3.0')
|
|
self.assertEqual(res, expected)
|
|
|
|
# Scenario 2
|
|
def test_wrong_range(self):
|
|
err_mess = "The first float in EWINDOW"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_energy_window('3.0 -1.5')
|
|
|
|
# Scenario 3
|
|
def test_one_float(self):
|
|
err_mess = "EWINDOW must be specified"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_energy_window('1.0')
|
|
|
|
# Scenario 4
|
|
def test_wrong_string(self):
|
|
with self.assertRaises(ValueError):
|
|
self.cpars.parse_energy_window('aaa')
|
|
|
|
# Scenario 5
|
|
def test_three_floats(self):
|
|
err_mess = "EWINDOW must be specified"
|
|
with self.assertRaisesRegexp(AssertionError, err_mess):
|
|
self.cpars.parse_energy_window('1.5 3.0 2.0')
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseFileTmatrix
|
|
#
|
|
################################################################################
|
|
class TestParseFileTmatrix(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_file_tmatrix(self, par_str)
|
|
|
|
Scenarios:
|
|
|
|
- **if** file is correct **return** array()
|
|
- **if** file is incorrect **raise** (-1.5, 3.0)
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_correct_file(self):
|
|
expected = np.array(
|
|
[[ -2.52000000e-04, -0.00000000e+00, -4.27145000e-02, 3.00000000e-07, -9.99087300e-01],
|
|
[ -4.13570000e-03, -2.00000000e-07, -9.99078700e-01, -1.00000000e-07, 4.27152000e-02],
|
|
[ -3.80200000e-04, 0.00000000e+00, 6.04452000e-02, -1.00000000e-07, -9.98171400e-01],
|
|
[ -5.14500000e-04, -0.00000000e+00, -9.98171400e-01, 0.00000000e+00, -6.04450000e-02]])
|
|
|
|
res = self.cpars.parse_file_tmatrix(_rpath + 'tmatrix_file.dat')
|
|
self.assertEqual(res, expected)
|
|
|
|
# Scenario 2
|
|
def test_wrong_file(self):
|
|
with self.assertRaises(ValueError):
|
|
self.cpars.parse_file_tmatrix(_rpath + 'test1.cfg')
|
|
|
|
################################################################################
|
|
#
|
|
# TestParseStringDosmesh
|
|
#
|
|
################################################################################
|
|
class TestParseStringDosmesh(arraytest.ArrayTestCase):
|
|
"""
|
|
Function:
|
|
|
|
def parse_string_dosmesh(self, par_str)
|
|
|
|
Scenarios:
|
|
|
|
- **if** par_str == '-8.0 4.0 101' **return** dictionary
|
|
- **if** par_str == '101' **return** dictionary
|
|
- **if** par_str == '-8.0 101' **raise** ValueError
|
|
- **if** par_str == '8.0' **raise** ValueError
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
"""
|
|
# Dummy ConfigParameters object
|
|
self.cpars = ConfigParameters(_rpath + 'test1.cfg')
|
|
|
|
# Scenario 1
|
|
def test_range_npoints(self):
|
|
expected = {'n_points': 101, 'emin': -8.0, 'emax': 4.0}
|
|
res = self.cpars.parse_string_dosmesh('-8.0 4.0 101')
|
|
self.assertEqual(res, expected)
|
|
|
|
# Scenario 2
|
|
def test_only_npoints(self):
|
|
expected_npoints = 101
|
|
res = self.cpars.parse_string_dosmesh('101')
|
|
self.assertTrue(np.isnan(res['emin']))
|
|
self.assertTrue(np.isnan(res['emax']))
|
|
self.assertEqual(res['n_points'], expected_npoints)
|
|
|
|
# Scenario 3
|
|
def test_two_numbers(self):
|
|
err_mess = "DOSMESH must be either"
|
|
with self.assertRaisesRegexp(ValueError, err_mess):
|
|
self.cpars.parse_string_dosmesh('-8.0 101')
|
|
|
|
# Scenario 4
|
|
def test_wrong_input(self):
|
|
with self.assertRaises(ValueError):
|
|
self.cpars.parse_string_dosmesh('8.0')
|
|
|
|
|