24#include <triqs/gfs.hpp>
25#include <triqs/mesh.hpp>
27using namespace triqs::gfs;
28using namespace triqs::mesh;
31#include "channel_grouping.hpp"
36 using g2_n_t = gf<imfreq, tensor_valued<4>>;
37 using g2_n_vt = g2_n_t::view_type;
38 using g2_n_cvt = g2_n_t::const_view_type;
40 using g2_nn_t = gf<prod<imfreq, imfreq>, tensor_valued<4>>;
41 using g2_nn_vt = g2_nn_t::view_type;
42 using g2_nn_cvt = g2_nn_t::const_view_type;
63 template <Channel_t CH> g2_iw_t inverse(g2_iw_cvt g);
83 g2_iw_t inverse_PH(g2_iw_vt g);
103 g2_iw_t inverse_PP(g2_iw_vt g);
123 g2_iw_t inverse_PH_bar(g2_iw_vt g);
125 template <Channel_t CH> g2_nn_t inverse(g2_nn_cvt g);
127 g2_nn_t inverse_PH(g2_nn_vt g);
128 g2_nn_t inverse_PP(g2_nn_vt g);
129 g2_nn_t inverse_PH_bar(g2_nn_vt g);
156 template <Channel_t CH> g2_iw_t product(g2_iw_cvt A, g2_iw_cvt B);
183 g2_iw_t product_PH(g2_iw_vt A, g2_iw_vt B);
210 g2_iw_t product_PP(g2_iw_vt A, g2_iw_vt B);
237 g2_iw_t product_PH_bar(g2_iw_vt A, g2_iw_vt B);
239 template <Channel_t CH> g2_nn_t product(g2_nn_cvt A, g2_nn_cvt B);
241 g2_nn_t product_PH(g2_nn_vt A, g2_nn_vt B);
242 g2_nn_t product_PP(g2_nn_vt A, g2_nn_vt B);
243 g2_nn_t product_PH_bar(g2_nn_vt A, g2_nn_vt B);
266 template <Channel_t CH> g2_iw_t identity(g2_iw_cvt g);
290 g2_iw_t identity_PH(g2_iw_vt g);
314 g2_iw_t identity_PP(g2_iw_vt g);
338 g2_iw_t identity_PH_bar(g2_iw_vt g);
340 template <Channel_t CH> g2_nn_t identity(g2_nn_cvt g);
342 g2_nn_t identity_PH(g2_nn_vt g);
343 g2_nn_t identity_PP(g2_nn_vt g);
344 g2_nn_t identity_PH_bar(g2_nn_vt g);
347 C2PY_IGNORE array<g2_nn_cvt::scalar_t, 4> scalar_product_PH(g2_n_cvt vL, g2_nn_cvt M, g2_n_cvt vR);