LCOV - code coverage report
Current view: top level - src/pairinteraction_gui/page - two_atoms_page.py (source / functions) Hit Total Coverage
Test: coverage.info Lines: 36 50 72.0 %
Date: 2025-07-05 13:02:33 Functions: 1 12 8.3 %

          Line data    Source code
       1             : # SPDX-FileCopyrightText: 2025 Pairinteraction Developers
       2             : # SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4           1 : import logging
       5           1 : from typing import Any
       6             : 
       7           1 : from PySide6.QtWidgets import QHBoxLayout, QMenu, QPushButton, QStyle
       8             : 
       9           1 : from pairinteraction_gui.calculate.calculate_two_atoms import ParametersTwoAtoms, ResultsTwoAtoms, calculate_two_atoms
      10           1 : from pairinteraction_gui.config import (
      11             :     BasisConfigTwoAtoms,
      12             :     CalculationConfig,
      13             :     KetConfigTwoAtoms,
      14             :     SystemConfigTwoAtoms,
      15             : )
      16           1 : from pairinteraction_gui.page.base_page import CalculationPage
      17             : 
      18           1 : logger = logging.getLogger(__name__)
      19             : 
      20             : 
      21           1 : class TwoAtomsPage(CalculationPage):
      22             :     """Page for configuring and analyzing pair systems."""
      23             : 
      24           1 :     title = "Two Atoms"
      25           1 :     tooltip = "Configure and analyze pair systems"
      26             : 
      27           1 :     def setupWidget(self) -> None:
      28           1 :         super().setupWidget()
      29             : 
      30             :         # all attributes of instance BaseConfig will be added to the toolbox in postSetupWidget
      31           1 :         self.ket_config = KetConfigTwoAtoms(self)
      32           1 :         self.basis_config = BasisConfigTwoAtoms(self)
      33           1 :         self.system_config = SystemConfigTwoAtoms(self)
      34           1 :         self.calculation_config = CalculationConfig(self)
      35             : 
      36             :         # Set some better defaults for the two atoms page
      37           1 :         self.calculation_config.number_state_labels.setValue(5)
      38           1 :         self.calculation_config.number_state_labels.setChecked(False)
      39           1 :         self.calculation_config.energy_range.setValues(-0.5, 0.5)
      40           1 :         self.calculation_config.energy_range.setChecked(False)
      41             : 
      42           1 :         self.ket_config.signal_species_changed.connect(self.basis_config.on_species_changed)
      43           1 :         self.ket_config.signal_species_changed.connect(self.plotwidget.clear)
      44             : 
      45             :         # Create a fit button with menu
      46           1 :         fit_button = QPushButton("Fit")
      47           1 :         fit_button.setIcon(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogResetButton))
      48           1 :         fit_menu = QMenu(self)
      49           1 :         fit_menu.addAction("Fit c3", lambda: self.plotwidget.fit("c3"))
      50           1 :         fit_menu.addAction("Fit c6", lambda: self.plotwidget.fit("c6"))
      51           1 :         fit_menu.addAction("Fit c3+c6", lambda: self.plotwidget.fit("c3+c6"))
      52           1 :         fit_button.setMenu(fit_menu)
      53           1 :         fit_button.setFixedHeight(50)
      54           1 :         self.findChild(QHBoxLayout, name="bottomLayout").insertWidget(1, fit_button, stretch=1)
      55             : 
      56           1 :     def before_calculate(self) -> None:
      57           0 :         self.basis_config.clear_basis_pair_label()
      58           0 :         return super().before_calculate()
      59             : 
      60           1 :     def calculate(self) -> tuple[ParametersTwoAtoms, ResultsTwoAtoms]:
      61           0 :         parameters = ParametersTwoAtoms.from_page(self)
      62           0 :         results = calculate_two_atoms(parameters)
      63           0 :         return parameters, results
      64             : 
      65           1 :     def update_plot(self, parameters: ParametersTwoAtoms, results: ResultsTwoAtoms) -> None:  # type: ignore[override]
      66           0 :         super().update_plot(parameters, results)
      67             : 
      68           0 :         if results.basis_0_label is not None:
      69           0 :             self.basis_config.update_basis_pair_label(results.basis_0_label)
      70             : 
      71           1 :     def _get_export_replacements(self) -> dict[str, Any]:
      72           0 :         parameters = ParametersTwoAtoms.from_page(self)
      73           0 :         return parameters.to_replacement_dict()
      74             : 
      75           1 :     def _get_export_notebook_template_name(self) -> str:
      76           0 :         ranges = self.system_config.get_ranges_dict()
      77           0 :         if all(v[0] == v[-1] for k, v in ranges.items() if k in ["Ex", "Ey", "Ez", "Bx", "By", "Bz"]):
      78           0 :             return "two_atoms.ipynb"
      79           0 :         return "two_atoms_variable_fields.ipynb"

Generated by: LCOV version 1.16