Coverage for gpaw/test/response/test_bse_parse_bands.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-19 00:19 +0000

1import pytest 

2import numpy as np 

3from gpaw.response.bse import BSE 

4 

5 

6@pytest.mark.response 

7def test_response_bse_parse_bands(in_tmp_dir, gpw_files): 

8 

9 bse = BSE(gpw_files['mos2_pw'], 

10 ecut=10, 

11 valence_bands=4, 

12 conduction_bands=3, 

13 eshift=0.8, 

14 nbands=15) 

15 

16 # Check consistency with written results 

17 n_valence_bands = int(bse.gs.nvalence / 2) 

18 correct_valence_n = range(n_valence_bands - 4, n_valence_bands) 

19 correct_conduction_n = range(n_valence_bands, n_valence_bands + 3) 

20 

21 assert np.array_equal(correct_valence_n, bse.val_m) 

22 assert np.array_equal(correct_conduction_n, bse.con_m) 

23 

24 bse = BSE(gpw_files['mos2_pw'], 

25 ecut=10, 

26 add_soc=True, 

27 valence_bands=8, 

28 conduction_bands=6, 

29 eshift=0.8, 

30 nbands=15) 

31 

32 # Check consistency with written results 

33 n_valence_bands = bse.gs.nvalence 

34 correct_valence_n = range(n_valence_bands - 8, n_valence_bands) 

35 correct_conduction_n = range(n_valence_bands, n_valence_bands + 6) 

36 

37 assert np.array_equal(correct_valence_n, bse.val_m) 

38 assert np.array_equal(correct_conduction_n, bse.con_m) 

39 

40 with pytest.raises(ValueError, 

41 match='The bands must be specified as a single *'): 

42 BSE(gpw_files['bse_al'], 

43 valence_bands=[range(4), range(4)], 

44 conduction_bands=5, 

45 nbands=4, 

46 ecut=10)