blas-array2 0.3.0

Parameter-optional BLAS wrapper by ndarray::Array (Ix1 or Ix2).
Documentation
#pragma region type definition

typedef int blas_int;

typedef struct { float real; float imag; } c32;

typedef struct { double real; double imag; } c64;

#define BLAS_INT blas_int
#define BLAS_Complex8 c32
#define BLAS_Complex16 c64

#pragma endregion

#pragma region Scalar BLAS

double dcabs1_(const BLAS_Complex16 *z);
float scabs1_(const BLAS_Complex8 *c);

#pragma endregion

#pragma region Level1 BLAS

// asum: sum | real( x_i ) | + | imag( x_i ) |

double dasum_(const BLAS_INT *n, const double *x, const BLAS_INT *incx);
double dzasum_(const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx);
float sasum_(const BLAS_INT *n, const float *x, const BLAS_INT *incx);
float scasum_(const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx);

// axpy: y = ax + y

void caxpy_(const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *y, const BLAS_INT *incy);
void daxpy_(const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, double *y, const BLAS_INT *incy);
void saxpy_(const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, float *y, const BLAS_INT *incy);
void zaxpy_(const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *y, const BLAS_INT *incy);

// copy: y = x

void ccopy_(const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *y, const BLAS_INT *incy);
void dcopy_(const BLAS_INT *n, const double *x, const BLAS_INT *incx, double *y, const BLAS_INT *incy);
void scopy_(const BLAS_INT *n, const float *x, const BLAS_INT *incx, float *y, const BLAS_INT *incy);
void zcopy_(const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *y, const BLAS_INT *incy);

// dot: x^H x and x^T x

void cdotc_(BLAS_Complex8 *pres, const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy);
void cdotu_(BLAS_Complex8 *pres, const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy);
double ddot_(const BLAS_INT *n, const double *x, const BLAS_INT *incx, const double *y, const BLAS_INT *incy);
double dsdot_(const BLAS_INT *n, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy);
float sdot_(const BLAS_INT *n, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy);
float sdsdot_(const BLAS_INT *n, const float *sb, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy);
void zdotc_(BLAS_Complex16 *pres, const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy);
void zdotu_(BLAS_Complex16 *pres, const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy);

// iamax: argmax_i | real( x_i ) | + | imag( x_i ) |

BLAS_INT icamax_(const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx);
BLAS_INT idamax_(const BLAS_INT *n, const double *x, const BLAS_INT *incx);
BLAS_INT isamax_(const BLAS_INT *n, const float *x, const BLAS_INT *incx);
BLAS_INT izamax_(const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx);

// nrm2: || x ||_2

double dnrm2_(const BLAS_INT *n, const double *x, const BLAS_INT *incx);
double dznrm2_(const BLAS_INT *n, const BLAS_Complex16 *x, const BLAS_INT *incx);
float snrm2_(const BLAS_INT *n, const float *x, const BLAS_INT *incx);
float scnrm2_(const BLAS_INT *n, const BLAS_Complex8 *x, const BLAS_INT *incx);

// scal: x = alpha x

void cscal_(const BLAS_INT *n, const BLAS_Complex8 *a, BLAS_Complex8 *x, const BLAS_INT *incx);
void csscal_(const BLAS_INT *n, const float *a, BLAS_Complex8 *x, const BLAS_INT *incx);
void dscal_(const BLAS_INT *n, const double *a, double *x, const BLAS_INT *incx);
void sscal_(const BLAS_INT *n, const float *a, float *x, const BLAS_INT *incx);
void zdscal_(const BLAS_INT *n, const double *a, BLAS_Complex16 *x, const BLAS_INT *incx);
void zscal_(const BLAS_INT *n, const BLAS_Complex16 *a, BLAS_Complex16 *x, const BLAS_INT *incx);

// swap: x <=> y

void cswap_(const BLAS_INT *n, BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *y, const BLAS_INT *incy);
void dswap_(const BLAS_INT *n, double *x, const BLAS_INT *incx, double *y, const BLAS_INT *incy);
void sswap_(const BLAS_INT *n, float *x, const BLAS_INT *incx, float *y, const BLAS_INT *incy);
void zswap_(const BLAS_INT *n, BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *y, const BLAS_INT *incy);

#pragma endregion

#pragma region Level1 BLAS plane rotations

// rot: apply plane rotation ([cz]rot in LAPACK)

void csrot_(const BLAS_INT *n, BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *y, const BLAS_INT *incy, const float *c, const float *s);
void drot_(const BLAS_INT *n, double *x, const BLAS_INT *incx, double *y, const BLAS_INT *incy, const double *c, const double *s);
void srot_(const BLAS_INT *n, float *x, const BLAS_INT *incx, float *y, const BLAS_INT *incy, const float *c, const float *s);
void zdrot_(const BLAS_INT *n, BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *y, const BLAS_INT *incy, const double *c, const double *s);

