• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

materialsproject / pymatgen / 4075885785

pending completion
4075885785

push

github

Shyue Ping Ong
Merge branch 'master' of github.com:materialsproject/pymatgen

96 of 96 new or added lines in 27 files covered. (100.0%)

81013 of 102710 relevant lines covered (78.88%)

0.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.77
/pymatgen/electronic_structure/tests/test_dos.py
1
# Copyright (c) Pymatgen Development Team.
2
# Distributed under the terms of the MIT License.
3

4

5
from __future__ import annotations
1✔
6

7
import json
1✔
8
import os
1✔
9
import unittest
1✔
10

11
import numpy as np
1✔
12
import pytest
1✔
13
from monty.io import zopen
1✔
14
from monty.serialization import loadfn
1✔
15
from pytest import approx
1✔
16

17
from pymatgen.core.periodic_table import Element
1✔
18
from pymatgen.core.structure import Structure
1✔
19
from pymatgen.electronic_structure.core import Orbital, OrbitalType, Spin
1✔
20
from pymatgen.electronic_structure.dos import (
1✔
21
    DOS,
22
    CompleteDos,
23
    FermiDos,
24
    LobsterCompleteDos,
25
)
26
from pymatgen.util.testing import PymatgenTest
1✔
27

28

29
class DosTest(unittest.TestCase):
1✔
30
    def setUp(self):
1✔
31
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "complete_dos.json")) as f:
1✔
32
            self.dos = CompleteDos.from_dict(json.load(f))
1✔
33

34
    def test_get_gap(self):
1✔
35
        dos = self.dos
1✔
36
        assert dos.get_gap() == approx(2.0589, abs=1e-4)
1✔
37
        assert len(dos.energies) == 301
1✔
38
        assert dos.get_interpolated_gap(tol=0.001, abs_tol=False, spin=None)[0] == approx(2.16815942458015, abs=1e-7)
1✔
39
        assert dos.get_cbm_vbm() == approx((3.8729, 1.8140000000000001))
1✔
40

41
        assert dos.get_interpolated_value(9.9)[Spin.up] == approx(1.744588888888891, abs=1e-7)
1✔
42
        assert dos.get_interpolated_value(9.9)[Spin.down] == approx(1.756888888888886, abs=1e-7)
1✔
43
        with pytest.raises(ValueError):
1✔
44
            dos.get_interpolated_value(1000)
1✔
45

46
    def test_get_smeared_densities(self):
1✔
47
        dos = self.dos
1✔
48
        smeared = dos.get_smeared_densities(0.2)
1✔
49
        dens = dos.densities
1✔
50
        for spin in Spin:
1✔
51
            assert sum(dens[spin]) == approx(sum(smeared[spin]))
1✔
52

53
    def test_as_dict(self):
1✔
54
        dos_dict = self.dos.as_dict()
1✔
55
        assert isinstance(dos_dict["energies"], list)
1✔
56
        assert isinstance(dos_dict["energies"][0], float)
1✔
57
        assert not isinstance(dos_dict["energies"][0], np.float64)
1✔
58

59
        assert isinstance(dos_dict["densities"]["1"], list)
1✔
60
        assert isinstance(dos_dict["densities"]["1"][0], float)
1✔
61
        assert not isinstance(dos_dict["densities"]["1"][0], np.float64)
1✔
62

63

64
class FermiDosTest(unittest.TestCase):
1✔
65
    def setUp(self):
1✔
66
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "complete_dos.json")) as f:
1✔
67
            self.dos = CompleteDos.from_dict(json.load(f))
1✔
68
        self.dos = FermiDos(self.dos)
1✔
69

70
    def test_doping_fermi(self):
1✔
71
        T = 300
1✔
72
        fermi0 = self.dos.efermi
1✔
73
        frange = [fermi0 - 0.5, fermi0, fermi0 + 2.0, fermi0 + 2.2]
1✔
74
        dopings = [self.dos.get_doping(fermi_level=f, temperature=T) for f in frange]
1✔
75
        ref_dopings = [3.48077e21, 1.9235e18, -2.6909e16, -4.8723e19]
1✔
76
        for i, c_ref in enumerate(ref_dopings):
1✔
77
            assert abs(dopings[i] / c_ref - 1.0) <= 0.01
1✔
78

79
        calc_fermis = [self.dos.get_fermi(concentration=c, temperature=T) for c in ref_dopings]
1✔
80
        for j, f_ref in enumerate(frange):
1✔
81
            assert calc_fermis[j] == approx(f_ref, abs=1e-4)
1✔
82

83
        sci_dos = FermiDos(self.dos, bandgap=3.0)
1✔
84
        assert sci_dos.get_gap() == 3.0
1✔
85
        old_cbm, old_vbm = self.dos.get_cbm_vbm()
1✔
86
        old_gap = old_cbm - old_vbm
1✔
87
        new_cbm, new_vbm = sci_dos.get_cbm_vbm()
1✔
88
        assert new_cbm - old_cbm == approx((3.0 - old_gap) / 2.0)
1✔
89
        assert old_vbm - new_vbm == approx((3.0 - old_gap) / 2.0)
1✔
90
        for i, c_ref in enumerate(ref_dopings):
1✔
91
            if c_ref < 0:
1✔
92
                assert sci_dos.get_fermi(c_ref, temperature=T) - frange[i] == approx(0.47, abs=1e-2)
1✔
93
            else:
94
                assert sci_dos.get_fermi(c_ref, temperature=T) - frange[i] == approx(-0.47, abs=1e-2)
1✔
95

96
        assert sci_dos.get_fermi_interextrapolated(-1e26, 300) == approx(7.5108, abs=1e-4)
