18 static constexpr double tol = 1e-12;
34 void init(nda::vector_const_view<std::complex<double>> mesh, nda::array_const_view<std::complex<double>, 3> data)
override;
42 [[nodiscard]] nda::array<std::complex<double>, 3>
evaluate(nda::vector_const_view<std::complex<double>> grid)
override;
53 [[nodiscard]] nda::array<std::complex<double>, 3>
evaluate(nda::vector_const_view<std::complex<double>> grid,
54 nda::array_const_view<std::complex<double>, 3> theta)
override {
55 if (theta.shape()[0] != 0) {
56 std::cerr <<
"Continuation poles optimization has not been implemented in matrix-valued continuation yet." << std::endl;
65 [[nodiscard]]
C2PY_PROPERTY_GET(Pick_eigenvalues) nda::vector<double> get_Pick_eigenvalues()
const override;
69 nda::vector<complex_mpt> _mesh{};
70 nda::vector<matrix_cplx_mpt> _data{};
71 nda::vector<matrix_cplx_mpt> _Ws{};
73 nda::vector<matrix_cplx_mpt> _sqrt_one{};
74 nda::vector<matrix_cplx_mpt> _sqrt_two{};
75 nda::vector<double> _Pick_eigenvalues{};
84 matrix_cplx_mpt sqrt_m(
const matrix_cplx_mpt &M,
bool &is_Schur) {
85 Eigen::ComplexEigenSolver<matrix_cplx_mpt> ces;
87 matrix_cplx_mpt D = ces.eigenvalues();
89 for (
int i = 0; i < D.rows(); i++) {
90 if (D(i, 0).real() < tol) { is_Schur =
false; }
92 return ces.eigenvectors() * D.array().sqrt().matrix().asDiagonal() * ces.eigenvectors().inverse().eval();
nda::array< std::complex< double >, 3 > evaluate(nda::vector_const_view< std::complex< double > > grid, nda::array_const_view< std::complex< double >, 3 > theta) override
Evaluate the full matrix-valued real-frequency Green's function on a chosen grid.
void init(nda::vector_const_view< std::complex< double > > mesh, nda::array_const_view< std::complex< double >, 3 > data) override
Build the full matrix-valued Caratheodory continuation from Matsubara-frequency input data.