LCOV - code coverage report
Current view: top level - tests - test_system_pair.py (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 31 31
Test Date: 2026-11-02 09:44:19 Functions: 100.0 % 2 2

            Line data    Source code
       1              : # SPDX-FileCopyrightText: 2026 PairInteraction Developers
       2              : # SPDX-License-Identifier: LGPL-3.0-or-later
       3              : 
       4            1 : from __future__ import annotations
       5              : 
       6            1 : import logging
       7              : 
       8            1 : import numpy as np
       9            1 : import pytest
      10              : 
      11              : 
      12            1 : def test_real_system_pair_distance_vector_with_y_component_raises() -> None:
      13            1 :     import pairinteraction.real as pi_real
      14              : 
      15            1 :     ket = pi_real.KetAtom("Rb", n=60, l=0, j=0.5, m=0.5)
      16            1 :     basis = pi_real.BasisAtom("Rb", n=(0, 0), additional_kets=[ket])
      17            1 :     system = pi_real.SystemAtom(basis)
      18            1 :     basis_pair = pi_real.BasisPair((system, system))
      19              : 
      20            1 :     with pytest.raises(ValueError, match="y-component"):
      21            1 :         pi_real.SystemPair(basis_pair).set_distance_vector([0, 1, 0], unit="micrometer")
      22              : 
      23              : 
      24            1 : def test_get_corresponding_energy_symmetrized(caplog: pytest.LogCaptureFixture) -> None:
      25            1 :     import pairinteraction as pi
      26              : 
      27            1 :     ket_a = pi.KetAtom("Rb", n=60, l=0, j=0.5, m=0.5)
      28            1 :     ket_b = pi.KetAtom("Rb", n=61, l=0, j=0.5, m=0.5)
      29            1 :     basis_atom = pi.BasisAtom("Rb", n=(58, 63), l=(0, 2), m=(-1.5, 1.5))
      30            1 :     system_atom = pi.SystemAtom(basis_atom).diagonalize(diagonalizer="eigen")
      31            1 :     pair_energy = sum(system_atom.get_corresponding_energy(ket, "GHz") for ket in (ket_a, ket_b))
      32            1 :     basis_pair = pi.BasisPair(
      33              :         [system_atom, system_atom], m=(1, 1), energy=(pair_energy - 3, pair_energy + 3), energy_unit="GHz"
      34              :     )
      35            1 :     assert np.allclose(np.sort(basis_pair.get_overlaps((ket_a, ket_b)))[-2:], 0.5)
      36              : 
      37              :     # Without interaction, the ket is distributed over two degenerate states, so the energy is still unique
      38            1 :     system_pair = pi.SystemPair(basis_pair).diagonalize(diagonalizer="eigen")
      39            1 :     with caplog.at_level(logging.WARNING):
      40            1 :         energy = system_pair.get_corresponding_energy((ket_a, ket_b), "GHz")
      41            1 :     assert "Cannot find the uniquely corresponding" not in caplog.text
      42            1 :     assert np.isclose(energy, pair_energy, rtol=1e-14)
      43              : 
      44              :     # With interaction, the symmetric and antisymmetric states have different energies
      45            1 :     caplog.clear()
      46            1 :     system_pair = pi.SystemPair(basis_pair).set_distance(5, unit="micrometer").diagonalize(diagonalizer="eigen")
      47            1 :     with caplog.at_level(logging.WARNING):
      48            1 :         system_pair.get_corresponding_energy((ket_a, ket_b), "GHz")
      49            1 :     assert "Cannot find the uniquely corresponding energy" in caplog.text
        

Generated by: LCOV version 2.0-1