1✔
97
        assert sci_dos.get_fermi_interextrapolated(1e26, 300) == approx(-1.4182, abs=1e-4)
1✔
98
        assert sci_dos.get_fermi_interextrapolated(0.0, 300) == approx(2.9071, abs=1e-4)
1✔
99

100
    def test_as_dict(self):
1✔
101
        dos_dict = self.dos.as_dict()
1✔
102
        assert isinstance(dos_dict["energies"], list)
1✔
103
        assert isinstance(dos_dict["energies"][0], float)
1✔
104
        assert not isinstance(dos_dict["energies"][0], np.float64)
1✔
105

106
        assert isinstance(dos_dict["densities"]["1"], list)
1✔
107
        assert isinstance(dos_dict["densities"]["1"][0], float)
1✔
108
        assert not isinstance(dos_dict["densities"]["1"][0], np.float64)
1✔
109

110

111
class CompleteDosTest(unittest.TestCase):
1✔
112
    def setUp(self):
1✔
113
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "complete_dos.json")) as f:
1✔
114
            self.dos = CompleteDos.from_dict(json.load(f))
1✔
115
        with zopen(os.path.join(PymatgenTest.TEST_FILES_DIR, "pdag3_complete_dos.json.gz")) as f:
1✔
116
            self.dos_pdag3 = CompleteDos.from_dict(json.load(f))
1✔
117

118
    def test_get_gap(self):
1✔
119
        dos = self.dos
1✔
120
        assert dos.get_gap() == approx(2.0589, abs=1e-4), "Wrong gap from dos!"
1✔
121
        assert len(dos.energies) == 301
1✔
122
        assert dos.get_interpolated_gap(tol=0.001, abs_tol=False, spin=None)[0] == approx(2.16815942458015, abs=1e-7)
1✔
123
        spd_dos = dos.get_spd_dos()
1✔
124
        assert len(spd_dos) == 3
1✔
125
        el_dos = dos.get_element_dos()
1✔
126
        assert len(el_dos) == 4
1✔
127
        sum_spd = spd_dos[OrbitalType.s] + spd_dos[OrbitalType.p] + spd_dos[OrbitalType.d]
1✔
128
        sum_element = None
1✔
129
        for pdos in el_dos.values():
1✔
130
            if sum_element is None:
1✔
131
                sum_element = pdos
1✔
132
            else:
133
                sum_element += pdos
1✔
134

135
        # The sums of the SPD or the element doses should be the same.
136
        assert (abs(sum_spd.energies - sum_element.energies) < 0.0001).all()
1✔
137
        assert (abs(sum_spd.densities[Spin.up] - sum_element.densities[Spin.up]) < 0.0001).all()
1✔
138
        assert (abs(sum_spd.densities[Spin.down] - sum_element.densities[Spin.down]) < 0.0001).all()
1✔
139

140
        site = dos.structure[0]
1✔
141
        assert dos.get_site_dos(site) is not None
1✔
142
        assert sum(dos.get_site_dos(site).get_densities(Spin.up)) == approx(2.0391)
1✔
143
        assert sum(dos.get_site_dos(site).get_densities(Spin.down)) == approx(2.0331999999999995)
1✔
144
        assert dos.get_site_orbital_dos(site, Orbital.s) is not None
1✔
145
        egt2g = dos.get_site_t2g_eg_resolved_dos(site)
1✔
146
        assert sum(egt2g["e_g"].get_densities(Spin.up)) == approx(0.0)
1✔
147
        assert sum(egt2g["t2g"].get_densities(Spin.up)) == approx(0.0)
1✔
148
        egt2g = dos.get_site_t2g_eg_resolved_dos(dos.structure[4])
1✔
149
        assert sum(egt2g["e_g"].get_densities(Spin.up)) == approx(15.004399999999997)
1✔
150
        assert sum(egt2g["t2g"].get_densities(Spin.up)) == approx(22.910399999999999)
1✔
151
        assert dos.get_cbm_vbm() == approx((3.8729, 1.8140000000000001))
1✔
152

153
        assert dos.get_interpolated_value(9.9)[Spin.up] == approx(1.744588888888891, abs=1e-7)
1✔
154
        assert dos.get_interpolated_value(9.9)[Spin.down] == approx(1.756888888888886, abs=1e-7)
1✔
155
        with pytest.raises(ValueError):
1✔
156
            dos.get_interpolated_value(1000)
1✔
157

158
    def test_to_from_dict(self):
1✔
159
        d = self.dos.as_dict()
1✔
160
        dos = CompleteDos.from_dict(d)
1✔
161
        el_dos = dos.get_element_dos()
1✔
162
        assert len(el_dos) == 4
1✔
163
        spd_dos = dos.get_spd_dos()
1✔
164
        sum_spd = spd_dos[OrbitalType.s] + spd_dos[OrbitalType.p] + spd_dos[OrbitalType.d]
1✔
165
        sum_element = None
1✔
166
        for pdos in el_dos.values():
1✔
167
            if sum_element is None:
1✔
168
                sum_element = pdos
1✔
169
            else:
170
                sum_element += pdos
1✔
171

172
        # The sums of the SPD or the element doses should be the same.
173
        assert (abs(sum_spd.energies - sum_element.energies) < 0.0001).all()
1✔
174

175
    def test_str(self):
1✔
176
        assert str(self.dos) is not None
1✔
177

178
    def test_as_dict(self):
1✔
179
        dos_dict = self.dos.as_dict()
1✔
180
        assert isinstance(dos_dict["energies"], list)
1✔
181
        assert isinstance(dos_dict["energies"][0], float)
