LCOV - code coverage report
Current view: top level - tests - test_ket.py (source / functions) Hit Total Coverage
Test: coverage.info Lines: 42 42 100.0 %
Date: 2025-12-08 07:47:12 Functions: 2 4 50.0 %

          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

Generated by: LCOV version 1.16