123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811# 1 "src/owl/cblas/owl_cblas_basic.ml"(*
* OWL - OCaml Scientific and Engineering Computing
* Copyright (c) 2016-2018 Liang Wang <liang.wang@cl.cam.ac.uk>
*)[@@@warning"-6"](** 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)inletp=bigarray_startCtypes_static.Array1p'inC.srotmg~d1~d2~b1~b2~p;!@d1,!@d2,!@b1,p')|Bigarray.Float64->(letd1=allocatedoubled1inletd2=allocatedoubled2inletb1=allocatedoubleb1inletp'=Bigarray.(Array1.createFloat64C_layout5)inletp=bigarray_startCtypes_static.Array1p'inC.drotmg~d1~d2~b1~b2~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.sswapn_xincx_yincy|Bigarray.Float64->C.dswapn_xincx_yincy|Bigarray.Complex32->C.cswapn_xincx_yincy|Bigarray.Complex64->C.zswapn_xincx_yincy|_->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.sscalna_xincx|Bigarray.Float64->C.dscalna_xincx|Bigarray.Complex32->C.cscaln(allocatecomplex32a)_xincx|Bigarray.Complex64->C.zscaln(allocatecomplex64a)_xincx|_->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.csscalna_xincx|Bigarray.Complex64->C.zdscalna_xincxin()(* 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.scopyn_xincx_yincy|Bigarray.Float64->C.dcopyn_xincx_yincy|Bigarray.Complex32->C.ccopyn_xincx_yincy|Bigarray.Complex64->C.zcopyn_xincx_yincy|_->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.saxpyna_xincx_yincy|Bigarray.Float64->C.daxpyna_xincx_yincy|Bigarray.Complex32->C.caxpyn(allocatecomplex32a)_xincx_yincy|Bigarray.Complex64->C.zaxpyn(allocatecomplex64a)_xincx_yincy|_->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.sdotn_xincx_yincy|Bigarray.Float64->C.ddotn_xincx_yincy|Bigarray.Complex32->(let_z=allocatecomplex32Complex.zeroinifconj=truethenC.cdotcn_xincx_yincy_zelseC.cdotun_xincx_yincy_z;!@_z)|Bigarray.Complex64->(let_z=allocatecomplex32Complex.zeroinifconj=truethenC.zdotcn_xincx_yincy_zelseC.zdotun_xincx_yincy_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.sdsdotna_xincx_yincyletdsdotnxincxyincy=let_x=bigarray_startCtypes_static.Array1xinlet_y=bigarray_startCtypes_static.Array1yinC.dsdotn_xincx_yincy(* 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.snrm2n_xincx|Bigarray.Float64->C.dnrm2n_xincx|Bigarray.Complex32->C.scnrm2n_xincx|Bigarray.Complex64->C.dznrm2n_xincx|_->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.sasumn_xincx|Bigarray.Float64->C.sasumn_xincx|Bigarray.Complex32->C.scasumn_xincx|Bigarray.Complex64->C.dzasumn_xincx|_->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.isamaxn_xincx|Bigarray.Float64->C.idamaxn_xincx|Bigarray.Complex32->C.icamaxn_xincx|Bigarray.Complex64->C.izamaxn_xincx|_->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_layout_transmnalpha_alda_xincxbeta_yincy|Bigarray.Float64->C.dgemv_layout_transmnalpha_alda_xincxbeta_yincy|Bigarray.Complex32->C.cgemv_layout_transmn(allocatecomplex32alpha)_alda_xincx(allocatecomplex32beta)_yincy|Bigarray.Complex64->C.zgemv_layout_transmn(allocatecomplex64alpha)_alda_xincx(allocatecomplex64beta)_yincy|_->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_layout_transmnklkualpha_alda_xincxbeta_yincy|Bigarray.Float64->C.dgbmv_layout_transmnklkualpha_alda_xincxbeta_yincy|Bigarray.Complex32->C.cgbmv_layout_transmnklku(allocatecomplex32alpha)_alda_xincx(allocatecomplex32beta)_yincy|Bigarray.Complex64->C.cgbmv_layout_transmnklku(allocatecomplex64alpha)_alda_xincx(allocatecomplex64beta)_yincy|_->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_layout_uplo_trans_diagn_alda_xincx|Bigarray.Float64->C.dtrmv_layout_uplo_trans_diagn_alda_xincx|Bigarray.Complex32->C.ctrmv_layout_uplo_trans_diagn_alda_xincx|Bigarray.Complex64->C.ztrmv_layout_uplo_trans_diagn_alda_xincx|_->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_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Float64->C.dtbmv_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Complex32->C.ctbmv_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Complex64->C.ztbmv_layout_uplo_trans_diagnk_alda_xincx|_->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_layout_uplo_trans_diagn_ap_xincx|Bigarray.Float64->C.dtpmv_layout_uplo_trans_diagn_ap_xincx|Bigarray.Complex32->C.ctpmv_layout_uplo_trans_diagn_ap_xincx|Bigarray.Complex64->C.ztpmv_layout_uplo_trans_diagn_ap_xincx|_->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_layout_uplo_trans_diagn_alda_xincx|Bigarray.Float64->C.dtrsv_layout_uplo_trans_diagn_alda_xincx|Bigarray.Complex32->C.ctrsv_layout_uplo_trans_diagn_alda_xincx|Bigarray.Complex64->C.ztrsv_layout_uplo_trans_diagn_alda_xincx|_->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_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Float64->C.dtbsv_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Complex32->C.ctbsv_layout_uplo_trans_diagnk_alda_xincx|Bigarray.Complex64->C.ztbsv_layout_uplo_trans_diagnk_alda_xincx|_->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_layout_uplo_trans_diagn_ap_xincx|Bigarray.Float64->C.dtpsv_layout_uplo_trans_diagn_ap_xincx|Bigarray.Complex32->C.ctpsv_layout_uplo_trans_diagn_ap_xincx|Bigarray.Complex64->C.ztpsv_layout_uplo_trans_diagn_ap_xincx|_->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_layout_uplonalpha_alda_xincxbeta_yincy|Bigarray.Float64->C.dsymv_layout_uplonalpha_alda_xincxbeta_yincy(* 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_layout_uplonkalpha_alda_xincxbeta_yincy|Bigarray.Float64->C.dsbmv_layout_uplonkalpha_alda_xincxbeta_yincy(* 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_layout_uplonalpha_ap_xincxbeta_yincy|Bigarray.Float64->C.dspmv_layout_uplonalpha_ap_xincxbeta_yincy(* 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_layoutmnalpha_xincx_yincy_alda|Bigarray.Float64->C.dger_layoutmnalpha_xincx_yincy_alda|Bigarray.Complex32->ifconj=truethenC.cgerc_layoutmn(allocatecomplex32alpha)_xincx_yincy_aldaelseC.cgeru_layoutmn(allocatecomplex32alpha)_xincx_yincy_alda|Bigarray.Complex64->ifconj=truethenC.zgerc_layoutmn(allocatecomplex64alpha)_xincx_yincy_aldaelseC.zgeru_layoutmn(allocatecomplex64alpha)_xincx_yincy_alda|_->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_layout_uplonalpha_xincx_alda|Bigarray.Float64->C.dsyr_layout_uplonalpha_xincx_alda(* 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_layout_uplonalpha_xincx_ap|Bigarray.Float64->C.dspr_layout_uplonalpha_xincx_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_layout_uplonalpha_xincx_yincy_alda|Bigarray.Float64->C.dsyr2_layout_uplonalpha_xincx_yincy_alda(* 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_layout_uplonalpha_xincx_yincy_a|Bigarray.Float64->C.dspr2_layout_uplonalpha_xincx_yincy_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_layout_uplon_alpha_alda_xincx_beta_yincy|Bigarray.Complex64->C.zhemv_layout_uplon_alpha_alda_xincx_beta_yincy(* 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_layout_uplonk_alpha_alda_xincx_beta_yincy|Bigarray.Complex64->C.zhbmv_layout_uplonk_alpha_alda_xincx_beta_yincy(* 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_layout_uplon_alpha_ap_xincx_beta_yincy|Bigarray.Complex64->C.zhpmv_layout_uplon_alpha_ap_xincx_beta_yincy(* 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_layout_uplonalpha_xincx_alda|Bigarray.Complex64->C.zher_layout_uplonalpha_xincx_alda(* 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_layout_uplonalpha_xincx_a|Bigarray.Complex64->C.zhpr_layout_uplonalpha_xincx_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_layout_uplon_alpha_xincx_yincy_alda|Bigarray.Complex64->C.zher2_layout_uplon_alpha_xincx_yincy_alda(* 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_layout_uplon_alpha_xincx_yincy_ap|Bigarray.Complex64->C.zhpr2_layout_uplon_alpha_xincx_yincy_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_layout_transa_transbmnkalpha_alda_bldbbeta_cldc|Bigarray.Float64->C.dgemm_layout_transa_transbmnkalpha_alda_bldbbeta_cldc|Bigarray.Complex32->C.cgemm_layout_transa_transbmnk(allocatecomplex32alpha)_alda_bldb(allocatecomplex32beta)_cldc|Bigarray.Complex64->C.zgemm_layout_transa_transbmnk(allocatecomplex64alpha)_alda_bldb(allocatecomplex64beta)_cldc|_->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_layout_side_uplomnalpha_alda_bldbbeta_cldc|Bigarray.Float64->C.dsymm_layout_side_uplomnalpha_alda_bldbbeta_cldc|Bigarray.Complex32->C.csymm_layout_side_uplomn(allocatecomplex32alpha)_alda_bldb(allocatecomplex32beta)_cldc|Bigarray.Complex64->C.zsymm_layout_side_uplomn(allocatecomplex64alpha)_alda_bldb(allocatecomplex64beta)_cldc|_->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_layout_uplo_transnkalpha_aldabeta_cldc|Bigarray.Float64->C.dsyrk_layout_uplo_transnkalpha_aldabeta_cldc|Bigarray.Complex32->C.csyrk_layout_uplo_transnk(allocatecomplex32alpha)_alda(allocatecomplex32beta)_cldc|Bigarray.Complex64->C.zsyrk_layout_uplo_transnk(allocatecomplex64alpha)_alda(allocatecomplex64beta)_cldc|_->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_layout_uplo_transnkalpha_alda_bldbbeta_cldc|Bigarray.Float64->C.dsyr2k_layout_uplo_transnkalpha_alda_bldbbeta_cldc|Bigarray.Complex32->C.csyr2k_layout_uplo_transnk(allocatecomplex32alpha)_alda_bldb(allocatecomplex32beta)_cldc|Bigarray.Complex64->C.zsyr2k_layout_uplo_transnk(allocatecomplex64alpha)_alda_bldb(allocatecomplex64beta)_cldc|_->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_layout_side_uplo_transa_diagmnalpha_alda_bldb|Bigarray.Float64->C.dtrmm_layout_side_uplo_transa_diagmnalpha_alda_bldb|Bigarray.Complex32->C.ctrmm_layout_side_uplo_transa_diagmn(allocatecomplex32alpha)_alda_bldb|Bigarray.Complex64->C.ztrmm_layout_side_uplo_transa_diagmn(allocatecomplex64alpha)_alda_bldb|_->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_layout_side_uplo_transa_diagmnalpha_alda_bldb|Bigarray.Float64->C.dtrsm_layout_side_uplo_transa_diagmnalpha_alda_bldb|Bigarray.Complex32->C.ctrsm_layout_side_uplo_transa_diagmn(allocatecomplex32alpha)_alda_bldb|Bigarray.Complex64->C.ztrsm_layout_side_uplo_transa_diagmn(allocatecomplex64alpha)_alda_bldb|_->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_layout_side_uplomn(allocatecomplex32alpha)_alda_bldb(allocatecomplex32beta)_cldc|Bigarray.Complex64->C.zhemm_layout_side_uplomn(allocatecomplex64alpha)_alda_bldb(allocatecomplex64beta)_cldc(* 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_layout_uplo_transnkalpha_aldabeta_cldc|Bigarray.Complex64->C.zherk_layout_uplo_transnkalpha_aldabeta_cldc(* 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_layout_uplo_transnk(allocatecomplex32alpha)_alda_bldbbeta_cldc|Bigarray.Complex64->C.zher2k_layout_uplo_transnk(allocatecomplex64alpha)_alda_bldbbeta_cldc