1✔
182
        assert not isinstance(dos_dict["energies"][0], np.float64)
1✔
183

184
        assert isinstance(dos_dict["densities"]["1"], list)
1✔
185
        assert isinstance(dos_dict["densities"]["1"][0], float)
1✔
186
        assert not isinstance(dos_dict["densities"]["1"][0], np.float64)
1✔
187

188
    def test_get_band_center(self):
1✔
189
        dos = self.dos_pdag3
1✔
190
        struct = dos.structure
1✔
191
        band_center = dos.get_band_center()
1✔
192
        assert band_center == approx(-3.078841005723767)
1✔
193

194
        band_center = dos.get_band_center(elements=[Element("Ag"), Element("Pd")])
1✔
195
        assert band_center == approx(-3.078841005723767)
1✔
196

197
        band_center = dos.get_band_center(elements=[Element("Pd")])
1✔
198
        assert band_center == approx(-1.476449501704171)
1✔
199

200
        band_center = dos.get_band_center(sites=[s for s in struct if s.species_string == "Pd"])
1✔
201
        assert band_center == approx(-1.476449501704171)
1✔
202

203
        band_center = dos.get_band_center(sites=[struct[-3]])
1✔
204
        assert band_center == approx(-1.4144921311083436)
1✔
205

206
        band_center = dos.get_band_center(band=OrbitalType.p)
1✔
207
        assert band_center == approx(0.9430322204760462)
1✔
208

209
        band_center = dos.get_band_center(elements=[Element("Pd")], band=OrbitalType.p)
1✔
210
        assert band_center == approx(0.7825770239165218)
1✔
211

212
        band_center = dos.get_band_center(elements=[Element("Pd")], erange=[-4, -2])
1✔
213
        assert band_center == approx(-2.8754000116714065)
1✔
214

215
    def test_get_upper_band_edge(self):
1✔
216
        dos = self.dos_pdag3
1✔
217
        struct = dos.structure
1✔
218
        band_edge = dos.get_upper_band_edge()
1✔
219
        assert band_edge == approx(-1.01246969)
1✔
220

221
        band_edge = dos.get_upper_band_edge(elements=[Element("Pd")])
1✔
222
        assert band_edge == approx(-1.01246969)
1✔
223

224
        band_edge = dos.get_upper_band_edge(sites=[struct[-3]])
1✔
225
        assert band_edge == approx(-1.01246969)
1✔
226

227
        band_edge = dos.get_upper_band_edge(elements=[Element("Pd")], erange=[-4, 0.5])
1✔
228
        assert band_edge == approx(-1.01246969)
1✔
229

230
    def test_get_n_moment(self):
1✔
231
        dos = self.dos_pdag3
1✔
232
        moment = dos.get_n_moment(1)
1✔
233
        assert moment == approx(0)
1✔
234

235
        moment = dos.get_n_moment(1, center=False)
1✔
236
        assert moment == approx(-3.078841005723767)
1✔
237

238
    def test_band_filling(self):
1✔
239
        dos = self.dos_pdag3
1✔
240
        filling = dos.get_band_filling()
1✔
241
        assert filling == approx(0.9583552024357637)
1✔
242

243
    def test_band_width(self):
1✔
244
        dos = self.dos_pdag3
1✔
245
        width = dos.get_band_width()
1✔
246
        assert width == approx(1.7831724662185575)
1✔
247

248
    def test_skewness(self):
1✔
249
        dos = self.dos_pdag3
1✔
250
        skewness = dos.get_band_skewness()
1✔
251
        assert skewness == approx(1.7422716340493507)
1✔
252

253
    def test_kurtosis(self):
1✔
254
        dos = self.dos_pdag3
1✔
255
        kurtosis = dos.get_band_kurtosis()
1✔
256
        assert kurtosis == approx(7.764506941340621)
1✔
257

258
    def test_get_dos_fp(self):
1✔
259
        # normalize=True
260
        dos_fp = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
261
        bin_width = np.diff(dos_fp.energies)[0][0]
1✔
262
        assert max(dos_fp.energies[0]) <= 0
1✔
263
        assert min(dos_fp.energies[0]) >= -10
1✔
264
        assert len(dos_fp.energies[0]) == 56
1✔
265
        assert dos_fp.type == "s"
1✔
266
        assert sum(dos_fp.densities * bin_width) == approx(1)
1✔
267
        # normalize=False
268
        dos_fp2 = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=False)
1✔
269
        bin_width2 = np.diff(dos_fp2.energies)[0][0]
1✔
270
        assert sum(dos_fp2.densities * bin_width2) == approx(7.279303571428509)
1✔
271
        assert dos_fp2.bin_width == approx(bin_width2)
1✔
272
        # binning=False
273
        dos_fp = self.dos.get_dos_fp(type="s", min_e=None, max_e=None, n_bins=56, normalize=True, binning=False)
1✔
274
        assert dos_fp.n_bins == len(self.dos.energies)
1✔
275

276
    def test_get_dos_fp_similarity(self):
1✔
277
        dos_fp = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
