39 using idx_t = size_type<matrixA_t>;
40 using range = pair<idx_t, idx_t>;
42 const idx_t m = nrows(A);
43 const idx_t n = ncols(A);
49 if (min(m, n) <= (idx_t)opts.nx) {
51 for (idx_t i = 0; i < m; ++i)
52 for (idx_t j = 0; j < n; ++j)
53 B(j, i) = conj(A(i, j));
57 const idx_t m1 = m / 2;
58 const idx_t n1 = n / 2;
60 auto A00 = slice(A, range(0, m1), range(0, n1));
61 auto A01 = slice(A, range(0, m1), range(n1, n));
62 auto A10 = slice(A, range(m1, m), range(0, n1));
63 auto A11 = slice(A, range(m1, m), range(n1, n));
65 auto B00 = slice(B, range(0, n1), range(0, m1));
66 auto B01 = slice(B, range(0, n1), range(m1, m));
67 auto B10 = slice(B, range(n1, n), range(0, m1));
68 auto B11 = slice(B, range(n1, n), range(m1, m));
94 using idx_t = size_type<matrixA_t>;
95 using range = pair<idx_t, idx_t>;
97 const idx_t m = nrows(A);
98 const idx_t n = ncols(A);
104 if (min(m, n) <= (idx_t)opts.nx) {
106 for (idx_t i = 0; i < m; ++i)
107 for (idx_t j = 0; j < n; ++j)
112 const idx_t m1 = m / 2;
113 const idx_t n1 = n / 2;
115 auto A00 = slice(A, range(0, m1), range(0, n1));
116 auto A01 = slice(A, range(0, m1), range(n1, n));
117 auto A10 = slice(A, range(m1, m), range(0, n1));
118 auto A11 = slice(A, range(m1, m), range(n1, n));
120 auto B00 = slice(B, range(0, n1), range(0, m1));
121 auto B01 = slice(B, range(0, n1), range(m1, m));
122 auto B10 = slice(B, range(n1, n), range(0, m1));
123 auto B11 = slice(B, range(n1, n), range(m1, m));
void transpose(matrixA_t &A, matrixB_t &B, const TransposeOpts &opts={})
transpose a matrix A into a matrix B.
Definition transpose.hpp:92
void conjtranspose(matrixA_t &A, matrixB_t &B, const TransposeOpts &opts={})
conjugate transpose a matrix A into a matrix B.
Definition transpose.hpp:37
#define tlapack_check(cond)
Throw an error if cond is false.
Definition exceptionHandling.hpp:98
typename traits::real_type_traits< Types..., int >::type real_type
The common real type of the list of types.
Definition scalar_type_traits.hpp:113