123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812# 1 "src/owl/cblas/owl_cblas_basic.ml"(*
* OWL - OCaml Scientific and Engineering Computing
* Copyright (c) 2016-2019 Liang Wang <liang.wang@cl.cam.ac.uk>
*)(** Please refer to: Intel Math Kernel Library implements the BLAS
url: https://software.intel.com/en-us/mkl-developer-reference-c
*)openCtypestype('a,'b)t=('a,'b,Bigarray.c_layout)Bigarray.Array1.ttypecblas_layout=CblasRowMajor|CblasColMajorletcblas_layout=functionCblasRowMajor->101|CblasColMajor->102typecblas_transpose=CblasNoTrans|CblasTrans|CblasConjTransletcblas_transpose=functionCblasNoTrans->111|CblasTrans->112|CblasConjTrans->113typecblas_uplo=CblasUpper|CblasLowerletcblas_uplo=functionCblasUpper->121|CblasLower->122typecblas_diag=CblasNonUnit|CblasUnitletcblas_diag=functionCblasNonUnit->131|CblasUnit->132typecblas_side=CblasLeft|CblasRightletcblas_side=functionCblasLeft->141|CblasRight->142moduleC=Owl_cblas_generated(* Level 1 BLAS *)(* Computes the parameters for a Givens rotation. *)letrotgab=leta=allocatedoubleainletb=allocatedoublebinletc=allocatedouble0.inlets=allocatedouble0.inC.drotg~a~b~c~s;!@a,!@b,!@c,!@s(* Computes the parameters for a modified Givens rotation. *)letrotmg:typeab.(a,b)Bigarray.kind->float->float->float->float->float*float*float*(a,b)t=funkd1d2b1b2->matchkwith|Bigarray.Float32->(letd1=allocatefloatd1inletd2=allocatefloatd2inletb1=allocatefloatb1inletp=Bigarray.(Array1.createFloat32C_layout5)inlet_p=bigarray_startCtypes_static.Array1pinC.srotmg~d1~d2~b1~b2~p:_p;!@d1,!@d2,!@b1,p)|Bigarray.Float64->(letd1=allocatedoubled1inletd2=allocatedoubled2inletb1=allocatedoubleb1inletp=Bigarray.(Array1.createFloat64C_layout5)inlet_p=bigarray_startCtypes_static.Array1pinC.drotmg~d1~d2~b1~b2~p:_p;!@d1,!@d2,!@b1,p)|_->failwith"owl_cblas:rotmg"(* Performs modified Givens rotation of points in the plane *)letrotm:typeab.int->(a,b)t->int->(a,b)t->int->(a,b)t->unit=funnxincxyincyp->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_p=bigarray_startCtypes_static.Array1pinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.srotm~n~x:_x~incx~y:_y~incy~p:_p|Bigarray.Float64->C.drotm~n~x:_x~incx~y:_y~incy~p:_p|_->failwith"owl_cblas:rotm"in()(* Performs rotation of points in the plane. *)letrot:typeab.int->(a,b)t->int->(a,b)t->int->float->float->unit=funnxincxyincycs->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.srot~n~x:_x~incx~y:_y~incy~c~s|Bigarray.Float64->C.drot~n~x:_x~incx~y:_y~incy~c~s|_->failwith"owl_cblas:rot"in()(* Swaps a vector with another vector. *)letswap:typeab.int->(a,b)t->int->(a,b)t->int->unit=funnxincxyincy->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.sswap~n~x:_x~incx~y:_y~incy|Bigarray.Float64->C.dswap~n~x:_x~incx~y:_y~incy|Bigarray.Complex32->C.cswap~n~x:_x~incx~y:_y~incy|Bigarray.Complex64->C.zswap~n~x:_x~incx~y:_y~incy|_->failwith"owl_cblas:swap"in()(* Computes the product of a vector by a scalar. *)letscal:typeab.int->a->(a,b)t->int->unit=funnaxincx->let_x=bigarray_startCtypes_static.Array1xinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.sscal~n~alpha:a~x:_x~incx|Bigarray.Float64->C.dscal~n~alpha:a~x:_x~incx|Bigarray.Complex32->C.cscal~n~alpha:(allocatecomplex32a)~x:_x~incx|Bigarray.Complex64->C.zscal~n~alpha:(allocatecomplex64a)~x:_x~incx|_->failwith"owl_cblas:scal"in()letcszd_scal:typea.int->float->(Complex.t,a)t->int->unit=funnaxincx->let_x=bigarray_startCtypes_static.Array1xinlet_=matchBigarray.Array1.kindxwith|Bigarray.Complex32->C.csscal~n~alpha:a~x:_x~incx|Bigarray.Complex64->C.zdscal~n~alpha:a~x:_x~incxin()(* Copies vector to another vector. *)letcopy:typeab.int->(a,b)t->int->(a,b)t->int->unit=funnxincxyincy->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.scopy~n~x:_x~incx~y:_y~incy|Bigarray.Float64->C.dcopy~n~x:_x~incx~y:_y~incy|Bigarray.Complex32->C.ccopy~n~x:_x~incx~y:_y~incy|Bigarray.Complex64->C.zcopy~n~x:_x~incx~y:_y~incy|_->failwith"owl_cblas:copy"in()(* Computes a vector-scalar product and adds the result to a vector. *)letaxpy:typeab.int->a->(a,b)t->int->(a,b)t->int->unit=funnaxincxyincy->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.saxpy~n~alpha:a~x:_x~incx~y:_y~incy|Bigarray.Float64->C.daxpy~n~alpha:a~x:_x~incx~y:_y~incy|Bigarray.Complex32->C.caxpy~n~alpha:(allocatecomplex32a)~x:_x~incx~y:_y~incy|Bigarray.Complex64->C.zaxpy~n~alpha:(allocatecomplex64a)~x:_x~incx~y:_y~incy|_->failwith"owl_cblas:axpy"in()(* Computes a vector-vector dot product. *)letdot:typeab.?conj:bool->int->(a,b)t->int->(a,b)t->int->a=fun?(conj=false)nxincxyincy->let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sdot~n~x:_x~incx~y:_y~incy|Bigarray.Float64->C.ddot~n~x:_x~incx~y:_y~incy|Bigarray.Complex32->(let_z=allocatecomplex32Complex.zeroinifconj=truethenC.cdotc~n~x:_x~incx~y:_y~incy~dotc:_zelseC.cdotu~n~x:_x~incx~y:_y~incy~dotu:_z;!@_z)|Bigarray.Complex64->(let_z=allocatecomplex32Complex.zeroinifconj=truethenC.zdotc~n~x:_x~incx~y:_y~incy~dotc:_zelseC.zdotu~n~x:_x~incx~y:_y~incy~dotu:_z;!@_z)|_->failwith"owl_cblas:dot"(* Computes a vector-vector dot product with double precision. *)letsdsdotnaxincxyincy=let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinC.sdsdot~n~alpha:a~x:_x~incx~y:_y~incyletdsdotnxincxyincy=let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinC.dsdot~n~x:_x~incx~y:_y~incy(* Computes the Euclidean norm of a vector. *)letnrm2:typeab.int->(a,b)t->int->float=funnxincx->let_x=bigarray_startCtypes_static.Array1xinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.snrm2~n~x:_x~incx|Bigarray.Float64->C.dnrm2~n~x:_x~incx|Bigarray.Complex32->C.scnrm2~n~x:_x~incx|Bigarray.Complex64->C.dznrm2~n~x:_x~incx|_->failwith"owl_cblas:nrm2"(* Computes the sum of magnitudes of the vector elements. *)letasum:typeab.int->(a,b)t->int->float=funnxincx->let_x=bigarray_startCtypes_static.Array1xinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sasum~n~x:_x~incx|Bigarray.Float64->C.sasum~n~x:_x~incx|Bigarray.Complex32->C.scasum~n~x:_x~incx|Bigarray.Complex64->C.dzasum~n~x:_x~incx|_->failwith"owl_cblas:asum"(* Finds the index of the element with maximum absolute value. *)letamax:typeab.int->(a,b)t->int->int=funnxincx->let_x=bigarray_startCtypes_static.Array1xinleti=matchBigarray.Array1.kindxwith|Bigarray.Float32->C.isamax~n~x:_x~incx|Bigarray.Float64->C.idamax~n~x:_x~incx|Bigarray.Complex32->C.icamax~n~x:_x~incx|Bigarray.Complex64->C.izamax~n~x:_x~incx|_->failwith"owl_cblas:amax"inUnsigned.Size_t.to_inti(* Level 2 BLAS *)(* Computes a matrix-vector product using a general matrix *)letgemv:typeab.cblas_layout->cblas_transpose->int->int->a->(a,b)t->int->(a,b)t->int->a->(a,b)t->int->unit=funlayouttransmnalphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sgemv~order:_layout~transa:_trans~m~n~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Float64->C.dgemv~order:_layout~transa:_trans~m~n~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Complex32->C.cgemv~order:_layout~transa:_trans~m~n~alpha:(allocatecomplex32alpha)~a:_a~lda~x:_x~incx~beta:(allocatecomplex32beta)~y:_y~incy|Bigarray.Complex64->C.zgemv~order:_layout~transa:_trans~m~n~alpha:(allocatecomplex64alpha)~a:_a~lda~x:_x~incx~beta:(allocatecomplex64beta)~y:_y~incy|_->failwith"owl_cblas:gemv"(* Computes a matrix-vector product using a general band matrix *)letgbmv:typeab.cblas_layout->cblas_transpose->int->int->int->int->a->(a,b)t->int->(a,b)t->int->a->(a,b)t->int->unit=funlayouttransmnklkualphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sgbmv~order:_layout~transa:_trans~m~n~kl~ku~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Float64->C.dgbmv~order:_layout~transa:_trans~m~n~kl~ku~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Complex32->C.cgbmv~order:_layout~transa:_trans~m~n~kl~ku~alpha:(allocatecomplex32alpha)~a:_a~lda~x:_x~incx~beta:(allocatecomplex32beta)~y:_y~incy|Bigarray.Complex64->C.cgbmv~order:_layout~transa:_trans~m~n~kl~ku~alpha:(allocatecomplex64alpha)~a:_a~lda~x:_x~incx~beta:(allocatecomplex64beta)~y:_y~incy|_->failwith"owl_cblas:gbmv"(* Computes a matrix-vector product using a triangular matrix. *)lettrmv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->(a,b)t->int->(a,b)t->int->unit=funlayoutuplotransdiagnaldaxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.strmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Float64->C.dtrmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Complex32->C.ctrmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Complex64->C.ztrmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|_->failwith"owl_cblas:trmv"(* Computes a matrix-vector product using a triangular band matrix. *)lettbmv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->int->(a,b)t->int->(a,b)t->int->unit=funlayoutuplotransdiagnkaldaxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.stbmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Float64->C.dtbmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Complex32->C.ctbmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Complex64->C.ztbmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|_->failwith"owl_cblas:tbmv"(* Computes a matrix-vector product using a triangular packed matrix. *)lettpmv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->(a,b)t->(a,b)t->int->unit=funlayoutuplotransdiagnapxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.stpmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Float64->C.dtpmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Complex32->C.ctpmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Complex64->C.ztpmv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|_->failwith"owl_cblas:tpmv"(* Solves a system of linear equations whose coefficients are in a triangular matrix. *)lettrsv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->(a,b)t->int->(a,b)t->int->unit=funlayoutuplotransdiagnaldaxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.strsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Float64->C.dtrsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Complex32->C.ctrsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|Bigarray.Complex64->C.ztrsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~a:_a~lda~x:_x~incx|_->failwith"owl_cblas:trsv"(* Solves a system of linear equations whose coefficients are in a triangular band matrix. *)lettbsv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->int->(a,b)t->int->(a,b)t->int->unit=funlayoutuplotransdiagnkaldaxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.stbsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Float64->C.dtbsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Complex32->C.ctbsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|Bigarray.Complex64->C.ztbsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~k~a:_a~lda~x:_x~incx|_->failwith"owl_cblas:tbsv"(* Solves a system of linear equations whose coefficients are in a triangular packed matrix. *)lettpsv:typeab.cblas_layout->cblas_uplo->cblas_transpose->cblas_diag->int->(a,b)t->(a,b)t->int->unit=funlayoutuplotransdiagnapxincx->let_layout=cblas_layoutlayoutinlet_trans=cblas_transposetransinlet_uplo=cblas_uplouploinlet_diag=cblas_diagdiaginlet_x=bigarray_startCtypes_static.Array1xinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.stpsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Float64->C.dtpsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Complex32->C.ctpsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|Bigarray.Complex64->C.ztpsv~order:_layout~uplo:_uplo~transa:_trans~diag:_diag~n~ap:_ap~x:_x~incx|_->failwith"owl_cblas:tpsv"(* Computes a matrix-vector product for a symmetric matrix. *)letsymv:typea.cblas_layout->cblas_uplo->int->float->(float,a)t->int->(float,a)t->int->float->(float,a)t->int->unit=funlayoutuplonalphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.ssymv~order:_layout~uplo:_uplo~n~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Float64->C.dsymv~order:_layout~uplo:_uplo~n~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy(* Computes a matrix-vector product using a symmetric band matrix. *)letsbmv:typea.cblas_layout->cblas_uplo->int->int->float->(float,a)t->int->(float,a)t->int->float->(float,a)t->int->unit=funlayoutuplonkalphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.ssbmv~order:_layout~uplo:_uplo~n~k~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy|Bigarray.Float64->C.dsbmv~order:_layout~uplo:_uplo~n~k~alpha~a:_a~lda~x:_x~incx~beta~y:_y~incy(* Computes a matrix-vector product using a symmetric packed matrix. *)letspmv:typea.cblas_layout->cblas_uplo->int->int->float->(float,a)t->(float,a)t->int->float->(float,a)t->int->unit=funlayoutuplon_kalphaapxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sspmv~order:_layout~uplo:_uplo~n~alpha~ap:_ap~x:_x~incx~beta~y:_y~incy|Bigarray.Float64->C.dspmv~order:_layout~uplo:_uplo~n~alpha~ap:_ap~x:_x~incx~beta~y:_y~incy(* Performs a rank-1 update of a general matrix. *)letger:typeab.?conj:bool->cblas_layout->int->int->a->(a,b)t->int->(a,b)t->int->(a,b)t->int->unit=fun?(conj=false)layoutmnalphaxincxyincyalda->let_layout=cblas_layoutlayoutinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sger~order:_layout~m~n~alpha~x:_x~incx~y:_y~incy~a:_a~lda|Bigarray.Float64->C.dger~order:_layout~m~n~alpha~x:_x~incx~y:_y~incy~a:_a~lda|Bigarray.Complex32->ifconj=truethenC.cgerc~order:_layout~m~n~alpha:(allocatecomplex32alpha)~x:_x~incx~y:_y~incy~a:_a~ldaelseC.cgeru~order:_layout~m~n~alpha:(allocatecomplex32alpha)~x:_x~incx~y:_y~incy~a:_a~lda|Bigarray.Complex64->ifconj=truethenC.zgerc~order:_layout~m~n~alpha:(allocatecomplex64alpha)~x:_x~incx~y:_y~incy~a:_a~ldaelseC.zgeru~order:_layout~m~n~alpha:(allocatecomplex64alpha)~x:_x~incx~y:_y~incy~a:_a~lda|_->failwith"owl_cblas:ger"(* Performs a rank-1 update of a symmetric matrix. *)letsyr:typea.cblas_layout->cblas_uplo->int->float->(float,a)t->int->(float,a)t->int->unit=funlayoutuplonalphaxincxalda->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.ssyr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a~lda|Bigarray.Float64->C.dsyr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a~lda(* Performs a rank-1 update of a symmetric packed matrix. *)letspr:typea.cblas_layout->cblas_uplo->int->float->(float,a)t->int->(float,a)t->unit=funlayoutuplonalphaxincxap->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sspr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~ap:_ap|Bigarray.Float64->C.dspr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~ap:_ap(* Performs a rank-2 update of symmetric matrix. *)letsyr2:typea.cblas_layout->cblas_uplo->int->float->(float,a)t->int->(float,a)t->int->(float,a)t->int->unit=funlayoutuplonalphaxincxyincyalda->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.ssyr2~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~y:_y~incy~a:_a~lda|Bigarray.Float64->C.dsyr2~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~y:_y~incy~a:_a~lda(* Performs a rank-2 update of a symmetric packed matrix. *)letspr2:typea.cblas_layout->cblas_uplo->int->float->(float,a)t->int->(float,a)t->int->(float,a)t->unit=funlayoutuplonalphaxincxyincya->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Float32->C.sspr2~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~y:_y~incy~a:_a|Bigarray.Float64->C.dspr2~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~y:_y~incy~a:_a(* Computes a matrix-vector product using a Hermitian matrix. *)lethemv:typea.cblas_layout->cblas_uplo->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->Complex.t->(Complex.t,a)t->int->unit=funlayoutuplonalphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_alpha=allocatecomplex64alphainlet_beta=allocatecomplex64betainlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.chemv~order:_layout~uplo:_uplo~n~alpha:_alpha~a:_a~lda~x:_x~incx~beta:_beta~y:_y~incy|Bigarray.Complex64->C.zhemv~order:_layout~uplo:_uplo~n~alpha:_alpha~a:_a~lda~x:_x~incx~beta:_beta~y:_y~incy(* Computes a matrix-vector product using a Hermitian band matrix. *)lethbmv:typea.cblas_layout->cblas_uplo->int->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->Complex.t->(Complex.t,a)t->int->unit=funlayoutuplonkalphaaldaxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_alpha=allocatecomplex64alphainlet_beta=allocatecomplex64betainlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.chbmv~order:_layout~uplo:_uplo~n~k~alpha:_alpha~a:_a~lda~x:_x~incx~beta:_beta~y:_y~incy|Bigarray.Complex64->C.zhbmv~order:_layout~uplo:_uplo~n~k~alpha:_alpha~a:_a~lda~x:_x~incx~beta:_beta~y:_y~incy(* Computes a matrix-vector product using a Hermitian packed matrix. *)lethpmv:typea.cblas_layout->cblas_uplo->int->Complex.t->(Complex.t,a)t->(Complex.t,a)t->int->Complex.t->(Complex.t,a)t->int->unit=funlayoutuplonalphaapxincxbetayincy->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_alpha=allocatecomplex64alphainlet_beta=allocatecomplex64betainlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.chpmv~order:_layout~uplo:_uplo~n~alpha:_alpha~ap:_ap~x:_x~incx~beta:_beta~y:_y~incy|Bigarray.Complex64->C.zhpmv~order:_layout~uplo:_uplo~n~alpha:_alpha~ap:_ap~x:_x~incx~beta:_beta~y:_y~incy(* Performs a rank-1 update of a Hermitian matrix. *)lether:typea.cblas_layout->cblas_uplo->int->float->(Complex.t,a)t->int->(Complex.t,a)t->int->unit=funlayoutuplonalphaxincxalda->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.cher~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a~lda|Bigarray.Complex64->C.zher~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a~lda(* Performs a rank-1 update of a Hermitian packed matrix. *)lethpr:typea.cblas_layout->cblas_uplo->int->float->(Complex.t,a)t->int->(Complex.t,a)t->unit=funlayoutuplonalphaxincxa->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_x=bigarray_startCtypes_static.Array1xinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.chpr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a|Bigarray.Complex64->C.zhpr~order:_layout~uplo:_uplo~n~alpha~x:_x~incx~a:_a(* Performs a rank-2 update of a Hermitian matrix. *)lether2:typea.cblas_layout->cblas_uplo->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->(Complex.t,a)t->int->unit=funlayoutuplonalphaxincxyincyalda->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_alpha=allocatecomplex64alphainlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_a=bigarray_startCtypes_static.Array1ainmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.cher2~order:_layout~uplo:_uplo~n~alpha:_alpha~x:_x~incx~y:_y~incy~a:_a~lda|Bigarray.Complex64->C.zher2~order:_layout~uplo:_uplo~n~alpha:_alpha~x:_x~incx~y:_y~incy~a:_a~lda(* Performs a rank-2 update of a Hermitian packed matrix. *)lethpr2:typea.cblas_layout->cblas_uplo->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->(Complex.t,a)t->unit=funlayoutuplonalphaxincxyincyap->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_alpha=allocatecomplex64alphainlet_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinlet_ap=bigarray_startCtypes_static.Array1apinmatchBigarray.Array1.kindxwith|Bigarray.Complex32->C.chpr2~order:_layout~uplo:_uplo~n~alpha:_alpha~x:_x~incx~y:_y~incy~ap:_ap|Bigarray.Complex64->C.zhpr2~order:_layout~uplo:_uplo~n~alpha:_alpha~x:_x~incx~y:_y~incy~ap:_ap(* Level 3 BLAS *)(* Computes a matrix-matrix product with general matrices. *)letgemm:typeab.cblas_layout->cblas_transpose->cblas_transpose->int->int->int->a->(a,b)t->int->(a,b)t->int->a->(a,b)t->int->unit=funlayouttransatransbmnkalphaaldabldbbetacldc->let_layout=cblas_layoutlayoutinlet_transa=cblas_transposetransainlet_transb=cblas_transposetransbinlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Float32->C.sgemm~order:_layout~transa:_transa~transb:_transb~m~n~k~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Float64->C.dgemm~order:_layout~transa:_transa~transb:_transb~m~n~k~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Complex32->C.cgemm~order:_layout~transa:_transa~transb:_transb~m~n~k~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex32beta)~c:_c~ldc|Bigarray.Complex64->C.zgemm~order:_layout~transa:_transa~transb:_transb~m~n~k~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex64beta)~c:_c~ldc|_->failwith"owl_cblas:gemm"(* Computes a matrix-matrix product where one input matrix is symmetric. *)letsymm:typeab.cblas_layout->cblas_side->cblas_uplo->int->int->a->(a,b)t->int->(a,b)t->int->a->(a,b)t->int->unit=funlayoutsideuplomnalphaaldabldbbetacldc->let_layout=cblas_layoutlayoutinlet_side=cblas_sidesideinlet_uplo=cblas_uplouploinlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Float32->C.ssymm~order:_layout~side:_side~uplo:_uplo~m~n~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Float64->C.dsymm~order:_layout~side:_side~uplo:_uplo~m~n~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Complex32->C.csymm~order:_layout~side:_side~uplo:_uplo~m~n~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex32beta)~c:_c~ldc|Bigarray.Complex64->C.zsymm~order:_layout~side:_side~uplo:_uplo~m~n~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex64beta)~c:_c~ldc|_->failwith"owl_cblas:symm"(* Performs a symmetric rank-k update. *)letsyrk:typeab.cblas_layout->cblas_uplo->cblas_transpose->int->int->a->(a,b)t->int->a->(a,b)t->int->unit=funlayoutuplotransnkalphaaldabetacldc->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_trans=cblas_transposetransinlet_a=bigarray_startCtypes_static.Array1ainlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Float32->C.ssyrk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~beta~c:_c~ldc|Bigarray.Float64->C.dsyrk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~beta~c:_c~ldc|Bigarray.Complex32->C.csyrk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex32alpha)~a:_a~lda~beta:(allocatecomplex32beta)~c:_c~ldc|Bigarray.Complex64->C.zsyrk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex64alpha)~a:_a~lda~beta:(allocatecomplex64beta)~c:_c~ldc|_->failwith"owl_cblas:syrk"(* Performs a symmetric rank-2k update. *)letsyr2k:typeab.cblas_layout->cblas_uplo->cblas_transpose->int->int->a->(a,b)t->int->(a,b)t->int->a->(a,b)t->int->unit=funlayoutuplotransnkalphaaldabldbbetacldc->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_trans=cblas_transposetransinlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Float32->C.ssyr2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Float64->C.dsyr2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Complex32->C.csyr2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex32beta)~c:_c~ldc|Bigarray.Complex64->C.zsyr2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex64beta)~c:_c~ldc|_->failwith"owl_cblas:syr2k"(* Computes a matrix-matrix product where one input matrix is triangular. *)lettrmm:typeab.cblas_layout->cblas_side->cblas_uplo->cblas_transpose->cblas_diag->int->int->a->(a,b)t->int->(a,b)t->int->unit=funlayoutsideuplotransadiagmnalphaaldabldb->let_layout=cblas_layoutlayoutinlet_side=cblas_sidesideinlet_uplo=cblas_uplouploinlet_transa=cblas_transposetransainlet_diag=cblas_diagdiaginlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binmatchBigarray.Array1.kindawith|Bigarray.Float32->C.strmm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha~a:_a~lda~b:_b~ldb|Bigarray.Float64->C.dtrmm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha~a:_a~lda~b:_b~ldb|Bigarray.Complex32->C.ctrmm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb|Bigarray.Complex64->C.ztrmm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb|_->failwith"owl_cblas:trmm"(* Solves a triangular matrix equation. *)lettrsm:typeab.cblas_layout->cblas_side->cblas_uplo->cblas_transpose->cblas_diag->int->int->a->(a,b)t->int->(a,b)t->int->unit=funlayoutsideuplotransadiagmnalphaaldabldb->let_layout=cblas_layoutlayoutinlet_side=cblas_sidesideinlet_uplo=cblas_uplouploinlet_transa=cblas_transposetransainlet_diag=cblas_diagdiaginlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binmatchBigarray.Array1.kindawith|Bigarray.Float32->C.strsm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha~a:_a~lda~b:_b~ldb|Bigarray.Float64->C.dtrsm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha~a:_a~lda~b:_b~ldb|Bigarray.Complex32->C.ctrsm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb|Bigarray.Complex64->C.ztrsm~order:_layout~side:_side~uplo:_uplo~transa:_transa~diag:_diag~m~n~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb|_->failwith"owl_cblas:trsm"(* Computes a matrix-matrix product where one input matrix is Hermitian. *)lethemm:typea.cblas_layout->cblas_side->cblas_uplo->int->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->Complex.t->(Complex.t,a)t->int->unit=funlayoutsideuplomnalphaaldabldbbetacldc->let_layout=cblas_layoutlayoutinlet_side=cblas_sidesideinlet_uplo=cblas_uplouploinlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Complex32->C.chemm~order:_layout~side:_side~uplo:_uplo~m~n~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex32beta)~c:_c~ldc|Bigarray.Complex64->C.zhemm~order:_layout~side:_side~uplo:_uplo~m~n~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb~beta:(allocatecomplex64beta)~c:_c~ldc(* Performs a Hermitian rank-k update. *)letherk:typea.cblas_layout->cblas_uplo->cblas_transpose->int->int->float->(Complex.t,a)t->int->float->(Complex.t,a)t->int->unit=funlayoutuplotransnkalphaaldabetacldc->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_trans=cblas_transposetransinlet_a=bigarray_startCtypes_static.Array1ainlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Complex32->C.cherk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~beta~c:_c~ldc|Bigarray.Complex64->C.zherk~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha~a:_a~lda~beta~c:_c~ldc(* Performs a Hermitian rank-2k update. *)lether2k:typea.cblas_layout->cblas_uplo->cblas_transpose->int->int->Complex.t->(Complex.t,a)t->int->(Complex.t,a)t->int->float->(Complex.t,a)t->int->unit=funlayoutuplotransnkalphaaldabldbbetacldc->let_layout=cblas_layoutlayoutinlet_uplo=cblas_uplouploinlet_trans=cblas_transposetransinlet_alpha=allocatecomplex32alphainlet_a=bigarray_startCtypes_static.Array1ainlet_b=bigarray_startCtypes_static.Array1binlet_c=bigarray_startCtypes_static.Array1cinmatchBigarray.Array1.kindawith|Bigarray.Complex32->C.cher2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex32alpha)~a:_a~lda~b:_b~ldb~beta~c:_c~ldc|Bigarray.Complex64->C.zher2k~order:_layout~uplo:_uplo~trans:_trans~n~k~alpha:(allocatecomplex64alpha)~a:_a~lda~b:_b~ldb~beta~c:_c~ldc