278
        dos_fp2 = self.dos.get_dos_fp(type="tdos", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
279
        similarity_index = self.dos.get_dos_fp_similarity(dos_fp, dos_fp2, col=1, tanimoto=True)
1✔
280
        assert similarity_index == approx(0.3342481451042263)
1✔
281

282
        dos_fp = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
283
        dos_fp2 = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
284
        similarity_index = self.dos.get_dos_fp_similarity(dos_fp, dos_fp2, col=1, tanimoto=True)
1✔
285
        assert similarity_index == 1
1✔
286

287
    def test_dos_fp_exceptions(self):
1✔
288
        dos_fp = self.dos.get_dos_fp(type="s", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
289
        dos_fp2 = self.dos.get_dos_fp(type="tdos", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
290
        # test exceptions
291
        with pytest.raises(ValueError) as exc_info:
1✔
292
            self.dos.get_dos_fp_similarity(dos_fp, dos_fp2, col=1, tanimoto=True, normalize=True)
1✔
293
        assert (
1✔
294
            str(exc_info.value) == "Cannot compute similarity index. Please set either "
295
            "normalize=True or tanimoto=True or both to False."
296
        )
297
        with pytest.raises(ValueError) as exc_info:
1✔
298
            self.dos.get_dos_fp(type="k", min_e=-10, max_e=0, n_bins=56, normalize=True)
1✔
299
        assert (
1✔
300
            str(exc_info.value) == "Please recheck type requested, either the orbital "
301
            "projections unavailable in input DOS or there's a typo in type."
302
        )
303

304

305
class DOSTest(PymatgenTest):
1✔
306
    def setUp(self):
1✔
307
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "complete_dos.json")) as f:
1✔
308
            d = json.load(f)
1✔
309
            y = list(zip(d["densities"]["1"], d["densities"]["-1"]))
1✔
310
            self.dos = DOS(d["energies"], y, d["efermi"])
1✔
311

312
    def test_get_gap(self):
1✔
313
        dos = self.dos
1✔
314
        assert dos.get_gap() == approx(2.0589, abs=1e-4)
1✔
315
        assert len(dos.x) == 301
1✔
316
        assert dos.get_interpolated_gap(tol=0.001, abs_tol=False, spin=None)[0] == approx(2.16815942458015, abs=1e-7)
1✔
317
        self.assertArrayAlmostEqual(dos.get_cbm_vbm(), (3.8729, 1.8140000000000001))
1✔
318

319
        assert dos.get_interpolated_value(9.9)[0] == approx(1.744588888888891, abs=1e-7)
1✔
320
        assert dos.get_interpolated_value(9.9)[1] == approx(1.756888888888886, abs=1e-7)
1✔
321
        with pytest.raises(ValueError):
1✔
322
            dos.get_interpolated_value(1000)
1✔
323

324
        self.assertArrayAlmostEqual(dos.get_cbm_vbm(spin=Spin.up), (3.8729, 1.2992999999999999))
1✔
325

326
        self.assertArrayAlmostEqual(dos.get_cbm_vbm(spin=Spin.down), (4.645, 1.8140000000000001))
1✔
327

328

329
class SpinPolarizationTest(unittest.TestCase):
1✔
330
    def test_spin_polarization(self):
1✔
331
        dos_path = os.path.join(PymatgenTest.TEST_FILES_DIR, "dos_spin_polarization_mp-865805.json")
1✔
332
        dos = loadfn(dos_path)
1✔
333
        assert dos.spin_polarization == approx(0.6460514663341762)
1✔
334

335

336
class LobsterCompleteDosTest(unittest.TestCase):
1✔
337
    def setUp(self):
1✔
338
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "LobsterCompleteDos_spin.json")) as f:
1✔
339
            data_spin = json.load(f)
1✔
340
        self.LobsterCompleteDOS_spin = LobsterCompleteDos.from_dict(data_spin)
1✔
341

342
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "LobsterCompleteDos_nonspin.json")) as f:
1✔
343
            data_nonspin = json.load(f)
1✔
344
        self.LobsterCompleteDOS_nonspin = LobsterCompleteDos.from_dict(data_nonspin)
1✔
345

346
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "structure_KF.json")) as f:
1✔
347
            data_structure = json.load(f)
1✔
348
        self.structure = Structure.from_dict(data_structure)
1✔
349

350
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "LobsterCompleteDos_MnO.json")) as f:
1✔
351
            data_MnO = json.load(f)
1✔
352
        self.LobsterCompleteDOS_MnO = LobsterCompleteDos.from_dict(data_MnO)
1✔
353

354
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "LobsterCompleteDos_MnO_nonspin.json")) as f:
1✔
355
            data_MnO_nonspin = json.load(f)
1✔
356
        self.LobsterCompleteDOS_MnO_nonspin = LobsterCompleteDos.from_dict(data_MnO_nonspin)
1✔
357

358
        with open(os.path.join(PymatgenTest.TEST_FILES_DIR, "structure_MnO.json")) as f:
1✔
359
            data_MnO = json.load(f)
1✔
360
        self.structure_MnO = Structure.from_dict(data_MnO)
1✔
361

362
    def test_get_site_orbital_dos(self):
1✔
363
        # with spin polarization
364
        energies_spin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
365
        fermi = 0.0
1✔
366

367
        PDOS_F_2s_up = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
368
        PDOS_F_2s_down = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
369
        PDOS_F_2py_up = [0.00000, 0.00160, 0.00000, 0.25801, 0.00000, 0.00029]
1✔
370
        PDOS_F_2py_down = [0.00000, 0.00161, 0.00000, 0.25819, 0.00000, 0.00029]
1✔
371
        PDOS_F_2pz_up = [0.00000, 0.00161, 0.00000, 0.25823, 0.00000, 0.00029]
1✔
372
        PDOS_F_2pz_down = [0.00000, 0.00160, 0.00000, 0.25795, 0.00000, 0.00029]
1✔
373
        PDOS_F_2px_up = [0.00000, 0.00160, 0.00000, 0.25805, 0.00000, 0.00029]
1✔
374
        PDOS_F_2px_down = [0.00000, 0.00161, 0.00000, 0.25814, 0.00000, 0.00029]
