22 inline static const eT& tmp_real(
const eT& X) {
return X; }
25 inline static const T& tmp_real(
const std::complex<T>& X) {
return X.real(); }
32 cblas_dot(
const int N,
const eT* X,
const eT* Y)
39 return eT(
arma_atlas(cblas_sdot)(N, (
const T*)X, 1, (
const T*)Y, 1) );
45 return eT(
arma_atlas(cblas_ddot)(N, (
const T*)X, 1, (
const T*)Y, 1) );
58 cx_cblas_dot(
const int N,
const eT* X,
const eT* Y)
64 typedef typename std::complex<float> T;
67 arma_atlas(cblas_cdotu_sub)(N, (
const T*)X, 1, (
const T*)Y, 1, &out);
74 typedef typename std::complex<double> T;
77 arma_atlas(cblas_zdotu_sub)(N, (
const T*)X, 1, (
const T*)Y, 1, &out);
94 const enum CBLAS_ORDER Order,
const enum CBLAS_TRANSPOSE TransA,
95 const int M,
const int N,
97 const eT *A,
const int lda,
98 const eT *X,
const int incX,
100 eT *Y,
const int incY
108 arma_atlas(cblas_sgemv)(Order, TransA, M, N, (
const T)tmp_real(alpha), (
const T*)A, lda, (
const T*)X, incX, (
const T)tmp_real(beta), (T*)Y, incY);
114 arma_atlas(cblas_dgemv)(Order, TransA, M, N, (
const T)tmp_real(alpha), (
const T*)A, lda, (
const T*)X, incX, (
const T)tmp_real(beta), (T*)Y, incY);
119 typedef std::complex<float> T;
120 arma_atlas(cblas_cgemv)(Order, TransA, M, N, (
const T*)&alpha, (
const T*)A, lda, (
const T*)X, incX, (
const T*)&beta, (T*)Y, incY);
125 typedef std::complex<double> T;
126 arma_atlas(cblas_zgemv)(Order, TransA, M, N, (
const T*)&alpha, (
const T*)A, lda, (
const T*)X, incX, (
const T*)&beta, (T*)Y, incY);
132 template<
typename eT>
137 const enum CBLAS_ORDER Order,
const enum CBLAS_TRANSPOSE TransA,
138 const enum CBLAS_TRANSPOSE TransB,
const int M,
const int N,
139 const int K,
const eT alpha,
const eT *A,
140 const int lda,
const eT *B,
const int ldb,
141 const eT beta, eT *C,
const int ldc
149 arma_atlas(cblas_sgemm)(Order, TransA, TransB, M, N, K, (
const T)tmp_real(alpha), (
const T*)A, lda, (
const T*)B, ldb, (
const T)tmp_real(beta), (T*)C, ldc);
155 arma_atlas(cblas_dgemm)(Order, TransA, TransB, M, N, K, (
const T)tmp_real(alpha), (
const T*)A, lda, (
const T*)B, ldb, (
const T)tmp_real(beta), (T*)C, ldc);
160 typedef std::complex<float> T;
161 arma_atlas(cblas_cgemm)(Order, TransA, TransB, M, N, K, (
const T*)&alpha, (
const T*)A, lda, (
const T*)B, ldb, (
const T*)&beta, (T*)C, ldc);
166 typedef std::complex<double> T;
167 arma_atlas(cblas_zgemm)(Order, TransA, TransB, M, N, K, (
const T*)&alpha, (
const T*)A, lda, (
const T*)B, ldb, (
const T*)&beta, (T*)C, ldc);
173 template<
typename eT>
178 const enum CBLAS_ORDER Order,
const int M,
const int N,
179 eT *A,
const int lda,
int *ipiv
187 return arma_atlas(clapack_sgetrf)(Order, M, N, (T*)A, lda, ipiv);
193 return arma_atlas(clapack_dgetrf)(Order, M, N, (T*)A, lda, ipiv);
198 typedef std::complex<float> T;
199 return arma_atlas(clapack_cgetrf)(Order, M, N, (T*)A, lda, ipiv);
204 typedef std::complex<double> T;
205 return arma_atlas(clapack_zgetrf)(Order, M, N, (T*)A, lda, ipiv);
215 template<
typename eT>
220 const enum CBLAS_ORDER Order,
const int N, eT *A,
221 const int lda,
const int *ipiv
229 return arma_atlas(clapack_sgetri)(Order, N, (T*)A, lda, ipiv);
235 return arma_atlas(clapack_dgetri)(Order, N, (T*)A, lda, ipiv);
240 typedef std::complex<float> T;
241 return arma_atlas(clapack_cgetri)(Order, N, (T*)A, lda, ipiv);
246 typedef std::complex<double> T;
247 return arma_atlas(clapack_zgetri)(Order, N, (T*)A, lda, ipiv);
257 template<
typename eT>
262 const enum CBLAS_ORDER Order,
263 const int N,
const int NRHS,
264 eT* A,
const int lda,
int* ipiv,
273 return arma_atlas(clapack_sgesv)(Order, N, NRHS, (T*)A, lda, ipiv, (T*)B, ldb);
279 return arma_atlas(clapack_dgesv)(Order, N, NRHS, (T*)A, lda, ipiv, (T*)B, ldb);
284 typedef std::complex<float> T;
285 return arma_atlas(clapack_cgesv)(Order, N, NRHS, (T*)A, lda, ipiv, (T*)B, ldb);
290 typedef std::complex<double> T;
291 return arma_atlas(clapack_zgesv)(Order, N, NRHS, (T*)A, lda, ipiv, (T*)B, ldb);
#define arma_type_check(condition)
#define arma_atlas(function)