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