1✔
375
        assert (
1✔
376
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2s").energies.tolist()
377
            == energies_spin
378
        )
379
        assert self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2s").efermi == approx(
1✔
380
            fermi
381
        )
382
        assert (
1✔
383
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2s")
384
            .densities[Spin.up]
385
            .tolist()
386
            == PDOS_F_2s_up
387
        )
388
        assert (
1✔
389
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2s")
390
            .densities[Spin.down]
391
            .tolist()
392
            == PDOS_F_2s_down
393
        )
394
        assert (
1✔
395
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_z").energies.tolist()
396
            == energies_spin
397
        )
398
        assert self.LobsterCompleteDOS_spin.get_site_orbital_dos(
1✔
399
            site=self.structure[0], orbital="2p_z"
400
        ).efermi == approx(fermi)
401

402
        assert (
1✔
403
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_y")
404
            .densities[Spin.up]
405
            .tolist()
406
            == PDOS_F_2py_up
407
        )
408
        assert (
1✔
409
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_y")
410
            .densities[Spin.down]
411
            .tolist()
412
            == PDOS_F_2py_down
413
        )
414
        assert (
1✔
415
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_y").energies.tolist()
416
            == energies_spin
417
        )
418
        assert self.LobsterCompleteDOS_spin.get_site_orbital_dos(
1✔
419
            site=self.structure[0], orbital="2p_y"
420
        ).efermi == approx(fermi)
421

422
        assert (
1✔
423
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_z")
424
            .densities[Spin.up]
425
            .tolist()
426
            == PDOS_F_2pz_up
427
        )
428
        assert (
1✔
429
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_z")
430
            .densities[Spin.down]
431
            .tolist()
432
            == PDOS_F_2pz_down
433
        )
434
        assert self.LobsterCompleteDOS_spin.get_site_orbital_dos(
1✔
435
            site=self.structure[0], orbital="2p_z"
436
        ).efermi == approx(fermi)
437

438
        assert (
1✔
439
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_x").energies.tolist()
440
            == energies_spin
441
        )
442
        assert (
1✔
443
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_x")
444
            .densities[Spin.up]
445
            .tolist()
446
            == PDOS_F_2px_up
447
        )
448
        assert (
1✔
449
            self.LobsterCompleteDOS_spin.get_site_orbital_dos(site=self.structure[0], orbital="2p_x")
450
            .densities[Spin.down]
451
            .tolist()
452
            == PDOS_F_2px_down
453
        )
454
        assert self.LobsterCompleteDOS_spin.get_site_orbital_dos(
1✔
455
            site=self.structure[0], orbital="2p_x"
456
        ).efermi == approx(fermi)
457

458
        # without spin polarization
459
        energies_nonspin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
460
        PDOS_F_2s = [0.00000, 0.00320, 0.00000, 0.00017, 0.00000, 0.00060]
1✔
461
        PDOS_F_2py = [0.00000, 0.00322, 0.00000, 0.51635, 0.00000, 0.00037]
1✔
462
        PDOS_F_2pz = [0.00000, 0.00322, 0.00000, 0.51636, 0.00000, 0.00037]
1✔
463
        PDOS_F_2px = [0.00000, 0.00322, 0.00000, 0.51634, 0.00000, 0.00037]
1✔
464

465
        assert (
1✔
466
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(site=self.structure[0], orbital="2s").energies.tolist()
467
            == energies_nonspin
468
        )
469
        assert self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
1✔
470
            site=self.structure[0], orbital="2s"
471
        ).efermi == approx(fermi)
472
        assert (
1✔
473
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(site=self.structure[0], orbital="2s")
474
            .densities[Spin.up]
475
            .tolist()
476
            == PDOS_F_2s
477
        )
478

479
        assert (
1✔
480
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
481
                site=self.structure[0], orbital="2p_y"
482
            ).energies.tolist()
483
            == energies_nonspin
484
        )
485
        assert self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
1✔
486
            site=self.structure[0], orbital="2p_y"
487
        ).efermi == approx(fermi)
488
        assert (
1✔
489
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(site=self.structure[0], orbital="2p_y")
490
            .densities[Spin.up]
491
            .tolist()
492
            == PDOS_F_2py
493
        )
494

495
        assert (
1✔
496
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
497
                site=self.structure[0], orbital="2p_z"
498
            ).energies.tolist()
499
            == energies_nonspin
500
        )
501
        assert self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
1✔
502
            site=self.structure[0], orbital="2p_z"
503
        ).efermi == approx(fermi)
504
        assert (
1✔
505
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(site=self.structure[0], orbital="2p_z")
506
            .densities[Spin.up]
507
            .tolist()
508
            == PDOS_F_2pz
509
        )
510

511
        assert (
1✔
512
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
513
                site=self.structure[0], orbital="2p_x"
514
            ).energies.tolist()
515
            == energies_nonspin
516
        )
517
        assert self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(
1✔
518
            site=self.structure[0], orbital="2p_x"
519
        ).efermi == approx(fermi)
520
        assert (
1✔
521
            self.LobsterCompleteDOS_nonspin.get_site_orbital_dos(site=self.structure[0], orbital="2p_x")
522
            .densities[Spin.up]
523
            .tolist()
524
            == PDOS_F_2px
525
        )
526

527
    def test_get_site_t2g_eg_resolved_dos(self):
1✔
528
        # with spin polarization
529
        energies = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
530
        efermi = 0.0
1✔
531
        PDOS_Mn_3dxy_up = [0.00000, 0.00001, 0.10301, 0.16070, 0.00070, 0.00060]
