9#include <Eigen/SparseCore>
13#include <oneapi/tbb.h>
25struct AtomDescriptionByParameters;
27struct AtomDescriptionByRanges;
31template <
typename Scalar>
34class GitHubDownloader;
51 std::shared_ptr<const KetAtom>
get_ket(
const std::string &species,
54 template <
typename Scalar>
55 std::shared_ptr<const BasisAtom<Scalar>>
get_basis(
const std::string &species,
57 std::vector<size_t> additional_ket_ids);
59 template <
typename Scalar>
60 Eigen::SparseMatrix<Scalar, Eigen::RowMajor>
73 int local_version{-1};
74 int remote_version{-1};
77 const std::string default_database_repo_host{
"https://api.github.com"};
78 const std::vector<std::string> default_database_repo_paths{
79 "/repos/pairinteraction/database-sqdt/releases/latest",
80 "/repos/pairinteraction/database-mqdt/releases/latest"};
82 bool download_missing_;
85 std::unique_ptr<duckdb::DuckDB> db;
86 std::unique_ptr<duckdb::Connection> con;
87 std::unique_ptr<GitHubDownloader> downloader;
88 std::unique_ptr<ParquetManager> manager;
90 static constexpr bool default_download_missing{
false};
91 static constexpr bool default_use_cache{
true};
94 static oneapi::tbb::concurrent_unordered_map<std::string,
95 Eigen::SparseMatrix<double, Eigen::RowMajor>> &
96 get_matrix_elements_cache();
98 static Database &get_global_instance_without_checks(
bool download_missing,
bool use_cache,
101 void ensure_presence_of_table(
const std::string &name);
106#define EXTERN_GETTERS(SCALAR) \
107 extern template std::shared_ptr<const BasisAtom<SCALAR>> Database::get_basis<SCALAR>( \
108 const std::string &species, const AtomDescriptionByRanges &description, \
109 std::vector<size_t> additional_ket_ids); \
110 extern template Eigen::SparseMatrix<SCALAR, Eigen::RowMajor> \
111 Database::get_matrix_elements<SCALAR>(std::shared_ptr<const BasisAtom<SCALAR>> initial_basis, \
112 std::shared_ptr<const BasisAtom<SCALAR>> final_basis, \
113 OperatorType type, int q);
#define EXTERN_GETTERS(SCALAR)
Class for creating a basis of atomic kets.
std::shared_ptr< const KetAtom > get_ket(const std::string &species, const AtomDescriptionByParameters &description)
static Database & get_global_instance()
bool get_download_missing() const
std::filesystem::path get_database_dir() const
std::shared_ptr< const BasisAtom< Scalar > > get_basis(const std::string &species, const AtomDescriptionByRanges &description, std::vector< size_t > additional_ket_ids)
Eigen::SparseMatrix< Scalar, Eigen::RowMajor > get_matrix_elements(std::shared_ptr< const BasisAtom< Scalar > > initial_basis, std::shared_ptr< const BasisAtom< Scalar > > final_basis, OperatorType type, int q)
bool get_use_cache() const