let LL := requireModule "BLAS3gf/BLAS.5D" in let Arithmetic := requireModule "Arithmetic" in let IO := requireModule "IO" in let List := requireModule "List" in let String := requireModule "String" in let FFI := requireModule "FFI" in let (-) := Arithmetic.(-) in let (;) := IO.(;) in let return! := IO.liftIO! in let length := List.length in let strjoin := String.strjoin in let map := List.map in let range1 := List.range1 in let packRecord := FFI.packRecord in let unpackRecord := FFI.unpackRecord in let duplicateRecord! := FFI.duplicateRecord! in let rotg! := (\a \b LL.duplicateRecord! (packRecord "d" a) ;\aN LL.duplicateRecord! (packRecord "d" b) ;\bN LL.duplicateRecord! (packRecord "d" 0.0) ;\cN LL.duplicateRecord! (packRecord "d" 0.0) ;\sN LL.drotg! aN bN cN sN ;\z return! [(unpackRecord "d" aN) (unpackRecord "d" bN) (unpackRecord "d" cN) (unpackRecord "d" sN)] ) in let dot! := (\a \b return! (length a) ;\NN return! (strjoin [] "<":(map (\i "d") (range1 0 NN))) ;\format LL.ddot! NN (packRecord format a) 1 (packRecord format b) 1 ) in let generatePlaneRotation! := rotg! in let ger! := (\order \M \N \alpha \X \incX \Y \incY \A \ldA LL.dger! order M N alpha X incX Y incY A ldA ) in let syr2! := (\order \uplo \N \alpha \X \incX \Y \incY \A \ldA LL.dsyr2! order uplo N alpha X incX Y incY A ldA ) in let spr2! := (\order \uplo \N \alpha \X \incX \Y \incY \A LL.dspr2! order uplo N alpha X incX Y incY A ) in let rot! := (\N \X \incX \Y \incY \c \s LL.drot! N X incX Y incY c s ) in let znrm2! := (\N \X \incX LL.dznrm2! N X incX ) in let trsv! := (\order \uplo \transA \diag \N \A \ldA \X \incX LL.dtrsv! order uplo transA diag N A ldA X incX ) in let trmv! := (\order \uplo \transA \diag \N \A \ldA \X \incX LL.dtrmv! order uplo transA diag N A ldA X incX ) in let rotm! := (\N \X \incX \Y \incY \P LL.drotm! N X incX Y incY P ) in let copy! := ( LL.dcopy! ) in let symv! := ( LL.dsymv! ) in let swap! := ( LL.dswap! ) in let symm! := ( LL.dsymm! ) in let spmv! := ( LL.dspmv! ) in let trsm! := ( LL.dtrsm! ) in let spr! := ( LL.dspr! ) in let rotmg! := ( LL.drotmg! ) in let axpy! := ( LL.daxpy! ) in let trmm! := ( LL.dtrmm! ) in let syr! := ( LL.dsyr! ) in let nrm2! := ( LL.dnrm2! ) in let asum! := ( LL.dasum! ) in let tbmv! := ( LL.dtbmv! ) in let tbsv! := ( LL.dtbsv! ) in let gemv! := ( LL.dgemv! ) in let syr2k! := ( LL.dsyr2k! ) in let gbmv! := ( LL.dgbmv! ) in let tpmv! := ( LL.dtpmv! ) in let gemm! := ( LL.dgemm! ) in let scal! := ( LL.dscal! ) in let tpsv! := ( LL.dtpsv! ) in let sdot! := ( LL.dsdot! ) in let zasum! := ( LL.dzasum! ) in let syrk! := ( LL.dsyrk! ) in let sbmv! := ( LL.dsbmv! ) in (requireModule "Composition").dispatch1 (#exports[ LL rotg! dot! generatePlaneRotation! ger! syr2! spr2! rot! znrm2! trsv! trmv! rotm! copy! symv! swap! symm! spmv! trsm! dot! spr! rotmg! axpy! trmm! syr! nrm2! asum! tbmv! tbsv! gemv! syr2k! gbmv! tpmv! gemm! scal! tpsv! sdot! zasum! syrk! sbmv! ])