17 #ifdef ARMA_USE_LAPACK 46 typedef std::complex<float> T;
52 typedef std::complex<double> T;
69 arma_fortran(arma_sgetri)(n, (T*)a, lda, ipiv, (T*)work, lwork, info);
75 arma_fortran(arma_dgetri)(n, (T*)a, lda, ipiv, (T*)work, lwork, info);
80 typedef std::complex<float> T;
81 arma_fortran(arma_cgetri)(n, (T*)a, lda, ipiv, (T*)work, lwork, info);
86 typedef std::complex<double> T;
87 arma_fortran(arma_zgetri)(n, (T*)a, lda, ipiv, (T*)work, lwork, info);
103 arma_fortran(arma_strtri)(uplo, diag, n, (T*)a, lda, info);
109 arma_fortran(arma_dtrtri)(uplo, diag, n, (T*)a, lda, info);
114 typedef std::complex<float> T;
115 arma_fortran(arma_ctrtri)(uplo, diag, n, (T*)a, lda, info);
120 typedef std::complex<double> T;
121 arma_fortran(arma_ztrtri)(uplo, diag, n, (T*)a, lda, info);
127 template<
typename eT>
137 arma_fortran(arma_ssyev)(jobz, uplo, n, (T*)a, lda, (T*)w, (T*)work, lwork, info);
143 arma_fortran(arma_dsyev)(jobz, uplo, n, (T*)a, lda, (T*)w, (T*)work, lwork, info);
149 template<
typename eT>
154 char* jobz,
char* uplo,
blas_int* n,
155 eT* a,
blas_int* lda,
typename eT::value_type* w,
156 eT* work,
blas_int* lwork,
typename eT::value_type* rwork,
165 typedef typename std::complex<T> cx_T;
166 arma_fortran(arma_cheev)(jobz, uplo, n, (cx_T*)a, lda, (T*)w, (cx_T*)work, lwork, (T*)rwork, info);
172 typedef typename std::complex<T> cx_T;
173 arma_fortran(arma_zheev)(jobz, uplo, n, (cx_T*)a, lda, (T*)w, (cx_T*)work, lwork, (T*)rwork, info);
178 template<
typename eT>
183 char* jobvl,
char* jobvr,
blas_int* n,
184 eT* a,
blas_int* lda, eT* wr, eT* wi, eT* vl,
195 arma_fortran(arma_sgeev)(jobvl, jobvr, n, (T*)a, lda, (T*)wr, (T*)wi, (T*)vl, ldvl, (T*)vr, ldvr, (T*)work, lwork, info);
201 arma_fortran(arma_dgeev)(jobvl, jobvr, n, (T*)a, lda, (T*)wr, (T*)wi, (T*)vl, ldvl, (T*)vr, ldvr, (T*)work, lwork, info);
206 template<
typename eT>
211 char* jobvl,
char* jobvr,
blas_int* n,
215 eT* work,
blas_int* lwork,
typename eT::value_type* rwork,
224 typedef typename std::complex<T> cx_T;
225 arma_fortran(arma_cgeev)(jobvl, jobvr, n, (cx_T*)a, lda, (cx_T*)w, (cx_T*)vl, ldvl, (cx_T*)vr, ldvr, (cx_T*)work, lwork, (T*)rwork, info);
231 typedef typename std::complex<T> cx_T;
232 arma_fortran(arma_zgeev)(jobvl, jobvr, n, (cx_T*)a, lda, (cx_T*)w, (cx_T*)vl, ldvl, (cx_T*)vr, ldvr, (cx_T*)work, lwork, (T*)rwork, info);
239 template<
typename eT>
260 typedef std::complex<float> T;
266 typedef std::complex<double> T;
274 template<
typename eT>
295 typedef std::complex<float> T;
301 typedef std::complex<double> T;
309 template<
typename eT>
319 arma_fortran(arma_sgeqrf)(m, n, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
325 arma_fortran(arma_dgeqrf)(m, n, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
330 typedef std::complex<float> T;
331 arma_fortran(arma_cgeqrf)(m, n, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
336 typedef std::complex<double> T;
337 arma_fortran(arma_zgeqrf)(m, n, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
344 template<
typename eT>
354 arma_fortran(arma_sorgqr)(m, n, k, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
360 arma_fortran(arma_dorgqr)(m, n, k, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
366 template<
typename eT>
376 arma_fortran(arma_cungqr)(m, n, k, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
382 arma_fortran(arma_zungqr)(m, n, k, (T*)a, lda, (T*)tau, (T*)work, lwork, info);
387 template<
typename eT>
402 arma_fortran(arma_sgesvd)(jobu, jobvt, m, n, (T*)a, lda, (T*)s, (T*)u, ldu, (T*)vt, ldvt, (T*)work, lwork, info);
408 arma_fortran(arma_dgesvd)(jobu, jobvt, m, n, (T*)a, lda, (T*)s, (T*)u, ldu, (T*)vt, ldvt, (T*)work, lwork, info);
420 T* s, std::complex<T>* u,
blas_int* ldu, std::complex<T>* vt,
blas_int* ldvt,
432 jobu, jobvt, m, n, (std::complex<bT>*)a, lda,
433 (bT*)s, (std::complex<bT>*)u, ldu, (std::complex<bT>*)vt, ldvt,
434 (std::complex<bT>*)work, lwork, (bT*)rwork, info
443 jobu, jobvt, m, n, (std::complex<bT>*)a, lda,
444 (bT*)s, (std::complex<bT>*)u, ldu, (std::complex<bT>*)vt, ldvt,
445 (std::complex<bT>*)work, lwork, (bT*)rwork, info
452 template<
typename eT>
462 arma_fortran(arma_sgesv)(n, nrhs, (T*)a, lda, ipiv, (T*)b, ldb, info);
468 arma_fortran(arma_dgesv)(n, nrhs, (T*)a, lda, ipiv, (T*)b, ldb, info);
473 typedef std::complex<float> T;
474 arma_fortran(arma_cgesv)(n, nrhs, (T*)a, lda, ipiv, (T*)b, ldb, info);
479 typedef std::complex<double> T;
480 arma_fortran(arma_zgesv)(n, nrhs, (T*)a, lda, ipiv, (T*)b, ldb, info);
486 template<
typename eT>
489 gels(
char*
trans,
blas_int* m,
blas_int* n,
blas_int* nrhs, eT* a,
blas_int* lda, eT* b,
blas_int* ldb, eT* work,
blas_int* lwork,
blas_int* info)
496 arma_fortran(arma_sgels)(
trans, m, n, nrhs, (T*)a, lda, (T*)b, ldb, (T*)work, lwork, info);
502 arma_fortran(arma_dgels)(
trans, m, n, nrhs, (T*)a, lda, (T*)b, ldb, (T*)work, lwork, info);
507 typedef std::complex<float> T;
508 arma_fortran(arma_cgels)(
trans, m, n, nrhs, (T*)a, lda, (T*)b, ldb, (T*)work, lwork, info);
513 typedef std::complex<double> T;
514 arma_fortran(arma_zgels)(
trans, m, n, nrhs, (T*)a, lda, (T*)b, ldb, (T*)work, lwork, info);
520 template<
typename eT>
530 arma_fortran(arma_strtrs)(uplo,
trans, diag, n, nrhs, (T*)a, lda, (T*)b, ldb, info);
536 arma_fortran(arma_dtrtrs)(uplo,
trans, diag, n, nrhs, (T*)a, lda, (T*)b, ldb, info);
541 typedef std::complex<float> T;
542 arma_fortran(arma_ctrtrs)(uplo,
trans, diag, n, nrhs, (T*)a, lda, (T*)b, ldb, info);
547 typedef std::complex<double> T;
548 arma_fortran(arma_ztrtrs)(uplo,
trans, diag, n, nrhs, (T*)a, lda, (T*)b, ldb, info);
554 template<
typename eT>
557 gees(
char* jobvs,
char*
sort,
blas_int* select,
blas_int* n, eT* a,
blas_int* lda,
blas_int* sdim, eT* wr, eT* wi, eT* vs,
blas_int* ldvs, eT* work,
blas_int* lwork,
blas_int* bwork,
blas_int* info)
564 arma_fortran(arma_sgees)(jobvs,
sort, select, n, (T*)a, lda, sdim, (T*)wr, (T*)wi, (T*)vs, ldvs, (T*)work, lwork, bwork, info);
570 arma_fortran(arma_dgees)(jobvs,
sort, select, n, (T*)a, lda, sdim, (T*)wr, (T*)wi, (T*)vs, ldvs, (T*)work, lwork, bwork, info);
579 cx_gees(
char* jobvs,
char* sort,
blas_int* select,
blas_int* n, std::complex<T>* a,
blas_int* lda,
blas_int* sdim, std::complex<T>* w, std::complex<T>* vs,
blas_int* ldvs, std::complex<T>* work,
blas_int* lwork, T* rwork,
blas_int* bwork,
blas_int* info)
587 typedef std::complex<bT> cT;
588 arma_fortran(arma_cgees)(jobvs,
sort, select, n, (cT*)a, lda, sdim, (cT*)w, (cT*)vs, ldvs, (cT*)work, lwork, (bT*)rwork, bwork, info);
594 typedef std::complex<bT> cT;
595 arma_fortran(arma_zgees)(jobvs,
sort, select, n, (cT*)a, lda, sdim, (cT*)w, (cT*)vs, ldvs, (cT*)work, lwork, (bT*)rwork, bwork, info);
601 template<
typename eT>
604 trsyl(
char* transa,
char* transb,
blas_int* isgn,
blas_int* m,
blas_int* n,
const eT* a,
blas_int* lda,
const eT* b,
blas_int* ldb, eT* c,
blas_int* ldc, eT* scale,
blas_int* info)
611 arma_fortran(arma_strsyl)(transa, transb, isgn, m, n, (T*)a, lda, (T*)b, ldb, (T*)c, ldc, (T*)scale, info);
617 arma_fortran(arma_dtrsyl)(transa, transb, isgn, m, n, (T*)a, lda, (T*)b, ldb, (T*)c, ldc, (T*)scale, info);
622 typedef std::complex<float> T;
623 arma_fortran(arma_ctrsyl)(transa, transb, isgn, m, n, (T*)a, lda, (T*)b, ldb, (T*)c, ldc, (
float*)scale, info);
628 typedef std::complex<double> T;
629 arma_fortran(arma_ztrsyl)(transa, transb, isgn, m, n, (T*)a, lda, (T*)b, ldb, (T*)c, ldc, (
double*)scale, info);
634 template<
typename eT>
644 arma_fortran(arma_ssytrf)(uplo, n, (T*)a, lda, ipiv, (T*)work, lwork, info);
650 arma_fortran(arma_dsytrf)(uplo, n, (T*)a, lda, ipiv, (T*)work, lwork, info);
655 typedef std::complex<float> T;
656 arma_fortran(arma_csytrf)(uplo, n, (T*)a, lda, ipiv, (T*)work, lwork, info);
661 typedef std::complex<double> T;
662 arma_fortran(arma_zsytrf)(uplo, n, (T*)a, lda, ipiv, (T*)work, lwork, info);
667 template<
typename eT>
677 arma_fortran(arma_ssytri)(uplo, n, (T*)a, lda, ipiv, (T*)work, info);
683 arma_fortran(arma_dsytri)(uplo, n, (T*)a, lda, ipiv, (T*)work, info);
688 typedef std::complex<float> T;
689 arma_fortran(arma_csytri)(uplo, n, (T*)a, lda, ipiv, (T*)work, info);
694 typedef std::complex<double> T;
695 arma_fortran(arma_zsytri)(uplo, n, (T*)a, lda, ipiv, (T*)work, info);
#define arma_type_check(condition)
arma_inline const Op< T1, op_htrans > trans(const Base< typename T1::elem_type, T1 > &X)
#define arma_fortran(function)
arma_inline const Op< T1, op_sort > sort(const Base< typename T1::elem_type, T1 > &X, const uword sort_type=0, const uword dim=0)