// rotg: generate plane rotation (cf. lartg)

void crotg_(BLAS_Complex8 *a, const BLAS_Complex8 *b, float *c, BLAS_Complex8 *s);
void drotg_(double *a, double *b, double *c, double *s);
void srotg_(float *a,float *b,float *c,float *s);
void zrotg_(BLAS_Complex16 *a, const BLAS_Complex16 *b, double *c, BLAS_Complex16 *s);

// rotm: apply modified (fast) plane rotation

void drotm_(const BLAS_INT *n, double *x, const BLAS_INT *incx, double *y, const BLAS_INT *incy, const double *param);
void srotm_(const BLAS_INT *n, float *x, const BLAS_INT *incx, float *y, const BLAS_INT *incy, const float *param);

// rotmg: generate modified (fast) plane rotation

void drotmg_(double *d1, double *d2, double *x1, const double *y1, double *param);
void srotmg_(float *d1, float *d2, float *x1, const float *y1, float *param);

#pragma endregion

#pragma region Level2 BLAS full

// gemv: general matrix-vector multiply

void cgemv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *beta, BLAS_Complex8 *y, const BLAS_INT *incy);
void dgemv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const double *alpha, const double *a, const BLAS_INT *lda, const double *x, const BLAS_INT *incx, const double *beta, double *y, const BLAS_INT *incy);
void sgemv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const float *alpha, const float *a, const BLAS_INT *lda, const float *x, const BLAS_INT *incx, const float *beta, float *y, const BLAS_INT *incy);
void zgemv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *beta, BLAS_Complex16 *y, const BLAS_INT *incy);

// ger: general matrix rank-1 update

void cgerc_(const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy, BLAS_Complex8 *a, const BLAS_INT *lda);
void cgeru_(const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy, BLAS_Complex8 *a, const BLAS_INT *lda);
void dger_(const BLAS_INT *m, const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, const double *y, const BLAS_INT *incy, double *a, const BLAS_INT *lda);
void sger_(const BLAS_INT *m, const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy, float *a, const BLAS_INT *lda);
void zgerc_(const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy, BLAS_Complex16 *a, const BLAS_INT *lda);
void zgeru_(const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy, BLAS_Complex16 *a, const BLAS_INT *lda);

// {he,sy}mv: Hermitian/symmetric matrix-vector multiply ([cz]symv in LAPACK)

void chemv_(const char *uplo, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *beta, BLAS_Complex8 *y, const BLAS_INT *incy);
void dsymv_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *a, const BLAS_INT *lda, const double *x, const BLAS_INT *incx, const double *beta, double *y, const BLAS_INT *incy);
void ssymv_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *a, const BLAS_INT *lda, const float *x, const BLAS_INT *incx, const float *beta, float *y, const BLAS_INT *incy);
void zhemv_(const char *uplo, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *beta, BLAS_Complex16 *y, const BLAS_INT *incy);

// {he,sy}r: Hermitian/symmetric rank-1 update

void cher_(const char *uplo, const BLAS_INT *n, const float *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *a, const BLAS_INT *lda);
void dsyr_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, double *a, const BLAS_INT *lda);
void ssyr_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, float *a, const BLAS_INT *lda);
void zher_(const char *uplo, const BLAS_INT *n, const double *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *a, const BLAS_INT *lda);

// {he,sy}r2: Hermitian/symmetric rank-2 update

void cher2_(const char *uplo, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy, BLAS_Complex8 *a, const BLAS_INT *lda);
void dsyr2_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, const double *y, const BLAS_INT *incy, double *a, const BLAS_INT *lda);
void ssyr2_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy, float *a, const BLAS_INT *lda);
void zher2_(const char *uplo, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy, BLAS_Complex16 *a, const BLAS_INT *lda);

// trmv: triangular matrix-vector multiply

void ctrmv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *b, const BLAS_INT *incx);
void dtrmv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const double *a, const BLAS_INT *lda, double *b, const BLAS_INT *incx);
void strmv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const float *a, const BLAS_INT *lda, float *b, const BLAS_INT *incx);
void ztrmv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *b, const BLAS_INT *incx);

// trsv: triangular matrix-vector solve

void ctrsv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *b, const BLAS_INT *incx);
void dtrsv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const double *a, const BLAS_INT *lda, double *b, const BLAS_INT *incx);
void strsv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const float *a, const BLAS_INT *lda, float *b, const BLAS_INT *incx);
void ztrsv_(const char *uplo, const char *transa, const char *diag, const BLAS_INT *n, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *b, const BLAS_INT *incx);

