Line data Source code
1 : # SPDX-FileCopyrightText: 2024 Pairinteraction Developers 2 : # SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 1 : import pytest 5 : 6 1 : import pairinteraction.real as pi 7 1 : from pairinteraction.units import ureg 8 : 9 : 10 1 : def test_ket() -> None: 11 1 : ket = pi.KetAtom("Rb", n=60, l=0, j=0.5, m=0.5) 12 1 : assert ket.species == "Rb" 13 1 : assert ket.n == 60 14 1 : assert ket.l == 0 15 1 : assert pytest.approx(ket.s) == 0.5 # NOSONAR 16 1 : assert pytest.approx(ket.j) == 0.5 # NOSONAR 17 1 : assert pytest.approx(ket.m) == 0.5 # NOSONAR 18 1 : assert ket.parity == "even" 19 1 : assert ket.get_energy().units == ureg.Unit("bohr^2 electron_mass/atomic_unit_of_time^2") 20 1 : assert pytest.approx(ket.get_energy().magnitude) == 0.15335264334573842 # NOSONAR 21 1 : assert pytest.approx(ket.get_energy("GHz")) == 1009011.9215883961 # NOSONAR 22 : 23 1 : assert ket == pi.KetAtom("Rb", n=60, l=0, j=0.5, m=0.5) 24 : 25 1 : ket_odd = pi.KetAtom("Rb", n=60, l=1, j=1.5, m=-0.5) 26 1 : assert ket_odd.l == 1 27 1 : assert pytest.approx(ket_odd.f) == 1.5 # NOSONAR 28 1 : assert pytest.approx(ket_odd.m) == -0.5 # NOSONAR 29 1 : assert ket_odd.parity == "odd" 30 : 31 1 : for fmt in ["raw", "ket", "bra"]: 32 1 : label = ket_odd.get_label(fmt) 33 1 : assert all(str(qn) in label for qn in ["Rb", 60, "P", "3/2", "-1/2"]) 34 : 35 1 : assert ket_odd != ket 36 1 : assert ket != pi.KetAtom("Rb", n=60, l=1, j=1.5, m=0.5) 37 : 38 1 : assert ket.get_matrix_element(ket_odd, "electric_dipole", q=-1) != 0 39 1 : assert ket.get_matrix_element(ket_odd, "electric_dipole", q=0) == 0 40 1 : assert ket.get_matrix_element(ket_odd, "electric_dipole", q=+1) == 0