sig
  type order = RowMajor | ColMajor
  type transpose = NoTrans | Trans | ConjTrans
  type uplo = Upper | Lower
  type diag = NonUnit | Unit
  type side = Left | Right
  external dot : Vector.vector -> Vector.vector -> float = "ml_gsl_blas_ddot"
  external nrm2 : Vector.vector -> float = "ml_gsl_blas_dnrm2"
  external asum : Vector.vector -> float = "ml_gsl_blas_dasum"
  external iamax : Vector.vector -> int = "ml_gsl_blas_idamax"
  external swap : Vector.vector -> Vector.vector -> unit
    = "ml_gsl_blas_dswap"
  external copy : Vector.vector -> Vector.vector -> unit
    = "ml_gsl_blas_dcopy"
  external axpy : float -> Vector.vector -> Vector.vector -> unit
    = "ml_gsl_blas_daxpy"
  external rot : Vector.vector -> Vector.vector -> float -> float -> unit
    = "ml_gsl_blas_drot"
  external scal : float -> Vector.vector -> unit = "ml_gsl_blas_dscal"
  external gemv :
    Blas.transpose ->
    alpha:float ->
    a:Matrix.matrix ->
    x:Vector.vector -> beta:float -> y:Vector.vector -> unit
    = "ml_gsl_blas_dgemv_bc" "ml_gsl_blas_dgemv"
  external trmv :
    Blas.uplo ->
    Blas.transpose -> Blas.diag -> a:Matrix.matrix -> x:Vector.vector -> unit
    = "ml_gsl_blas_dtrmv"
  external trsv :
    Blas.uplo ->
    Blas.transpose -> Blas.diag -> a:Matrix.matrix -> x:Vector.vector -> unit
    = "ml_gsl_blas_dtrsv"
  external symv :
    Blas.uplo ->
    alpha:float ->
    a:Matrix.matrix ->
    x:Vector.vector -> beta:float -> y:Vector.vector -> unit
    = "ml_gsl_blas_dsymv_bc" "ml_gsl_blas_dsymv"
  external dger :
    alpha:float ->
    x:Vector.vector -> y:Vector.vector -> a:Matrix.matrix -> unit
    = "ml_gsl_blas_dger"
  external syr :
    Blas.uplo -> alpha:float -> x:Vector.vector -> a:Matrix.matrix -> unit
    = "ml_gsl_blas_dsyr"
  external syr2 :
    Blas.uplo ->
    alpha:float ->
    x:Vector.vector -> y:Vector.vector -> a:Matrix.matrix -> unit
    = "ml_gsl_blas_dsyr2"
  external gemm :
    ta:Blas.transpose ->
    tb:Blas.transpose ->
    alpha:float ->
    a:Matrix.matrix ->
    b:Matrix.matrix -> beta:float -> c:Matrix.matrix -> unit
    = "ml_gsl_blas_dgemm_bc" "ml_gsl_blas_dgemm"
  external symm :
    Blas.side ->
    Blas.uplo ->
    alpha:float ->
    a:Matrix.matrix ->
    b:Matrix.matrix -> beta:float -> c:Matrix.matrix -> unit
    = "ml_gsl_blas_dsymm_bc" "ml_gsl_blas_dsymm"
  external trmm :
    Blas.side ->
    Blas.uplo ->
    Blas.transpose ->
    Blas.diag -> alpha:float -> a:Matrix.matrix -> b:Matrix.matrix -> unit
    = "ml_gsl_blas_dtrmm_bc" "ml_gsl_blas_dtrmm"
  external trsm :
    Blas.side ->
    Blas.uplo ->
    Blas.transpose ->
    Blas.diag -> alpha:float -> a:Matrix.matrix -> b:Matrix.matrix -> unit
    = "ml_gsl_blas_dtrsm_bc" "ml_gsl_blas_dtrsm"
  external syrk :
    Blas.uplo ->
    Blas.transpose ->
    alpha:float -> a:Matrix.matrix -> beta:float -> c:Matrix.matrix -> unit
    = "ml_gsl_blas_dsyrk_bc" "ml_gsl_blas_dsyrk"
  external syr2k :
    Blas.uplo ->
    Blas.transpose ->
    alpha:float ->
    a:Matrix.matrix ->
    b:Matrix.matrix -> beta:float -> c:Matrix.matrix -> unit
    = "ml_gsl_blas_dsyr2k_bc" "ml_gsl_blas_dsyr2k"
  module Single :
    sig
      external sdsdot :
        alpha:float -> Vector.Single.vector -> Vector.Single.vector -> float
        = "ml_gsl_blas_sdsdot"
      external dsdot : Vector.Single.vector -> Vector.Single.vector -> float
        = "ml_gsl_blas_dsdot"
      external dot : Vector.Single.vector -> Vector.Single.vector -> float
        = "ml_gsl_blas_sdot"
      external nrm2 : Vector.Single.vector -> float = "ml_gsl_blas_snrm2"
      external asum : Vector.Single.vector -> float = "ml_gsl_blas_sasum"
      external iamax : Vector.Single.vector -> int = "ml_gsl_blas_isamax"
      external swap : Vector.Single.vector -> Vector.Single.vector -> unit
        = "ml_gsl_blas_sswap"
      external copy : Vector.Single.vector -> Vector.Single.vector -> unit
        = "ml_gsl_blas_scopy"
      external axpy :
        float -> Vector.Single.vector -> Vector.Single.vector -> unit
        = "ml_gsl_blas_saxpy"
      external rot :
        Vector.Single.vector ->
        Vector.Single.vector -> float -> float -> unit = "ml_gsl_blas_srot"
      external scal : float -> Vector.Single.vector -> unit
        = "ml_gsl_blas_sscal"
      external gemv :
        Blas.transpose ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        x:Vector.Single.vector ->
        beta:float -> y:Vector.Single.vector -> unit = "ml_gsl_blas_sgemv_bc"
        "ml_gsl_blas_sgemv"
      external trmv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag -> a:Matrix.Single.matrix -> x:Vector.Single.vector -> unit
        = "ml_gsl_blas_strmv"
      external trsv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag -> a:Matrix.Single.matrix -> x:Vector.Single.vector -> unit
        = "ml_gsl_blas_strsv"
      external symv :
        Blas.uplo ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        x:Vector.Single.vector ->
        beta:float -> y:Vector.Single.vector -> unit = "ml_gsl_blas_ssymv_bc"
        "ml_gsl_blas_ssymv"
      external dger :
        alpha:float ->
        x:Vector.Single.vector ->
        y:Vector.Single.vector -> a:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_sger"
      external syr :
        Blas.uplo ->
        alpha:float ->
        x:Vector.Single.vector -> a:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_ssyr"
      external syr2 :
        Blas.uplo ->
        alpha:float ->
        x:Vector.Single.vector ->
        y:Vector.Single.vector -> a:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_ssyr2"
      external gemm :
        ta:Blas.transpose ->
        tb:Blas.transpose ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        b:Matrix.Single.matrix ->
        beta:float -> c:Matrix.Single.matrix -> unit = "ml_gsl_blas_sgemm_bc"
        "ml_gsl_blas_sgemm"
      external symm :
        Blas.side ->
        Blas.uplo ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        b:Matrix.Single.matrix ->
        beta:float -> c:Matrix.Single.matrix -> unit = "ml_gsl_blas_ssymm_bc"
        "ml_gsl_blas_ssymm"
      external syrk :
        Blas.uplo ->
        Blas.transpose ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        beta:float -> c:Matrix.Single.matrix -> unit = "ml_gsl_blas_ssyrk_bc"
        "ml_gsl_blas_ssyrk"
      external syr2k :
        Blas.uplo ->
        Blas.transpose ->
        alpha:float ->
        a:Matrix.Single.matrix ->
        b:Matrix.Single.matrix ->
        beta:float -> c:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_ssyr2k_bc" "ml_gsl_blas_ssyr2k"
      external trmm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:float ->
        a:Matrix.Single.matrix -> b:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_strmm_bc" "ml_gsl_blas_strmm"
      external trsm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:float ->
        a:Matrix.Single.matrix -> b:Matrix.Single.matrix -> unit
        = "ml_gsl_blas_strsm_bc" "ml_gsl_blas_strsm"
    end
  module Complex :
    sig
      external dotu :
        Vector_complex.vector -> Vector_complex.vector -> Gsl_complex.complex
        = "ml_gsl_blas_zdotu"
      external dotc :
        Vector_complex.vector -> Vector_complex.vector -> Gsl_complex.complex
        = "ml_gsl_blas_zdotc"
      external nrm2 : Vector_complex.vector -> float = "ml_gsl_blas_znrm2"
      external asum : Vector_complex.vector -> float = "ml_gsl_blas_zasum"
      external iamax : Vector_complex.vector -> int = "ml_gsl_blas_izamax"
      external swap : Vector_complex.vector -> Vector_complex.vector -> unit
        = "ml_gsl_blas_zswap"
      external copy : Vector_complex.vector -> Vector_complex.vector -> unit
        = "ml_gsl_blas_zcopy"
      external axpy :
        Gsl_complex.complex ->
        Vector_complex.vector -> Vector_complex.vector -> unit
        = "ml_gsl_blas_zaxpy"
      external scal : Gsl_complex.complex -> Vector_complex.vector -> unit
        = "ml_gsl_blas_zscal"
      external zdscal : float -> Vector_complex.vector -> unit
        = "ml_gsl_blas_zdscal"
      external gemv :
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        x:Vector_complex.vector ->
        beta:Gsl_complex.complex -> y:Vector_complex.vector -> unit
        = "ml_gsl_blas_zgemv_bc" "ml_gsl_blas_zgemv"
      external trmv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        a:Matrix_complex.matrix -> x:Vector_complex.vector -> unit
        = "ml_gsl_blas_ztrmv"
      external trsv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        a:Matrix_complex.matrix -> x:Vector_complex.vector -> unit
        = "ml_gsl_blas_ztrsv"
      external hemv :
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        x:Vector_complex.vector ->
        beta:Gsl_complex.complex -> y:Vector_complex.vector -> unit
        = "ml_gsl_blas_zhemv_bc" "ml_gsl_blas_zhemv"
      external geru :
        alpha:Gsl_complex.complex ->
        x:Vector_complex.vector ->
        y:Vector_complex.vector -> a:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zgeru"
      external gerc :
        alpha:Gsl_complex.complex ->
        x:Vector_complex.vector ->
        y:Vector_complex.vector -> a:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zgerc"
      external her :
        Blas.uplo ->
        alpha:float ->
        x:Vector_complex.vector -> a:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zher"
      external her2 :
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        x:Vector_complex.vector ->
        y:Vector_complex.vector -> a:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zher2"
      external gemm :
        ta:Blas.transpose ->
        tb:Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        b:Matrix_complex.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zgemm_bc" "ml_gsl_blas_zgemm"
      external symm :
        Blas.side ->
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        b:Matrix_complex.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zsymm_bc" "ml_gsl_blas_zsymm"
      external syrk :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zsyrk_bc" "ml_gsl_blas_zsyrk"
      external syr2k :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        b:Matrix_complex.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zsyr2k_bc" "ml_gsl_blas_zsyr2k"
      external trmm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix -> b:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_ztrmm_bc" "ml_gsl_blas_ztrmm"
      external trsm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix -> b:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_ztrsm_bc" "ml_gsl_blas_ztrsm"
      external hemm :
        Blas.side ->
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        b:Matrix_complex.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zhemm_bc" "ml_gsl_blas_zhemm"
      external herk :
        Blas.uplo ->
        Blas.transpose ->
        alpha:float ->
        a:Matrix_complex.matrix ->
        beta:float -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zherk_bc" "ml_gsl_blas_zherk"
      external her2k :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.matrix ->
        b:Matrix_complex.matrix ->
        beta:float -> c:Matrix_complex.matrix -> unit
        = "ml_gsl_blas_zher2k_bc" "ml_gsl_blas_zher2k"
    end
  module Complex_Single :
    sig
      external dotu :
        Vector_complex.Single.vector ->
        Vector_complex.Single.vector -> Gsl_complex.complex
        = "ml_gsl_blas_cdotu"
      external dotc :
        Vector_complex.Single.vector ->
        Vector_complex.Single.vector -> Gsl_complex.complex
        = "ml_gsl_blas_cdotc"
      external nrm2 : Vector_complex.Single.vector -> float
        = "ml_gsl_blas_scnrm2"
      external asum : Vector_complex.Single.vector -> float
        = "ml_gsl_blas_scasum"
      external iamax : Vector_complex.Single.vector -> int
        = "ml_gsl_blas_icamax"
      external swap :
        Vector_complex.Single.vector -> Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_cswap"
      external copy :
        Vector_complex.Single.vector -> Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_ccopy"
      external axpy :
        Gsl_complex.complex ->
        Vector_complex.Single.vector -> Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_caxpy"
      external scal :
        Gsl_complex.complex -> Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_cscal"
      external csscal : float -> Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_csscal"
      external gemv :
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        x:Vector_complex.Single.vector ->
        beta:Gsl_complex.complex -> y:Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_cgemv_bc" "ml_gsl_blas_cgemv"
      external trmv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        a:Matrix_complex.Single.matrix ->
        x:Vector_complex.Single.vector -> unit = "ml_gsl_blas_ctrmv"
      external trsv :
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        a:Matrix_complex.Single.matrix ->
        x:Vector_complex.Single.vector -> unit = "ml_gsl_blas_ctrsv"
      external hemv :
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        x:Vector_complex.Single.vector ->
        beta:Gsl_complex.complex -> y:Vector_complex.Single.vector -> unit
        = "ml_gsl_blas_chemv_bc" "ml_gsl_blas_chemv"
      external geru :
        alpha:Gsl_complex.complex ->
        x:Vector_complex.Single.vector ->
        y:Vector_complex.Single.vector ->
        a:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_cgeru"
      external gerc :
        alpha:Gsl_complex.complex ->
        x:Vector_complex.Single.vector ->
        y:Vector_complex.Single.vector ->
        a:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_cgerc"
      external her :
        Blas.uplo ->
        alpha:float ->
        x:Vector_complex.Single.vector ->
        a:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_cher"
      external her2 :
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        x:Vector_complex.Single.vector ->
        y:Vector_complex.Single.vector ->
        a:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_cher2"
      external gemm :
        ta:Blas.transpose ->
        tb:Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_cgemm_bc" "ml_gsl_blas_cgemm"
      external symm :
        Blas.side ->
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_csymm_bc" "ml_gsl_blas_csymm"
      external syrk :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_csyrk_bc" "ml_gsl_blas_csyrk"
      external syr2k :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_csyr2k_bc" "ml_gsl_blas_csyr2k"
      external trmm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_ctrmm_bc"
        "ml_gsl_blas_ctrmm"
      external trsm :
        Blas.side ->
        Blas.uplo ->
        Blas.transpose ->
        Blas.diag ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix -> unit = "ml_gsl_blas_ctrsm_bc"
        "ml_gsl_blas_ctrsm"
      external hemm :
        Blas.side ->
        Blas.uplo ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix ->
        beta:Gsl_complex.complex -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_chemm_bc" "ml_gsl_blas_chemm"
      external herk :
        Blas.uplo ->
        Blas.transpose ->
        alpha:float ->
        a:Matrix_complex.Single.matrix ->
        beta:float -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_cherk_bc" "ml_gsl_blas_cherk"
      external her2k :
        Blas.uplo ->
        Blas.transpose ->
        alpha:Gsl_complex.complex ->
        a:Matrix_complex.Single.matrix ->
        b:Matrix_complex.Single.matrix ->
        beta:float -> c:Matrix_complex.Single.matrix -> unit
        = "ml_gsl_blas_cher2k_bc" "ml_gsl_blas_cher2k"
    end
end