1✔
532
        PDOS_Mn_3dxy_down = [0.00000, 0.00000, 0.00380, 0.00996, 0.03012, 0.21890]
1✔
533
        PDOS_Mn_3dyz_up = [0.00000, 0.00001, 0.10301, 0.16070, 0.00070, 0.00060]
1✔
534
        PDOS_Mn_3dyz_down = [0.00000, 0.00000, 0.00380, 0.00996, 0.03012, 0.21890]
1✔
535
        PDOS_Mn_3dz2_up = [0.00000, 0.00001, 0.09608, 0.16941, 0.00028, 0.00028]
1✔
536
        PDOS_Mn_3dz2_down = [0.00000, 0.00000, 0.00433, 0.00539, 0.06000, 0.19427]
1✔
537
        PDOS_Mn_3dxz_up = [0.00000, 0.00001, 0.09746, 0.16767, 0.00036, 0.00034]
1✔
538
        PDOS_Mn_3dxz_down = [0.00000, 0.00000, 0.00422, 0.00630, 0.05402, 0.19919]
1✔
539
        PDOS_Mn_3dx2_up = [0.00000, 0.00001, 0.09330, 0.17289, 0.00011, 0.00015]
1✔
540
        PDOS_Mn_3dx2_down = [0.00000, 0.00000, 0.00454, 0.00356, 0.07195, 0.18442]
1✔
541

542
        PDOS_Mn_eg_up = (np.array(PDOS_Mn_3dx2_up) + np.array(PDOS_Mn_3dz2_up)).tolist()
1✔
543
        PDOS_Mn_eg_down = (np.array(PDOS_Mn_3dx2_down) + np.array(PDOS_Mn_3dz2_down)).tolist()
1✔
544
        PDOS_Mn_t2g_up = (np.array(PDOS_Mn_3dxy_up) + np.array(PDOS_Mn_3dxz_up) + np.array(PDOS_Mn_3dyz_up)).tolist()
1✔
545
        PDOS_Mn_t2g_down = (
1✔
546
            np.array(PDOS_Mn_3dxy_down) + np.array(PDOS_Mn_3dxz_down) + np.array(PDOS_Mn_3dyz_down)
547
        ).tolist()
548

549
        for iel, el in enumerate(
1✔
550
            self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"]
551
            .densities[Spin.up]
552
            .tolist()
553
        ):
554
            assert el == approx(PDOS_Mn_eg_up[iel])
1✔
555
        for iel, el in enumerate(
1✔
556
            self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"]
557
            .densities[Spin.down]
558
            .tolist()
559
        ):
560
            assert el == approx(PDOS_Mn_eg_down[iel])
1✔
561
        for iel, el in enumerate(
1✔
562
            self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"]
563
            .densities[Spin.up]
564
            .tolist()
565
        ):
566
            assert el == approx(PDOS_Mn_t2g_up[iel])
1✔
567
        for iel, el in enumerate(
1✔
568
            self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"]
569
            .densities[Spin.down]
570
            .tolist()
571
        ):
572
            assert el == approx(PDOS_Mn_t2g_down[iel])
1✔
573
        assert (
1✔
574
            energies
575
            == self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"].energies.tolist()
576
        )
577
        assert (
1✔
578
            energies
579
            == self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"].energies.tolist()
580
        )
581
        assert efermi == self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"].efermi
1✔
582
        assert efermi == self.LobsterCompleteDOS_MnO.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"].efermi
1✔
583

584
        # without spin polarization
585
        energies_nonspin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
586
        PDOS_Mn_3dxy = [0.00000, 0.00000, 0.02032, 0.16094, 0.33659, 0.01291]
1✔
587
        PDOS_Mn_3dyz = [0.00000, 0.00000, 0.02032, 0.16126, 0.33628, 0.01290]
1✔
588
        PDOS_Mn_3dz2 = [0.00000, 0.00000, 0.02591, 0.31460, 0.18658, 0.00509]
1✔
589
        PDOS_Mn_3dxz = [0.00000, 0.00000, 0.02484, 0.28501, 0.21541, 0.00663]
1✔
590
        PDOS_Mn_3dx2 = [0.00000, 0.00000, 0.02817, 0.37594, 0.12669, 0.00194]
1✔
591

592
        PDOS_Mn_eg = (np.array(PDOS_Mn_3dx2) + np.array(PDOS_Mn_3dz2)).tolist()
1✔
593
        PDOS_Mn_t2g = (np.array(PDOS_Mn_3dxy) + np.array(PDOS_Mn_3dxz) + np.array(PDOS_Mn_3dyz)).tolist()
1✔
594

595
        for iel, el in enumerate(
1✔
596
            self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"]
597
            .densities[Spin.up]
598
            .tolist()
599
        ):
600
            assert el == approx(PDOS_Mn_eg[iel])
1✔
601
        for iel, el in enumerate(
1✔
602
            self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"]
603
            .densities[Spin.up]
604
            .tolist()
605
        ):
606
            assert el == approx(PDOS_Mn_t2g[iel])
1✔
607
        assert (
1✔
608
            energies_nonspin
609
            == self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])[
610
                "e_g"
611
            ].energies.tolist()
612
        )
613
        assert (
1✔
614
            energies_nonspin
615
            == self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])[
616
                "t2g"
617
            ].energies.tolist()
618
        )
619
        assert (
1✔
620
            efermi
621
            == self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["e_g"].efermi
622
        )
623
        assert (
1✔
624
            efermi
625
            == self.LobsterCompleteDOS_MnO_nonspin.get_site_t2g_eg_resolved_dos(self.structure_MnO[1])["t2g"].efermi
626
        )
