From f62474569f0ac898a184235200f15ac60c6a2da3 Mon Sep 17 00:00:00 2001 From: Martin Schlipf Date: Thu, 16 Jul 2026 16:07:16 +0200 Subject: [PATCH 1/2] Feat: Add band edge energies to bandgap dict --- src/py4vasp/_calculation/bandgap.py | 11 +++++++++++ tests/calculation/test_bandgap.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/py4vasp/_calculation/bandgap.py b/src/py4vasp/_calculation/bandgap.py index d3c536ac..c7d4a01f 100644 --- a/src/py4vasp/_calculation/bandgap.py +++ b/src/py4vasp/_calculation/bandgap.py @@ -48,9 +48,11 @@ def from_data(cls, raw_bandgap: raw.Bandgap, steps=None) -> "BandgapHandler": def to_dict(self) -> dict: return { **self._gap_dict("fundamental"), + **self._band_dict("fundamental"), **self._kpoint_dict("VBM"), **self._kpoint_dict("CBM"), **self._gap_dict("direct"), + **self._band_dict("direct"), **self._kpoint_dict("direct"), "fermi_energy": self._get("Fermi energy", component=0), } @@ -193,6 +195,15 @@ def _gap_dict(self, label): gaps = self._gap(label).T return {f"{label}{suffix}": gap for gap, suffix in zip(gaps, self._suffixes())} + def _band_dict(self, label): + result = {} + bottoms = self._get(GAPS[label].bottom) + tops = self._get(GAPS[label].top) + for bottom, top, suffix in zip(bottoms.T, tops.T, self._suffixes()): + result[GAPS[label].bottom.replace(" ", "_") + suffix] = bottom + result[GAPS[label].top.replace(" ", "_") + suffix] = top + return result + def _kpoint_dict(self, label): kpoint = self._kpoint(label) return { diff --git a/tests/calculation/test_bandgap.py b/tests/calculation/test_bandgap.py index b0bff145..7426eaf4 100644 --- a/tests/calculation/test_bandgap.py +++ b/tests/calculation/test_bandgap.py @@ -85,9 +85,13 @@ def steps(request): def test_read_default(bandgap, steps, Assert): actual = bandgap.read() if steps == -1 else bandgap[steps].read() Assert.allclose(actual["fundamental"], bandgap.ref.fundamental[steps, 0]) + Assert.allclose(actual["valence_band_maximum"], bandgap.ref.vbm[steps, 0]) + Assert.allclose(actual["conduction_band_minimum"], bandgap.ref.cbm[steps, 0]) Assert.allclose(actual["kpoint_VBM"], bandgap.ref.kpoint_vbm[steps, 0]) Assert.allclose(actual["kpoint_CBM"], bandgap.ref.kpoint_cbm[steps, 0]) Assert.allclose(actual["direct"], bandgap.ref.direct[steps, 0]) + Assert.allclose(actual["direct_gap_bottom"], bandgap.ref.lower_band_direct[steps, 0]) + Assert.allclose(actual["direct_gap_top"], bandgap.ref.upper_band_direct[steps, 0]) Assert.allclose(actual["kpoint_direct"], bandgap.ref.kpoint_direct[steps, 0]) Assert.allclose(actual["fermi_energy"], bandgap.ref.fermi_energy[steps]) @@ -97,9 +101,17 @@ def test_read_spin_polarized(spin_polarized, steps, Assert): ref = spin_polarized.ref for i, suffix in enumerate(("", "_up", "_down")): Assert.allclose(actual[f"fundamental{suffix}"], ref.fundamental[steps, i]) + Assert.allclose(actual[f"valence_band_maximum{suffix}"], ref.vbm[steps, i]) + Assert.allclose(actual[f"conduction_band_minimum{suffix}"], ref.cbm[steps, i]) Assert.allclose(actual[f"kpoint_VBM{suffix}"], ref.kpoint_vbm[steps, i]) Assert.allclose(actual[f"kpoint_CBM{suffix}"], ref.kpoint_cbm[steps, i]) Assert.allclose(actual[f"direct{suffix}"], ref.direct[steps, i]) + Assert.allclose( + actual[f"direct_gap_bottom{suffix}"], ref.lower_band_direct[steps, i] + ) + Assert.allclose( + actual[f"direct_gap_top{suffix}"], ref.upper_band_direct[steps, i] + ) Assert.allclose(actual[f"kpoint_direct{suffix}"], ref.kpoint_direct[steps, i]) Assert.allclose(actual["fermi_energy"], ref.fermi_energy[steps]) From 64bd9aeb8a5b4b2da5462f136d73c7aea8414af8 Mon Sep 17 00:00:00 2001 From: Martin Schlipf Date: Thu, 16 Jul 2026 16:14:21 +0200 Subject: [PATCH 2/2] Style: Apply black formatting --- tests/calculation/test_bandgap.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/calculation/test_bandgap.py b/tests/calculation/test_bandgap.py index 7426eaf4..60c74f69 100644 --- a/tests/calculation/test_bandgap.py +++ b/tests/calculation/test_bandgap.py @@ -90,7 +90,9 @@ def test_read_default(bandgap, steps, Assert): Assert.allclose(actual["kpoint_VBM"], bandgap.ref.kpoint_vbm[steps, 0]) Assert.allclose(actual["kpoint_CBM"], bandgap.ref.kpoint_cbm[steps, 0]) Assert.allclose(actual["direct"], bandgap.ref.direct[steps, 0]) - Assert.allclose(actual["direct_gap_bottom"], bandgap.ref.lower_band_direct[steps, 0]) + Assert.allclose( + actual["direct_gap_bottom"], bandgap.ref.lower_band_direct[steps, 0] + ) Assert.allclose(actual["direct_gap_top"], bandgap.ref.upper_band_direct[steps, 0]) Assert.allclose(actual["kpoint_direct"], bandgap.ref.kpoint_direct[steps, 0]) Assert.allclose(actual["fermi_energy"], bandgap.ref.fermi_energy[steps])