14#include <Eigen/SparseCore>
17#include <unordered_map>
21template <
typename Scalar>
22class BasisPairCreator;
24template <
typename Scalar>
27template <
typename Scalar>
30template <
typename Scalar>
35template <
typename Scalar>
40 using ketvec_t = std::vector<std::shared_ptr<const ket_t>>;
43template <
typename Scalar>
45 public std::enable_shared_from_this<BasisPair<Scalar>> {
67 std::shared_ptr<const BasisAtom<Scalar>>
get_basis1()
const;
68 std::shared_ptr<const BasisAtom<Scalar>>
get_basis2()
const;
72 std::shared_ptr<const KetAtom> ket2)
const;
73 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
77 std::shared_ptr<const KetAtom> ket2)
const;
78 Eigen::SparseMatrix<real_t, Eigen::RowMajor>
84 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
90 std::shared_ptr<const KetAtom> ket2,
93 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
95 int q1 = 0,
int q2 = 0)
const;
96 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
104 std::shared_ptr<const BasisAtom<Scalar>> basis1;
105 std::shared_ptr<const BasisAtom<Scalar>> basis2;
Class for creating a basis of atomic kets.
int get_ket_index_from_tuple(size_t state_index1, size_t state_index2) const
const range_t & get_index_range(size_t state_index1) const
Eigen::VectorX< Scalar > get_amplitudes(std::shared_ptr< const KetAtom > ket1, std::shared_ptr< const KetAtom > ket2) const
std::shared_ptr< const BasisAtom< Scalar > > get_basis2() const
Eigen::VectorX< real_t > get_overlaps(std::shared_ptr< const KetAtom > ket1, std::shared_ptr< const KetAtom > ket2) const
std::unordered_map< std::vector< size_t >, size_t, utils::hash< std::vector< size_t > > > map_indices_t
typename traits::CrtpTraits< Type >::ket_t ket_t
typename traits::CrtpTraits< Type >::ketvec_t ketvec_t
Eigen::VectorX< Scalar > get_matrix_elements(std::shared_ptr< const ket_t >, OperatorType, int) const override
std::shared_ptr< const BasisAtom< Scalar > > get_basis1() const
BasisPair(Private, ketvec_t &&kets, map_range_t &&map_range_of_state_index2, map_indices_t &&state_indices_to_ket_index, std::shared_ptr< const BasisAtom< Scalar > > basis1, std::shared_ptr< const BasisAtom< Scalar > > basis2)
typename traits::CrtpTraits< Type >::real_t real_t
std::unordered_map< size_t, range_t > map_range_t
std::unordered_map< size_t, size_t > map_size_t
Matrix< Type, Dynamic, 1 > VectorX
typename traits::NumTraits< Scalar >::real_t real_t
std::vector< std::shared_ptr< const ket_t > > ketvec_t
Helper struct to extract types from a derived basis type. Must be specialized for each derived basis ...
Helper struct to extract types from a numerical type.