627

628
    def test_get_spd_dos(self):
1✔
629
        # with spin polarization
630
        energies_spin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
631
        fermi = 0.0
1✔
632

633
        PDOS_F_2s_up = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
634
        PDOS_F_2s_down = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
635
        PDOS_F_2py_up = [0.00000, 0.00160, 0.00000, 0.25801, 0.00000, 0.00029]
1✔
636
        PDOS_F_2py_down = [0.00000, 0.00161, 0.00000, 0.25819, 0.00000, 0.00029]
1✔
637
        PDOS_F_2pz_up = [0.00000, 0.00161, 0.00000, 0.25823, 0.00000, 0.00029]
1✔
638
        PDOS_F_2pz_down = [0.00000, 0.00160, 0.00000, 0.25795, 0.00000, 0.00029]
1✔
639
        PDOS_F_2px_up = [0.00000, 0.00160, 0.00000, 0.25805, 0.00000, 0.00029]
1✔
640
        PDOS_F_2px_down = [0.00000, 0.00161, 0.00000, 0.25814, 0.00000, 0.00029]
1✔
641

642
        PDOS_K_3s_up = [0.00000, 0.00000, 0.00000, 0.00008, 0.00000, 0.00007]
1✔
643
        PDOS_K_3s_down = [0.00000, 0.00000, 0.00000, 0.00008, 0.00000, 0.00007]
1✔
644
        PDOS_K_4s_up = [0.00000, 0.00018, 0.00000, 0.02035, 0.00000, 0.02411]
1✔
645
        PDOS_K_4s_down = [0.00000, 0.00018, 0.00000, 0.02036, 0.00000, 0.02420]
1✔
646
        PDOS_K_3py_up = [0.00000, 0.26447, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
647
        PDOS_K_3py_down = [0.00000, 0.26446, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
648
        PDOS_K_3pz_up = [0.00000, 0.26446, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
649
        PDOS_K_3pz_down = [0.00000, 0.26447, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
650
        PDOS_K_3px_up = [0.00000, 0.26447, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
651
        PDOS_K_3px_down = [0.00000, 0.26446, 0.00000, 0.00172, 0.00000, 0.00000]
1✔
652

653
        PDOS_s_up = (np.array(PDOS_F_2s_up) + np.array(PDOS_K_3s_up) + np.array(PDOS_K_4s_up)).tolist()
1✔
654
        PDOS_s_down = (np.array(PDOS_F_2s_down) + np.array(PDOS_K_3s_down) + np.array(PDOS_K_4s_down)).tolist()
1✔
655
        PDOS_p_up = (
1✔
656
            np.array(PDOS_F_2py_up)
657
            + np.array(PDOS_F_2pz_up)
658
            + np.array(PDOS_F_2px_up)
659
            + np.array(PDOS_K_3py_up)
660
            + np.array(PDOS_K_3pz_up)
661
            + np.array(PDOS_K_3px_up)
662
        ).tolist()
663
        PDOS_p_down = (
1✔
664
            np.array(PDOS_F_2py_down)
665
            + np.array(PDOS_F_2pz_down)
666
            + np.array(PDOS_F_2px_down)
667
            + np.array(PDOS_K_3py_down)
668
            + np.array(PDOS_K_3pz_down)
669
            + np.array(PDOS_K_3px_down)
670
        ).tolist()
671
        assert self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(0)].energies.tolist() == energies_spin
1✔
672
        assert self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(0)].efermi == fermi
1✔
673

674
        for ilistel, listel in enumerate(
1✔
675
            self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(0)].densities[Spin.up].tolist()
676
        ):
677
            assert listel == approx(PDOS_s_up[ilistel])
1✔
678
        for ilistel, listel in enumerate(
1✔
679
            self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(0)].densities[Spin.down].tolist()
680
        ):
681
            assert listel == approx(PDOS_s_down[ilistel])
1✔
682
        for ilistel, listel in enumerate(
1✔
683
            self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(1)].densities[Spin.up].tolist()
684
        ):
685
            assert listel == approx(PDOS_p_up[ilistel])
1✔
686
        for ilistel, listel in enumerate(
1✔
687
            self.LobsterCompleteDOS_spin.get_spd_dos()[OrbitalType(1)].densities[Spin.down].tolist()
688
        ):
689
            assert listel == approx(PDOS_p_down[ilistel])
1✔
690

691
        # without spin polarization
692
        energies_nonspin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
693
        PDOS_F_2s = [0.00000, 0.00320, 0.00000, 0.00017, 0.00000, 0.00060]
1✔
694
        PDOS_F_2py = [0.00000, 0.00322, 0.00000, 0.51635, 0.00000, 0.00037]
1✔
695
        PDOS_F_2pz = [0.00000, 0.00322, 0.00000, 0.51636, 0.00000, 0.00037]
1✔
696
        PDOS_F_2px = [0.00000, 0.00322, 0.00000, 0.51634, 0.00000, 0.00037]
1✔
697

698
        PDOS_K_3s = [0.00000, 0.00000, 0.00000, 0.00005, 0.00000, 0.00004]
1✔
699

700
        PDOS_K_4s = [0.00000, 0.00040, 0.00000, 0.04039, 0.00000, 0.02241]
1✔
701

702
        PDOS_K_3py = [0.00000, 0.52891, 0.00000, 0.00345, 0.00000, 0.00000]
1✔
703
        PDOS_K_3pz = [0.00000, 0.52891, 0.00000, 0.00345, 0.00000, 0.00000]
1✔
704
        PDOS_K_3px = [0.00000, 0.52891, 0.00000, 0.00345, 0.00000, 0.00000]
