LCOV - code coverage report
Current view: top level - tests - test_starkmap.py (source / functions) Hit Total Coverage
Test: coverage.info Lines: 23 23 100.0 %
Date: 2025-08-29 20:47:05 Functions: 1 2 50.0 %

          Line data    Source code
       1             : # SPDX-FileCopyrightText: 2024 PairInteraction Developers
       2             : # SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : """Test the Stark map calculation."""
       5             : 
       6           1 : import numpy as np
       7           1 : import pairinteraction.real as pi
       8           1 : import pytest
       9             : 
      10           1 : from .compare_utils import REFERENCE_PATHS, compare_eigensystem_to_reference
      11             : 
      12             : 
      13           1 : def test_starkmap(generate_reference: bool) -> None:
      14             :     """Test calculating a Stark map."""
      15             :     # Create a basis
      16           1 :     ket = pi.KetAtom("Rb", n=60, l=0, m=0.5)
      17           1 :     basis = pi.BasisAtom("Rb", n=(58, 62), l=(0, 2))
      18           1 :     print(f"Number of basis states: {basis.number_of_states}")
      19             : 
      20           1 :     electric_fields = np.linspace(0, 10, 11)
      21             :     # Create systems for different values of the electric field
      22           1 :     systems = [pi.SystemAtom(basis).set_electric_field([0, 0, e], unit="V/cm") for e in electric_fields]
      23             : 
      24             :     # Diagonalize the systems in parallel
      25           1 :     pi.diagonalize(systems, diagonalizer="eigen", sort_by_energy=True)
      26             : 
      27             :     # Get the overlap with |ket>
      28           1 :     overlaps = np.array([system.basis.get_overlaps(ket) for system in systems])
      29             : 
      30             :     # Compare to reference data
      31           1 :     kets = [repr(ket) for ket in systems[0].basis.kets]
      32           1 :     eigenenergies = np.array([system.get_eigenenergies(unit="GHz") for system in systems])
      33           1 :     eigenvectors = np.array([system.get_eigenbasis().get_coefficients().todense().A1 for system in systems])
      34             : 
      35           1 :     reference_path = REFERENCE_PATHS["stark_map"]
      36           1 :     if generate_reference:
      37           1 :         reference_path.mkdir(parents=True, exist_ok=True)
      38           1 :         np.savetxt(reference_path / "kets.txt", kets, fmt="%s", delimiter="\t")
      39           1 :         np.savetxt(reference_path / "eigenenergies.txt", eigenenergies)
      40           1 :         np.savetxt(reference_path / "overlaps.txt", overlaps)
      41           1 :         pytest.skip("Reference data generated, skipping comparison test")
      42             : 
      43           1 :     compare_eigensystem_to_reference(reference_path, eigenenergies, overlaps, eigenvectors, kets)

Generated by: LCOV version 1.16