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