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