1✔
705

706
        PDOS_s = (np.array(PDOS_F_2s) + np.array(PDOS_K_3s) + np.array(PDOS_K_4s)).tolist()
1✔
707
        PDOS_p = (
1✔
708
            np.array(PDOS_F_2py)
709
            + np.array(PDOS_F_2pz)
710
            + np.array(PDOS_F_2px)
711
            + np.array(PDOS_K_3py)
712
            + np.array(PDOS_K_3pz)
713
            + np.array(PDOS_K_3px)
714
        ).tolist()
715
        assert self.LobsterCompleteDOS_nonspin.get_spd_dos()[OrbitalType(0)].energies.tolist() == energies_nonspin
1✔
716

717
        for ilistel, listel in enumerate(
1✔
718
            self.LobsterCompleteDOS_nonspin.get_spd_dos()[OrbitalType(0)].densities[Spin.up].tolist()
719
        ):
720
            assert listel == approx(PDOS_s[ilistel])
1✔
721
        for ilistel, listel in enumerate(
1✔
722
            self.LobsterCompleteDOS_nonspin.get_spd_dos()[OrbitalType(1)].densities[Spin.up].tolist()
723
        ):
724
            assert listel == approx(PDOS_p[ilistel])
1✔
725

726
    def test_get_element_spd_dos(self):
1✔
727
        # with spin polarization
728
        energies_spin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
729
        fermi = 0.0
1✔
730

731
        PDOS_F_2s_up = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
732
        PDOS_F_2s_down = [0.00000, 0.00159, 0.00000, 0.00011, 0.00000, 0.00069]
1✔
733
        PDOS_F_2py_up = [0.00000, 0.00160, 0.00000, 0.25801, 0.00000, 0.00029]
1✔
734
        PDOS_F_2py_down = [0.00000, 0.00161, 0.00000, 0.25819, 0.00000, 0.00029]
1✔
735
        PDOS_F_2pz_up = [0.00000, 0.00161, 0.00000, 0.25823, 0.00000, 0.00029]
1✔
736
        PDOS_F_2pz_down = [0.00000, 0.00160, 0.00000, 0.25795, 0.00000, 0.00029]
1✔
737
        PDOS_F_2px_up = [0.00000, 0.00160, 0.00000, 0.25805, 0.00000, 0.00029]
1✔
738
        PDOS_F_2px_down = [0.00000, 0.00161, 0.00000, 0.25814, 0.00000, 0.00029]
1✔
739

740
        assert (
1✔
741
            self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)].energies.tolist()
742
            == energies_spin
743
        )
744

745
        assert (
1✔
746
            self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)]
747
            .densities[Spin.up]
748
            .tolist()
749
            == PDOS_F_2s_up
750
        )
751
        assert (
1✔
752
            self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)]
753
            .densities[Spin.down]
754
            .tolist()
755
            == PDOS_F_2s_down
756
        )
757

758
        for ilistel, listel in enumerate(
1✔
759
            self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(1)]
760
            .densities[Spin.up]
761
            .tolist()
762
        ):
763
            assert listel == approx(
1✔
764
                (np.array(PDOS_F_2px_up) + np.array(PDOS_F_2py_up) + np.array(PDOS_F_2pz_up)).tolist()[ilistel]
765
            )
766

767
        for ilistel, listel in enumerate(
1✔
768
            self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(1)]
769
            .densities[Spin.down]
770
            .tolist()
771
        ):
772
            assert listel == approx(
1✔
773
                (np.array(PDOS_F_2px_down) + np.array(PDOS_F_2py_down) + np.array(PDOS_F_2pz_down)).tolist()[ilistel]
774
            )
775

776
        assert self.LobsterCompleteDOS_spin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)].efermi == approx(fermi)
1✔
777

778
        # without spin polarization
779
        energies_nonspin = [-11.25000, -7.50000, -3.75000, 0.00000, 3.75000, 7.50000]
1✔
780
        efermi = 0.0
1✔
781
        PDOS_F_2s = [0.00000, 0.00320, 0.00000, 0.00017, 0.00000, 0.00060]
1✔
782
        PDOS_F_2py = [0.00000, 0.00322, 0.00000, 0.51635, 0.00000, 0.00037]
1✔
783
        PDOS_F_2pz = [0.00000, 0.00322, 0.00000, 0.51636, 0.00000, 0.00037]
1✔
784
        PDOS_F_2px = [0.00000, 0.00322, 0.00000, 0.51634, 0.00000, 0.00037]
1✔
785

786
        assert (
1✔
787
            self.LobsterCompleteDOS_nonspin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)].energies.tolist()
788
            == energies_nonspin
789
        )
790

791
        assert (
1✔
792
            self.LobsterCompleteDOS_nonspin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)]
793
            .densities[Spin.up]
794
            .tolist()
795
            == PDOS_F_2s
796
        )
797

798
        for ilistel, listel in enumerate(
1✔
799
            self.LobsterCompleteDOS_nonspin.get_element_spd_dos(el=Element("F"))[OrbitalType(1)]
800
            .densities[Spin.up]
801
            .tolist()
802
        ):
803
            assert listel == approx(
1✔
804
                (np.array(PDOS_F_2px) + np.array(PDOS_F_2py) + np.array(PDOS_F_2pz)).tolist()[ilistel]
805
            )
806

807
        assert self.LobsterCompleteDOS_nonspin.get_element_spd_dos(el=Element("F"))[OrbitalType(0)].efermi == approx(
1✔
808
            efermi
809
        )
810

811

812
if __name__ == "__main__":
1✔
813
    unittest.main()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc