1 #ifndef MATRIX_BINDINGS_H
2 #define MATRIX_BINDINGS_H
4 #include <alps/numeric/real.hpp>
6 namespace maquis {
namespace bindings {
8 template <
typename O,
typename I>
struct binding {
9 static O
convert(
const I& m){
return static_cast<O
>(m); }
12 template<
typename O,
typename I> O
matrix_cast(I
const& input){
17 struct binding< std::vector<T>, alps::numeric::diagonal_matrix<T> > {
18 static std::vector<T>
convert(
const alps::numeric::diagonal_matrix<T>& m){
19 return m.get_values();
23 template <
typename T,
typename S,
template<
class M,
class SS>
class C>
24 struct binding< std::vector< std::vector<T> >, C<alps::numeric::diagonal_matrix<T>, S> > {
25 static std::vector< std::vector<T> >
convert(
const C<alps::numeric::diagonal_matrix<T>, S>& m){
26 std::vector< std::vector<T> > set;
27 for(
size_t k = 0; k < m.n_blocks(); ++k){
28 set.push_back(m[k].get_values());
38 inline typename alps::numeric::real_type<T>::type
real(T f){
42 template<
typename _InputIterator,
typename _Tp>
44 accumulate(_InputIterator __first, _InputIterator __last, _Tp __init){
static O convert(const I &m)
block_matrix< Matrix, SymmGroup > sqrt(block_matrix< Matrix, SymmGroup > m)
static std::vector< T > convert(const alps::numeric::diagonal_matrix< T > &m)
static std::vector< std::vector< T > > convert(const C< alps::numeric::diagonal_matrix< T >, S > &m)
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
O matrix_cast(I const &input)
alps::numeric::real_type< T >::type real(T f)