#pragma endregion

#pragma region Level2 BLAS packed

// {hp,sp}mv: Hermitian/symmetric matrix-vector multiply

void chpmv_(const char *uplo, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *ap, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *beta, BLAS_Complex8 *y, const BLAS_INT *incy);
void dspmv_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *ap, const double *x, const BLAS_INT *incx, const double *beta, double *y, const BLAS_INT *incy);
void sspmv_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *ap, const float *x, const BLAS_INT *incx, const float *beta, float *y, const BLAS_INT *incy);
void zhpmv_(const char *uplo, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *ap, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *beta, BLAS_Complex16 *y, const BLAS_INT *incy);

// {hp,sp}r: Hermitian/symmetric rank-1 update

void chpr_(const char *uplo, const BLAS_INT *n, const float *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, BLAS_Complex8 *ap);
void dspr_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, double *ap);
void sspr_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, float *ap);
void zhpr_(const char *uplo, const BLAS_INT *n, const double *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, BLAS_Complex16 *ap);

// {hp,sp}r2: Hermitian/symmetric rank-2 update

void chpr2_(const char *uplo, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *y, const BLAS_INT *incy, BLAS_Complex8 *ap);
void dspr2_(const char *uplo, const BLAS_INT *n, const double *alpha, const double *x, const BLAS_INT *incx, const double *y, const BLAS_INT *incy, double *ap);
void sspr2_(const char *uplo, const BLAS_INT *n, const float *alpha, const float *x, const BLAS_INT *incx, const float *y, const BLAS_INT *incy, float *ap);
void zhpr2_(const char *uplo, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *y, const BLAS_INT *incy, BLAS_Complex16 *ap);

// tpmv: triangular matrix-vector multiply

void ctpmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_Complex8 *ap, BLAS_Complex8 *x, const BLAS_INT *incx);
void dtpmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const double *ap, double *x, const BLAS_INT *incx);
void stpmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const float *ap, float *x, const BLAS_INT *incx);
void ztpmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_Complex16 *ap, BLAS_Complex16 *x, const BLAS_INT *incx);

// tpsv: triangular matrix-vector solve

void ctpsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_Complex8 *ap, BLAS_Complex8 *x, const BLAS_INT *incx);
void dtpsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const double *ap, double *x, const BLAS_INT *incx);
void stpsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const float *ap, float *x, const BLAS_INT *incx);
void ztpsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_Complex16 *ap, BLAS_Complex16 *x, const BLAS_INT *incx);


#pragma endregion

#pragma region Level2 BLAS banded

// gbmv: general matrix-vector multiply

void cgbmv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *kl, const BLAS_INT *ku, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *beta, BLAS_Complex8 *y, const BLAS_INT *incy);
void dgbmv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *kl, const BLAS_INT *ku, const double *alpha, const double *a, const BLAS_INT *lda, const double *x, const BLAS_INT *incx, const double *beta, double *y, const BLAS_INT *incy);
void sgbmv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *kl, const BLAS_INT *ku, const float *alpha, const float *a, const BLAS_INT *lda, const float *x, const BLAS_INT *incx, const float *beta, float *y, const BLAS_INT *incy);
void zgbmv_(const char *trans, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *kl, const BLAS_INT *ku, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *beta, BLAS_Complex16 *y, const BLAS_INT *incy);

// {hb,sb}mv: Hermitian/symmetric matrix-vector multiply

void chbmv_(const char *uplo, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *x, const BLAS_INT *incx, const BLAS_Complex8 *beta, BLAS_Complex8 *y, const BLAS_INT *incy);
void dsbmv_(const char *uplo, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const double *a, const BLAS_INT *lda, const double *x, const BLAS_INT *incx, const double *beta, double *y, const BLAS_INT *incy);
void ssbmv_(const char *uplo, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const float *a, const BLAS_INT *lda, const float *x, const BLAS_INT *incx, const float *beta, float *y, const BLAS_INT *incy);
void zhbmv_(const char *uplo, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *x, const BLAS_INT *incx, const BLAS_Complex16 *beta, BLAS_Complex16 *y, const BLAS_INT *incy);

// tbmv: triangular matrix-vector multiply

void ctbmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *x, const BLAS_INT *incx);
void dtbmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const double *a, const BLAS_INT *lda, double *x, const BLAS_INT *incx);
void stbmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const float *a, const BLAS_INT *lda, float *x, const BLAS_INT *incx);
void ztbmv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *x, const BLAS_INT *incx);

// tbsv: triangular matrix-vector solve

void ctbsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *x, const BLAS_INT *incx);
void dtbsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const double *a, const BLAS_INT *lda, double *x, const BLAS_INT *incx);
void stbsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const float *a, const BLAS_INT *lda, float *x, const BLAS_INT *incx);
void ztbsv_(const char *uplo, const char *trans, const char *diag, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *x, const BLAS_INT *incx);

#pragma endregion

#pragma region Level3 BLAS

// gemm: general matrix-matrix multiplication

void cgemm_(const char *transa, const char *transb, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void dgemm_(const char *transa, const char *transb, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const double *a, const BLAS_INT *lda, const double *b, const BLAS_INT *ldb, const double *beta, double *c, const BLAS_INT *ldc);
void sgemm_(const char *transa, const char *transb, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const float *a, const BLAS_INT *lda, const float *b, const BLAS_INT *ldb, const float *beta, float *c, const BLAS_INT *ldc);
void zgemm_(const char *transa, const char *transb, const BLAS_INT *m, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);

// {he,sy}mm: Hermitian/symmetric matrix-matrix multiply

void chemm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void csymm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void dsymm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const double *alpha, const double *a, const BLAS_INT *lda, const double *b, const BLAS_INT *ldb, const double *beta, double *c, const BLAS_INT *ldc);
void ssymm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const float *alpha, const float *a, const BLAS_INT *lda, const float *b, const BLAS_INT *ldb, const float *beta, float *c, const BLAS_INT *ldc);
void zhemm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);
void zsymm_(const char *side, const char *uplo, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);

// {he,sy}rk: Hermitian/symmetric rank-k update

void cherk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const float *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void csyrk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void dsyrk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const double *a, const BLAS_INT *lda, const double *beta, double *c, const BLAS_INT *ldc);
void ssyrk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const float *a, const BLAS_INT *lda, const float *beta, float *c, const BLAS_INT *ldc);
void zherk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const double *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);
void zsyrk_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);

// {he,sy}r2k: Hermitian/symmetric rank-2k update

void cher2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const float *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void csyr2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void dsyr2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const double *a, const BLAS_INT *lda, const double *b, const BLAS_INT *ldb, const double *beta, double *c, const BLAS_INT *ldc);
void ssyr2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const float *a, const BLAS_INT *lda, const float *b, const BLAS_INT *ldb, const float *beta, float *c, const BLAS_INT *ldc);
void zher2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const double *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);
void zsyr2k_(const char *uplo, const char *trans, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);

// trmm: triangular matrix-matrix multiplication

void ctrmm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *b, const BLAS_INT *ldb);
void dtrmm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const double *alpha, const double *a, const BLAS_INT *lda, double *b, const BLAS_INT *ldb);
void strmm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const float *alpha, const float *a, const BLAS_INT *lda, float *b, const BLAS_INT *ldb);
void ztrmm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *b, const BLAS_INT *ldb);

// trsm: triangular matrix-matrix solve

void ctrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, BLAS_Complex8 *b, const BLAS_INT *ldb);
void dtrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const double *alpha, const double *a, const BLAS_INT *lda, double *b, const BLAS_INT *ldb);
void strsm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const float *alpha, const float *a, const BLAS_INT *lda, float *b, const BLAS_INT *ldb);
void ztrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const BLAS_INT *m, const BLAS_INT *n, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, BLAS_Complex16 *b, const BLAS_INT *ldb);

#pragma endregion

#pragma region Level3 BLAS gemmt

void sgemmt_(const char *uplo, const char *transa, const char *transb, const BLAS_INT *n, const BLAS_INT *k, const float *alpha, const float *a, const BLAS_INT *lda, const float *b, const BLAS_INT *ldb, const float *beta, float *c, const BLAS_INT *ldc);
void cgemmt_(const char *uplo, const char *transa, const char *transb, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex8 *alpha, const BLAS_Complex8 *a, const BLAS_INT *lda, const BLAS_Complex8 *b, const BLAS_INT *ldb, const BLAS_Complex8 *beta, BLAS_Complex8 *c, const BLAS_INT *ldc);
void dgemmt_(const char *uplo, const char *transa, const char *transb, const BLAS_INT *n, const BLAS_INT *k, const double *alpha, const double *a, const BLAS_INT *lda, const double *b, const BLAS_INT *ldb, const double *beta, double *c, const BLAS_INT *ldc);
void zgemmt_(const char *uplo, const char *transa, const char *transb, const BLAS_INT *n, const BLAS_INT *k, const BLAS_Complex16 *alpha, const BLAS_Complex16 *a, const BLAS_INT *lda, const BLAS_Complex16 *b, const BLAS_INT *ldb, const BLAS_Complex16 *beta, BLAS_Complex16 *c, const BLAS_INT *ldc);

#pragma endregion