#include "config.h"

namespace tbplas::diag {
void DiagConfig::gen_energies(Eigen::VectorXd& energy) const
{
    int num_grid = static_cast<int>((e_max - e_min) / e_step);
    energy = Eigen::VectorXd::LinSpaced(num_grid + 1, e_min, e_max);
}

void DiagConfig::map_ac_cond_component(int& alpha, int& beta) const
{
    int comp_from_zero = ac_cond_component - 1;
    beta = comp_from_zero % 3;
    alpha = (comp_from_zero - beta) / 3;
}

void DiagConfig::set_k_points(const double* arg_k_points, const size_t& arg_num_kpt)
{
    new (&python_kpt_map_) Eigen::Map<const Eigen::Matrix3Xd>(
        const_cast<double*>(arg_k_points),
        3,
        arg_num_kpt);
}

Eigen::Map<const Eigen::Matrix3Xd> DiagConfig::get_k_points() const
{
    if (python_mode) {
        return python_kpt_map_;
    }
    return Eigen::Map<const Eigen::Matrix3Xd>(
        const_cast<double*>(k_points.data()),
        k_points.rows(),
        k_points.cols());
}

} // namespace tbplas::diag