From c8badb39ff4af651e5ab0d2f33e85db0a41c6835 Mon Sep 17 00:00:00 2001 From: "Oleg E. Peil" Date: Fri, 16 Oct 2015 11:16:48 +0200 Subject: [PATCH 1/4] Fixed 'inpconf' tests Originally, the tests worked only when run from their respective directory. If one tries to run them from another directory (which happens when test discovery is used) the tests were not able to find the input files. Now, a dummy module 'rpath' is added to all tests whose sole role is to obtain the current path. --- python/vasp/test/_inpconf/rpath.py | 2 ++ python/vasp/test/_inpconf/runtest.sh | 2 +- python/vasp/test/_inpconf/test_general.py | 6 +++++- python/vasp/test/_inpconf/test_groups.py | 8 ++++++-- python/vasp/test/_inpconf/test_input.py | 16 ++++++++++------ python/vasp/test/_inpconf/test_parameter_set.py | 6 +++++- python/vasp/test/_inpconf/test_shells.py | 12 ++++++++---- .../vasp/test/_inpconf/test_special_parsers.py | 10 +++++++--- python/vasp/test/run_all.sh | 2 +- 9 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 python/vasp/test/_inpconf/rpath.py diff --git a/python/vasp/test/_inpconf/rpath.py b/python/vasp/test/_inpconf/rpath.py new file mode 100644 index 00000000..d289e092 --- /dev/null +++ b/python/vasp/test/_inpconf/rpath.py @@ -0,0 +1,2 @@ + +pass diff --git a/python/vasp/test/_inpconf/runtest.sh b/python/vasp/test/_inpconf/runtest.sh index 9b7bd8ca..4537817b 100755 --- a/python/vasp/test/_inpconf/runtest.sh +++ b/python/vasp/test/_inpconf/runtest.sh @@ -1 +1 @@ -PYTHONPATH=../../python:../../c:$PYTHONPATH python $1 +PYTHONPATH=../..:../../../../c:$PYTHONPATH python $1 diff --git a/python/vasp/test/_inpconf/test_general.py b/python/vasp/test/_inpconf/test_general.py index 64e7518e..f52495cf 100644 --- a/python/vasp/test/_inpconf/test_general.py +++ b/python/vasp/test/_inpconf/test_general.py @@ -1,6 +1,10 @@ r""" Tests of 'parse_general()' defined in ConfigParameters class """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import arraytest import numpy as np from inpconf import ConfigParameters @@ -22,7 +26,7 @@ class TestParseGeneral(arraytest.ArrayTestCase): """ # Scenario 1 def test_example(self): - conf_pars = ConfigParameters('example.cfg') + conf_pars = ConfigParameters(_rpath + 'example.cfg') conf_pars.parse_general() res = conf_pars.general expected = {'basename': 'test_base', 'efermi': 0.1} diff --git a/python/vasp/test/_inpconf/test_groups.py b/python/vasp/test/_inpconf/test_groups.py index ed3f209d..3ebc3670 100644 --- a/python/vasp/test/_inpconf/test_groups.py +++ b/python/vasp/test/_inpconf/test_groups.py @@ -1,6 +1,10 @@ r""" Tests of 'parse_groups()' defined in ConfigParameters class """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import arraytest import numpy as np from inpconf import ConfigParameters @@ -24,14 +28,14 @@ class TestParseGroups(arraytest.ArrayTestCase): """ # Scenario 1 def test_gr_required(self): - conf_pars = ConfigParameters('parse_groups_1.cfg') + conf_pars = ConfigParameters(_rpath + 'parse_groups_1.cfg') err_mess = "Required parameter" with self.assertRaisesRegexp(Exception, err_mess): conf_pars.parse_groups() # Scenario 2 def test_example(self): - conf_pars = ConfigParameters('example.cfg') + conf_pars = ConfigParameters(_rpath + 'example.cfg') conf_pars.parse_groups() res = conf_pars.groups expected = [{'index': 1, 'shells': [1, 2], 'emin': -7.6, 'emax': 3.0, diff --git a/python/vasp/test/_inpconf/test_input.py b/python/vasp/test/_inpconf/test_input.py index 365b96f2..eca74ea8 100644 --- a/python/vasp/test/_inpconf/test_input.py +++ b/python/vasp/test/_inpconf/test_input.py @@ -1,6 +1,10 @@ r""" Tests of 'parse_input()' defined in ConfigParameters class """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import arraytest import numpy as np from inpconf import ConfigParameters @@ -32,35 +36,35 @@ class TestParseInput(arraytest.ArrayTestCase): """ # Scenario 1 def test_no_group(self): - conf_pars = ConfigParameters('input_test_1.cfg') + conf_pars = ConfigParameters(_rpath + 'input_test_1.cfg') err_mess = "At least one group" with self.assertRaisesRegexp(AssertionError, err_mess): conf_pars.parse_input() # Scenario 2 def test_gr_required(self): - conf_pars = ConfigParameters('input_test_2.cfg') + conf_pars = ConfigParameters(_rpath + 'input_test_2.cfg') err_mess = "One \[Shell\] section is" with self.assertRaisesRegexp(KeyError, err_mess): conf_pars.parse_input() # Scenario 3 def test_no_shell(self): - conf_pars = ConfigParameters('input_test_3.cfg') + conf_pars = ConfigParameters(_rpath + 'input_test_3.cfg') err_mess = "Shell 3 referenced in" with self.assertRaisesRegexp(Exception, err_mess): conf_pars.parse_input() # Scenario 4 def test_shell_outside_groups(self): - conf_pars = ConfigParameters('input_test_4.cfg') + conf_pars = ConfigParameters(_rpath + 'input_test_4.cfg') err_mess = "Some shells are not inside" with self.assertRaisesRegexp(AssertionError, err_mess): conf_pars.parse_input() # Scenario 5 def test_example(self): - conf_pars = ConfigParameters('example.cfg') + conf_pars = ConfigParameters(_rpath + 'example.cfg') conf_pars.parse_input() # with open('parse_input.output.test', 'wt') as f: # f.write("Shells:\n") @@ -84,7 +88,7 @@ Groups: # Scenario 6 def test_example_no_groups(self): - conf_pars = ConfigParameters('example_nogroup.cfg') + conf_pars = ConfigParameters(_rpath + 'example_nogroup.cfg') conf_pars.parse_input() # with open('parse_input.output.test', 'wt') as f: # f.write("Shells:\n") diff --git a/python/vasp/test/_inpconf/test_parameter_set.py b/python/vasp/test/_inpconf/test_parameter_set.py index fb5bc988..f8d7f427 100644 --- a/python/vasp/test/_inpconf/test_parameter_set.py +++ b/python/vasp/test/_inpconf/test_parameter_set.py @@ -1,6 +1,10 @@ r""" Tests of 'parse_parameter_set()' defined in ConfigParameters class """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import arraytest import numpy as np from inpconf import ConfigParameters @@ -29,7 +33,7 @@ class TestParseParameterSet(arraytest.ArrayTestCase): """ """ # Dummy ConfigParameters object - self.cpars = ConfigParameters('test1.cfg') + self.cpars = ConfigParameters(_rpath + 'test1.cfg') # Scenario 1 def test_sh_required(self): diff --git a/python/vasp/test/_inpconf/test_shells.py b/python/vasp/test/_inpconf/test_shells.py index 24f73981..062fb28d 100644 --- a/python/vasp/test/_inpconf/test_shells.py +++ b/python/vasp/test/_inpconf/test_shells.py @@ -1,6 +1,10 @@ r""" Tests of 'parse_shells()' defined in ConfigParameters class """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import arraytest import numpy as np from inpconf import ConfigParameters @@ -29,28 +33,28 @@ class TestParseShells(arraytest.ArrayTestCase): """ # Scenario 1 def test_no_shell(self): - conf_pars = ConfigParameters('parse_shells_1.cfg') + conf_pars = ConfigParameters(_rpath + 'parse_shells_1.cfg') err_mess = "No projected shells" with self.assertRaisesRegexp(AssertionError, err_mess): conf_pars.parse_shells() # Scenario 2 def test_bad_indices(self): - conf_pars = ConfigParameters('parse_shells_2.cfg') + conf_pars = ConfigParameters(_rpath + 'parse_shells_2.cfg') err_mess = "Failed to extract shell indices" with self.assertRaisesRegexp(ValueError, err_mess): conf_pars.parse_shells() # Scenario 3 def test_sh_required(self): - conf_pars = ConfigParameters('parse_shells_3.cfg') + conf_pars = ConfigParameters(_rpath + 'parse_shells_3.cfg') err_mess = "Required parameter" with self.assertRaisesRegexp(Exception, err_mess): conf_pars.parse_shells() # Scenario 4 def test_two_shells(self): - conf_pars = ConfigParameters('parse_shells_4.cfg') + conf_pars = ConfigParameters(_rpath + 'parse_shells_4.cfg') conf_pars.parse_shells() res = conf_pars.shells expected = [{'user_index': 1, 'lshell': 2, 'ion_list': np.array([4, 5, 6, 7])}, diff --git a/python/vasp/test/_inpconf/test_special_parsers.py b/python/vasp/test/_inpconf/test_special_parsers.py index 233c44a0..61fbbcb6 100644 --- a/python/vasp/test/_inpconf/test_special_parsers.py +++ b/python/vasp/test/_inpconf/test_special_parsers.py @@ -1,6 +1,10 @@ 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 @@ -26,7 +30,7 @@ class TestParseStringLogical(arraytest.ArrayTestCase): """ """ # Dummy ConfigParameters object - self.cpars = ConfigParameters('test1.cfg') + self.cpars = ConfigParameters(_rpath + 'test1.cfg') # Scenario 1 def test_true(self): @@ -66,7 +70,7 @@ class TestParseStringIonList(arraytest.ArrayTestCase): """ """ # Dummy ConfigParameters object - self.cpars = ConfigParameters('test1.cfg') + self.cpars = ConfigParameters(_rpath + 'test1.cfg') # Scenario 1 def test_simple_list(self): @@ -123,7 +127,7 @@ class TestParseStringTmatrix(arraytest.ArrayTestCase): """ """ # Dummy ConfigParameters object - self.cpars = ConfigParameters('test1.cfg') + self.cpars = ConfigParameters(_rpath + 'test1.cfg') # Scenario 1 def test_number_of_columns(self): diff --git a/python/vasp/test/run_all.sh b/python/vasp/test/run_all.sh index 5d4368ea..97e004bd 100755 --- a/python/vasp/test/run_all.sh +++ b/python/vasp/test/run_all.sh @@ -1 +1 @@ -PYTHONPATH=$HOME/Codes/vasp/vasp5.3/plo_vasp/plovasp/python:$HOME/Codes/vasp/vasp5.3/plo_vasp/plovasp/c:$PYTHONPATH python test_all.py +PYTHONPATH=../:../../../c:$PYTHONPATH python test_all.py From 3aba5f41358e76298c0a597e792c46218e197af7 Mon Sep 17 00:00:00 2001 From: "Oleg E. Peil" Date: Fri, 16 Oct 2015 11:22:38 +0200 Subject: [PATCH 2/4] Added a doc-string to rpath.py --- python/vasp/test/_inpconf/rpath.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/vasp/test/_inpconf/rpath.py b/python/vasp/test/_inpconf/rpath.py index d289e092..b5d349d4 100644 --- a/python/vasp/test/_inpconf/rpath.py +++ b/python/vasp/test/_inpconf/rpath.py @@ -1,2 +1,5 @@ - +r""" +The sole role of this module is to determine the current path by +examining rpath.__file__. +""" pass From dda331b986785bc0ec23e0e40003087cda1e6cec Mon Sep 17 00:00:00 2001 From: "Oleg E. Peil" Date: Fri, 16 Oct 2015 11:52:33 +0200 Subject: [PATCH 3/4] Fixed 'vaspio' tests Added 'rpath.py' module to determine the current directory. Also fixed the test example for EIGENVAL: VASP 5.4 uses a format with Fermi weights output (unlike previous versions). --- python/vasp/test/_vaspio/EIGENVAL.example | 148 ++++++++--- python/vasp/test/_vaspio/EIGENVAL.example.out | 250 +++++++++++++++--- python/vasp/test/_vaspio/rpath.py | 5 + python/vasp/test/_vaspio/runtest.sh | 2 +- python/vasp/test/_vaspio/test_doscar.py | 6 +- python/vasp/test/_vaspio/test_eigenval.py | 11 +- python/vasp/test/_vaspio/test_kpoints.py | 16 +- python/vasp/test/_vaspio/test_poscar.py | 12 +- 8 files changed, 352 insertions(+), 98 deletions(-) create mode 100644 python/vasp/test/_vaspio/rpath.py diff --git a/python/vasp/test/_vaspio/EIGENVAL.example b/python/vasp/test/_vaspio/EIGENVAL.example index 04b5ed4b..202d884d 100644 --- a/python/vasp/test/_vaspio/EIGENVAL.example +++ b/python/vasp/test/_vaspio/EIGENVAL.example @@ -3,48 +3,114 @@ 1.000000000000000E-004 CAR V - 11 4 9 + 11 10 9 - 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3703704E-01 - 1 -31.099965 - 2 -31.099965 - 3 -31.099965 - 4 -0.813470 - 5 5.974027 - 6 5.974027 - 7 5.974027 - 8 7.986328 - 9 7.986328 + 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.8000000E-02 + 1 -30.901243 1.000000 + 2 -30.901242 1.000000 + 3 -30.901242 1.000000 + 4 -0.812822 1.000000 + 5 6.116281 0.307472 + 6 6.116282 0.000314 + 7 6.116282 0.000000 + 8 8.139559 0.000000 + 9 8.139559 0.000000 - 0.3333333E+00 0.0000000E+00 0.0000000E+00 0.4444444E+00 - 1 -31.819277 - 2 -31.322999 - 3 -31.105684 - 4 2.193081 - 5 4.784864 - 6 5.839340 - 7 7.833446 - 8 8.202781 - 9 8.589551 + 0.2000000E+00 0.0000000E+00 0.0000000E+00 0.9600000E-01 + 1 -31.244548 1.000000 + 2 -31.006017 1.000000 + 3 -30.904003 1.000000 + 4 0.680258 1.000000 + 5 5.527848 0.997357 + 6 5.837887 0.407717 + 7 7.226963 0.000000 + 8 7.781889 0.000000 + 9 8.207361 0.000000 - 0.3333333E+00 0.3333333E+00 0.0000000E+00 0.2962963E+00 - 1 -31.750021 - 2 -31.750021 - 3 -31.217560 - 4 3.978315 - 5 4.708263 - 6 4.708263 - 7 8.262522 - 8 8.262522 - 9 14.771374 + 0.4000000E+00 0.0000000E+00 0.0000000E+00 0.9600000E-01 + 1 -31.771778 1.000000 + 2 -31.171899 1.000000 + 3 -30.908401 1.000000 + 4 2.486834 1.000000 + 5 4.687631 1.003771 + 6 6.633241 -0.148217 + 7 8.121131 0.000000 + 8 8.444990 0.000000 + 9 9.443636 0.000000 - -0.3333333E+00 0.3333333E+00 0.3333333E+00 0.2222222E+00 - 1 -31.719893 - 2 -31.577292 - 3 -31.577292 - 4 3.383714 - 5 3.756320 - 6 7.355029 - 7 7.355029 - 8 8.411511 - 9 11.054129 + 0.2000000E+00 0.2000000E+00 0.0000000E+00 0.1920000E+00 + 1 -31.593915 1.000000 + 2 -31.156860 1.000000 + 3 -30.976267 1.000000 + 4 2.768444 1.000000 + 5 4.858815 1.008186 + 6 5.229541 1.085485 + 7 7.709737 0.000000 + 8 8.541449 0.000000 + 9 9.490980 0.000000 + + 0.4000000E+00 0.2000000E+00 -0.5551115E-16 0.1920000E+00 + 1 -31.739891 1.000000 + 2 -31.337400 1.000000 + 3 -30.997116 1.000000 + 4 3.394894 1.000000 + 5 4.629829 1.000179 + 6 5.695587 0.810394 + 7 8.098534 0.000000 + 8 8.743598 0.000000 + 9 12.244586 0.000000 + + 0.2000000E+00 0.2000000E+00 0.2000000E+00 0.6400000E-01 + 1 -31.617656 1.000000 + 2 -31.220150 1.000000 + 3 -31.220150 1.000000 + 4 4.450254 1.000000 + 5 4.450254 1.000000 + 6 4.634359 1.062133 + 7 8.491526 0.000000 + 8 8.491526 0.000000 + 9 12.973660 0.000000 + + -0.2000000E+00 0.2000000E+00 0.2000000E+00 0.4800000E-01 + 1 -31.296977 1.000000 + 2 -31.117861 1.000000 + 3 -31.117861 1.000000 + 4 1.927890 1.000000 + 5 5.995969 0.879283 + 6 6.272225 -0.010798 + 7 6.272226 0.000000 + 8 7.198547 0.000000 + 9 8.910235 0.000000 + + -0.4000000E+00 0.4000000E+00 0.2000000E+00 0.1920000E+00 + 1 -31.682485 1.000000 + 2 -31.294549 1.000000 + 3 -31.142973 1.000000 + 4 3.381464 1.000000 + 5 4.651227 1.002211 + 6 5.929509 0.183505 + 7 7.231965 0.000000 + 8 9.259558 0.000000 + 9 10.660847 0.000000 + + -0.4000000E+00 -0.4000000E+00 0.2000000E+00 0.6400000E-01 + 1 -31.585360 1.000000 + 2 -31.585359 1.000000 + 3 -31.188820 1.000000 + 4 3.846295 1.000000 + 5 3.846295 1.000298 + 6 5.810197 0.324984 + 7 8.723375 0.000000 + 8 8.723376 0.000000 + 9 15.381038 0.000000 + + -0.4000000E+00 0.4000000E+00 0.4000000E+00 0.4800000E-01 + 1 -31.554619 1.000000 + 2 -31.488158 1.000000 + 3 -31.488158 1.000000 + 4 3.090314 1.000000 + 5 3.105025 1.000861 + 6 8.500437 -0.068292 + 7 8.500437 0.000000 + 8 9.144518 0.000000 + 9 13.491662 0.000000 diff --git a/python/vasp/test/_vaspio/EIGENVAL.example.out b/python/vasp/test/_vaspio/EIGENVAL.example.out index a59166b4..1f1160bc 100644 --- a/python/vasp/test/_vaspio/EIGENVAL.example.out +++ b/python/vasp/test/_vaspio/EIGENVAL.example.out @@ -1,52 +1,218 @@ nq = 1 ispin = 1 nelect = 11 -nktot = 4 +nktot = 10 nband = 9 kpts: -[[ 0. 0. 0. ] - [ 0.3333333 0. 0. ] - [ 0.3333333 0.3333333 0. ] - [-0.3333333 0.3333333 0.3333333]] +[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 2.00000000e-01 0.00000000e+00 0.00000000e+00] + [ 4.00000000e-01 0.00000000e+00 0.00000000e+00] + [ 2.00000000e-01 2.00000000e-01 0.00000000e+00] + [ 4.00000000e-01 2.00000000e-01 -5.55111500e-17] + [ 2.00000000e-01 2.00000000e-01 2.00000000e-01] + [ -2.00000000e-01 2.00000000e-01 2.00000000e-01] + [ -4.00000000e-01 4.00000000e-01 2.00000000e-01] + [ -4.00000000e-01 -4.00000000e-01 2.00000000e-01] + [ -4.00000000e-01 4.00000000e-01 4.00000000e-01]] kwghts: -[ 0.03703704 0.4444444 0.2962963 0.2222222 ] +[ 0.008 0.096 0.096 0.192 0.192 0.064 0.048 0.192 0.064 0.048] eigs: -[[[-31.099965] - [-31.099965] - [-31.099965] - [ -0.81347 ] - [ 5.974027] - [ 5.974027] - [ 5.974027] - [ 7.986328] - [ 7.986328]] +[[[-30.901243] + [-30.901242] + [-30.901242] + [ -0.812822] + [ 6.116281] + [ 6.116282] + [ 6.116282] + [ 8.139559] + [ 8.139559]] - [[-31.819277] - [-31.322999] - [-31.105684] - [ 2.193081] - [ 4.784864] - [ 5.83934 ] - [ 7.833446] - [ 8.202781] - [ 8.589551]] + [[-31.244548] + [-31.006017] + [-30.904003] + [ 0.680258] + [ 5.527848] + [ 5.837887] + [ 7.226963] + [ 7.781889] + [ 8.207361]] - [[-31.750021] - [-31.750021] - [-31.21756 ] - [ 3.978315] - [ 4.708263] - [ 4.708263] - [ 8.262522] - [ 8.262522] - [ 14.771374]] + [[-31.771778] + [-31.171899] + [-30.908401] + [ 2.486834] + [ 4.687631] + [ 6.633241] + [ 8.121131] + [ 8.44499 ] + [ 9.443636]] - [[-31.719893] - [-31.577292] - [-31.577292] - [ 3.383714] - [ 3.75632 ] - [ 7.355029] - [ 7.355029] - [ 8.411511] - [ 11.054129]]] + [[-31.593915] + [-31.15686 ] + [-30.976267] + [ 2.768444] + [ 4.858815] + [ 5.229541] + [ 7.709737] + [ 8.541449] + [ 9.49098 ]] + + [[-31.739891] + [-31.3374 ] + [-30.997116] + [ 3.394894] + [ 4.629829] + [ 5.695587] + [ 8.098534] + [ 8.743598] + [ 12.244586]] + + [[-31.617656] + [-31.22015 ] + [-31.22015 ] + [ 4.450254] + [ 4.450254] + [ 4.634359] + [ 8.491526] + [ 8.491526] + [ 12.97366 ]] + + [[-31.296977] + [-31.117861] + [-31.117861] + [ 1.92789 ] + [ 5.995969] + [ 6.272225] + [ 6.272226] + [ 7.198547] + [ 8.910235]] + + [[-31.682485] + [-31.294549] + [-31.142973] + [ 3.381464] + [ 4.651227] + [ 5.929509] + [ 7.231965] + [ 9.259558] + [ 10.660847]] + + [[-31.58536 ] + [-31.585359] + [-31.18882 ] + [ 3.846295] + [ 3.846295] + [ 5.810197] + [ 8.723375] + [ 8.723376] + [ 15.381038]] + + [[-31.554619] + [-31.488158] + [-31.488158] + [ 3.090314] + [ 3.105025] + [ 8.500437] + [ 8.500437] + [ 9.144518] + [ 13.491662]]] +ferw: +[[[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 3.07472000e-01] + [ 3.14000000e-04] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 9.97357000e-01] + [ 4.07717000e-01] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00377100e+00] + [ -1.48217000e-01] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00818600e+00] + [ 1.08548500e+00] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00017900e+00] + [ 8.10394000e-01] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.06213300e+00] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 8.79283000e-01] + [ -1.07980000e-02] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00221100e+00] + [ 1.83505000e-01] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00029800e+00] + [ 3.24984000e-01] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]] + + [[ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00000000e+00] + [ 1.00086100e+00] + [ -6.82920000e-02] + [ 0.00000000e+00] + [ 0.00000000e+00] + [ 0.00000000e+00]]] diff --git a/python/vasp/test/_vaspio/rpath.py b/python/vasp/test/_vaspio/rpath.py new file mode 100644 index 00000000..b5d349d4 --- /dev/null +++ b/python/vasp/test/_vaspio/rpath.py @@ -0,0 +1,5 @@ +r""" +The sole role of this module is to determine the current path by +examining rpath.__file__. +""" +pass diff --git a/python/vasp/test/_vaspio/runtest.sh b/python/vasp/test/_vaspio/runtest.sh index 9b7bd8ca..4537817b 100755 --- a/python/vasp/test/_vaspio/runtest.sh +++ b/python/vasp/test/_vaspio/runtest.sh @@ -1 +1 @@ -PYTHONPATH=../../python:../../c:$PYTHONPATH python $1 +PYTHONPATH=../..:../../../../c:$PYTHONPATH python $1 diff --git a/python/vasp/test/_vaspio/test_doscar.py b/python/vasp/test/_vaspio/test_doscar.py index 721c6be9..b4ee9d66 100644 --- a/python/vasp/test/_vaspio/test_doscar.py +++ b/python/vasp/test/_vaspio/test_doscar.py @@ -1,6 +1,10 @@ r""" Tests for class 'Doscar' from module 'vaspio' """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import mytest import numpy as np from vaspio import Doscar @@ -24,7 +28,7 @@ class TestDoscar(mytest.MyTestCase): def test_example(self): filename = 'DOSCAR.example' doscar = Doscar() - doscar.from_file(vasp_dir='./', dos_filename=filename) + doscar.from_file(vasp_dir=_rpath, dos_filename=filename) test_efermi = doscar.efermi expected = 5.84395237 diff --git a/python/vasp/test/_vaspio/test_eigenval.py b/python/vasp/test/_vaspio/test_eigenval.py index 612eccdc..6a55f548 100644 --- a/python/vasp/test/_vaspio/test_eigenval.py +++ b/python/vasp/test/_vaspio/test_eigenval.py @@ -1,6 +1,10 @@ r""" Tests for class 'Eigneval' from module 'vaspio' """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import mytest import numpy as np from vaspio import Eigenval @@ -24,9 +28,9 @@ class TestEigenval(mytest.MyTestCase): def test_example(self): filename = 'EIGENVAL.example' eigenval = Eigenval() - eigenval.from_file(vasp_dir='./', eig_filename=filename) + eigenval.from_file(vasp_dir=_rpath, eig_filename=filename) - testout = 'EIGENVAL.example.out.test' + testout = _rpath + 'EIGENVAL.example.out.test' with open(testout, 'w') as f: writeline = lambda s: f.write(s + '\n') writeprop = lambda pname: writeline("%s = %s"%(pname, eigenval.__dict__[pname])) @@ -39,7 +43,8 @@ class TestEigenval(mytest.MyTestCase): writeline("kpts:\n%s"%(eigenval.kpts)) writeline("kwghts:\n%s"%(eigenval.kwghts)) writeline("eigs:\n%s"%(eigenval.eigs)) + writeline("ferw:\n%s"%(eigenval.ferw)) - expected = 'EIGENVAL.example.out' + expected = _rpath + 'EIGENVAL.example.out' self.assertFileEqual(testout, expected) diff --git a/python/vasp/test/_vaspio/test_kpoints.py b/python/vasp/test/_vaspio/test_kpoints.py index 6b4849de..e31e69b9 100644 --- a/python/vasp/test/_vaspio/test_kpoints.py +++ b/python/vasp/test/_vaspio/test_kpoints.py @@ -1,6 +1,10 @@ r""" Tests for class 'Ibzkpt' from module 'vaspio' """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import mytest import numpy as np from vaspio import Kpoints @@ -25,9 +29,9 @@ class TestIbzkpt(mytest.MyTestCase): def test_example(self): ibz_file = 'IBZKPT.example' kpoints = Kpoints() - kpoints.from_file(vasp_dir='./', ibz_filename=ibz_file) + kpoints.from_file(vasp_dir=_rpath, ibz_filename=ibz_file) - testout = 'IBZKPT.example.out.test' + testout = _rpath + 'IBZKPT.example.out.test' with open(testout, 'w') as f: writeline = lambda s: f.write(s + '\n') writeline("nktot = %s"%(kpoints.nktot)) @@ -36,22 +40,22 @@ class TestIbzkpt(mytest.MyTestCase): writeline("kpts:\n%s"%(kpoints.kpts)) writeline("tets:\n%s"%(kpoints.itet)) - expected = 'IBZKPT.example.out' + expected = _rpath + 'IBZKPT.example.out' self.assertFileEqual(testout, expected) # Scenario 2 def test_notet(self): ibz_file = 'IBZKPT.notet' kpoints = Kpoints() - kpoints.from_file(vasp_dir='./', ibz_filename=ibz_file) + kpoints.from_file(vasp_dir=_rpath, ibz_filename=ibz_file) - testout = 'IBZKPT.notet.out.test' + testout = _rpath + 'IBZKPT.notet.out.test' with open(testout, 'w') as f: writeline = lambda s: f.write(s + '\n') writeline("nktot = %s"%(kpoints.nktot)) writeline("kpts:\n%s"%(kpoints.kpts)) - expected = 'IBZKPT.notet.out' + expected = _rpath + 'IBZKPT.notet.out' self.assertFileEqual(testout, expected) diff --git a/python/vasp/test/_vaspio/test_poscar.py b/python/vasp/test/_vaspio/test_poscar.py index 10f7b395..9e9ad7f9 100644 --- a/python/vasp/test/_vaspio/test_poscar.py +++ b/python/vasp/test/_vaspio/test_poscar.py @@ -1,6 +1,10 @@ r""" Tests for class 'Poscar' from module 'vaspio' """ +import os +import rpath +_rpath = os.path.dirname(rpath.__file__) + '/' + import mytest import numpy as np from vaspio import Poscar @@ -25,9 +29,9 @@ class TestPoscar(mytest.MyTestCase): def test_example(self): filename = 'POSCAR.example' poscar = Poscar() - poscar.from_file(vasp_dir='./', poscar_filename=filename) + poscar.from_file(vasp_dir=_rpath, poscar_filename=filename) - testout = 'POSCAR.example.out.test' + testout = _rpath + 'POSCAR.example.out.test' with open(testout, 'w') as f: writeline = lambda s: f.write(s + '\n') writeprop = lambda pname: writeline("%s = %s"%(pname, poscar.__dict__[pname])) @@ -39,14 +43,14 @@ class TestPoscar(mytest.MyTestCase): writeline("a_brav:\n%s"%(poscar.a_brav)) writeline("q_types:\n%s"%(poscar.q_types)) - expected = 'POSCAR.example.out' + expected = _rpath + 'POSCAR.example.out' self.assertFileEqual(testout, expected) # Scenario 2 def test_type_of_ion(self): filename = 'POSCAR.complex' poscar = Poscar() - poscar.from_file(vasp_dir='./', poscar_filename=filename) + poscar.from_file(vasp_dir=_rpath, poscar_filename=filename) test_types = 4 * [0] + 4 * [1] + 12 * [2] self.assertListEqual(test_types, poscar.type_of_ion) From 87b00f61b165eaa101c31dda926e869bfdb0359b Mon Sep 17 00:00:00 2001 From: "Oleg E. Peil" Date: Fri, 16 Oct 2015 11:59:02 +0200 Subject: [PATCH 4/4] Added a format check for EIGENVAL to vaspio.py Added a check to 'vaspio.py' testing that the number of columns implies that the Fermi weights are present in EIGENVAL. This check ensures that the new format (starting from VASP 5.4) of the file is used. Corresponding test is added to the suite. --- python/vasp/test/_vaspio/EIGENVAL.wrong | 50 +++++++++++++++++++++++ python/vasp/test/_vaspio/test_eigenval.py | 10 +++++ python/vasp/vaspio.py | 1 + 3 files changed, 61 insertions(+) create mode 100644 python/vasp/test/_vaspio/EIGENVAL.wrong diff --git a/python/vasp/test/_vaspio/EIGENVAL.wrong b/python/vasp/test/_vaspio/EIGENVAL.wrong new file mode 100644 index 00000000..04b5ed4b --- /dev/null +++ b/python/vasp/test/_vaspio/EIGENVAL.wrong @@ -0,0 +1,50 @@ + 1 1 1 1 + 0.1333597E+02 0.2587511E-09 0.2587511E-09 0.2587511E-09 0.5000000E-15 + 1.000000000000000E-004 + CAR + V + 11 4 9 + + 0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3703704E-01 + 1 -31.099965 + 2 -31.099965 + 3 -31.099965 + 4 -0.813470 + 5 5.974027 + 6 5.974027 + 7 5.974027 + 8 7.986328 + 9 7.986328 + + 0.3333333E+00 0.0000000E+00 0.0000000E+00 0.4444444E+00 + 1 -31.819277 + 2 -31.322999 + 3 -31.105684 + 4 2.193081 + 5 4.784864 + 6 5.839340 + 7 7.833446 + 8 8.202781 + 9 8.589551 + + 0.3333333E+00 0.3333333E+00 0.0000000E+00 0.2962963E+00 + 1 -31.750021 + 2 -31.750021 + 3 -31.217560 + 4 3.978315 + 5 4.708263 + 6 4.708263 + 7 8.262522 + 8 8.262522 + 9 14.771374 + + -0.3333333E+00 0.3333333E+00 0.3333333E+00 0.2222222E+00 + 1 -31.719893 + 2 -31.577292 + 3 -31.577292 + 4 3.383714 + 5 3.756320 + 6 7.355029 + 7 7.355029 + 8 8.411511 + 9 11.054129 diff --git a/python/vasp/test/_vaspio/test_eigenval.py b/python/vasp/test/_vaspio/test_eigenval.py index 6a55f548..d94047a2 100644 --- a/python/vasp/test/_vaspio/test_eigenval.py +++ b/python/vasp/test/_vaspio/test_eigenval.py @@ -22,6 +22,7 @@ class TestEigenval(mytest.MyTestCase): Scenarios: - correct EIGENVAL file + - wrong EIGENVAL file from old versions of VASP """ # Scenario 1 @@ -48,3 +49,12 @@ class TestEigenval(mytest.MyTestCase): expected = _rpath + 'EIGENVAL.example.out' self.assertFileEqual(testout, expected) +# Scenario 2 + def test_bad_example(self): + filename = 'EIGENVAL.wrong' + eigenval = Eigenval() + + err_mess = "EIGENVAL file is incorrect" + with self.assertRaisesRegexp(AssertionError, err_mess): + eigenval.from_file(vasp_dir=_rpath, eig_filename=filename) + diff --git a/python/vasp/vaspio.py b/python/vasp/vaspio.py index efdfac75..4498cfef 100644 --- a/python/vasp/vaspio.py +++ b/python/vasp/vaspio.py @@ -445,6 +445,7 @@ class Eigenval: for ib in xrange(self.nband): sline = f.next().split() tmp = map(float, sline) + assert len(tmp) == 2 * self.ispin + 1, "EIGENVAL file is incorrect (probably from old versions of VASP)" self.eigs[ik, ib, :] = tmp[1:self.ispin+1] self.ferw[ik, ib, :] = tmp[self.ispin+1:]