LCOV - code coverage report
Current view: top level - bindings/ket - Ket.py.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 68 73 93.2 %
Date: 2025-06-06 09:03:14 Functions: 6 10 60.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 Pairinteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "./Ket.py.hpp"
       5             : 
       6             : #include "pairinteraction/basis/BasisAtom.hpp"
       7             : #include "pairinteraction/database/Database.hpp"
       8             : #include "pairinteraction/ket/Ket.hpp"
       9             : #include "pairinteraction/ket/KetAtom.hpp"
      10             : #include "pairinteraction/ket/KetAtomCreator.hpp"
      11             : #include "pairinteraction/ket/KetPair.hpp"
      12             : #include "pairinteraction/utils/traits.hpp"
      13             : 
      14             : #include <complex>
      15             : #include <nanobind/nanobind.h>
      16             : #include <nanobind/operators.h>
      17             : #include <nanobind/stl/shared_ptr.h>
      18             : #include <nanobind/stl/string.h>
      19             : #include <nanobind/stl/vector.h>
      20             : #include <sstream>
      21             : 
      22             : namespace nb = nanobind;
      23             : using namespace pairinteraction;
      24             : 
      25           1 : static void declare_ket(nb::module_ &m) {
      26           1 :     std::string pyclass_name = "Ket";
      27           1 :     nb::class_<Ket> pyclass(m, pyclass_name.c_str());
      28           1 :     pyclass.def("get_energy", &Ket::get_energy)
      29           1 :         .def("get_quantum_number_f", &Ket::get_quantum_number_f)
      30           1 :         .def("get_quantum_number_m", &Ket::get_quantum_number_m)
      31           1 :         .def("get_parity", &Ket::get_parity)
      32           2 :         .def("get_label", &Ket::get_label)
      33           1 :         .def("__str__", [](Ket const &self) {
      34           0 :             std::stringstream ss;
      35           0 :             ss << self;
      36           0 :             return ss.str();
      37           0 :         });
      38           1 : }
      39             : 
      40           1 : static void declare_ket_atom(nb::module_ &m) {
      41           1 :     std::string pyclass_name = "KetAtom";
      42           1 :     nb::class_<KetAtom, Ket> pyclass(m, pyclass_name.c_str());
      43           1 :     pyclass.def("get_species", &KetAtom::get_species)
      44           1 :         .def("get_quantum_number_n", &KetAtom::get_quantum_number_n)
      45           1 :         .def("get_quantum_number_nu", &KetAtom::get_quantum_number_nu)
      46           1 :         .def("get_quantum_number_nui", &KetAtom::get_quantum_number_nui)
      47           1 :         .def("get_quantum_number_l", &KetAtom::get_quantum_number_l)
      48           1 :         .def("get_quantum_number_s", &KetAtom::get_quantum_number_s)
      49           1 :         .def("get_quantum_number_j", &KetAtom::get_quantum_number_j)
      50           1 :         .def("get_quantum_number_l_ryd", &KetAtom::get_quantum_number_l_ryd)
      51           1 :         .def("get_quantum_number_j_ryd", &KetAtom::get_quantum_number_j_ryd)
      52           1 :         .def("get_quantum_number_nui_std", &KetAtom::get_quantum_number_nui_std)
      53           1 :         .def("get_quantum_number_l_std", &KetAtom::get_quantum_number_l_std)
      54           1 :         .def("get_quantum_number_s_std", &KetAtom::get_quantum_number_s_std)
      55           1 :         .def("get_quantum_number_j_std", &KetAtom::get_quantum_number_j_std)
      56           1 :         .def("get_quantum_number_l_ryd_std", &KetAtom::get_quantum_number_l_ryd_std)
      57           1 :         .def("get_quantum_number_j_ryd_std", &KetAtom::get_quantum_number_j_ryd_std)
      58           1 :         .def("is_j_total_momentum", &KetAtom::is_j_total_momentum)
      59           1 :         .def("is_calculated_with_mqdt", &KetAtom::is_calculated_with_mqdt)
      60           1 :         .def("get_underspecified_channel_contribution",
      61           1 :              &KetAtom::get_underspecified_channel_contribution)
      62           1 :         .def(nb::self == nb::self) // NOLINT(misc-redundant-expression)
      63           0 :         .def("__hash__", [](const KetAtom &self) { return KetAtom::hash{}(self); });
      64           1 : }
      65             : 
      66           1 : static void declare_ket_atom_creator(nb::module_ &m) {
      67           1 :     std::string pyclass_name = "KetAtomCreator";
      68           2 :     nb::class_<KetAtomCreator> pyclass(m, pyclass_name.c_str());
      69           1 :     pyclass.def(nb::init<>())
      70           2 :         .def(nb::init<std::string, int, double, double, double>())
      71           1 :         .def("set_species", &KetAtomCreator::set_species)
      72           1 :         .def("set_energy", &KetAtomCreator::set_energy)
      73           1 :         .def("set_quantum_number_f", &KetAtomCreator::set_quantum_number_f)
      74           1 :         .def("set_quantum_number_m", &KetAtomCreator::set_quantum_number_m)
      75           1 :         .def("set_parity", &KetAtomCreator::set_parity)
      76           1 :         .def("set_quantum_number_n", &KetAtomCreator::set_quantum_number_n)
      77           1 :         .def("set_quantum_number_nu", &KetAtomCreator::set_quantum_number_nu)
      78           1 :         .def("set_quantum_number_nui", &KetAtomCreator::set_quantum_number_nui)
      79           1 :         .def("set_quantum_number_l", &KetAtomCreator::set_quantum_number_l)
      80           1 :         .def("set_quantum_number_s", &KetAtomCreator::set_quantum_number_s)
      81           1 :         .def("set_quantum_number_j", &KetAtomCreator::set_quantum_number_j)
      82           1 :         .def("set_quantum_number_l_ryd", &KetAtomCreator::set_quantum_number_l_ryd)
      83           1 :         .def("set_quantum_number_j_ryd", &KetAtomCreator::set_quantum_number_j_ryd)
      84           1 :         .def("create", &KetAtomCreator::create);
      85           1 : }
      86             : 
      87             : template <typename T>
      88           2 : static void declare_ket_pair(nb::module_ &m, std::string const &type_name) {
      89           2 :     std::string pyclass_name = "KetPair" + type_name;
      90           2 :     nb::class_<KetPair<T>, Ket> pyclass(m, pyclass_name.c_str());
      91           2 :     pyclass.def("get_atomic_states", &KetPair<T>::get_atomic_states)
      92           2 :         .def(nb::self == nb::self) // NOLINT(misc-redundant-expression)
      93           2 :         .def("__hash__", [](const KetPair<T> &self) { return typename KetPair<T>::hash{}(self); });
      94           2 : }
      95             : 
      96           1 : void bind_ket(nb::module_ &m) {
      97           1 :     declare_ket(m);
      98           1 :     declare_ket_atom(m);
      99           1 :     declare_ket_atom_creator(m);
     100           1 :     declare_ket_pair<double>(m, "Real");
     101           1 :     declare_ket_pair<std::complex<double>>(m, "Complex");
     102           1 : }

Generated by: LCOV version 1.16