sig
  external matmult :
    a:Gsl_vectmat.mat ->
    ?transpa:bool ->
    b:Gsl_vectmat.mat -> ?transpb:bool -> Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_matmult_mod"
  external _LU_decomp : Gsl_vectmat.mat -> Gsl_permut.permut -> int
    = "ml_gsl_linalg_LU_decomp"
  external _LU_solve :
    Gsl_vectmat.mat ->
    Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LU_solve"
  external _LU_svx :
    Gsl_vectmat.mat -> Gsl_permut.permut -> Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LU_svx"
  external _LU_refine :
    a:Gsl_vectmat.mat ->
    lu:Gsl_vectmat.mat ->
    Gsl_permut.permut ->
    b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> res:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LU_refine_bc" "ml_gsl_linalg_LU_refine"
  external _LU_invert :
    Gsl_vectmat.mat -> Gsl_permut.permut -> Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_LU_invert"
  external _LU_det : Gsl_vectmat.mat -> int -> float = "ml_gsl_linalg_LU_det"
  external _LU_lndet : Gsl_vectmat.mat -> float = "ml_gsl_linalg_LU_lndet"
  external _LU_sgndet : Gsl_vectmat.mat -> int -> int
    = "ml_gsl_linalg_LU_sgndet"
  val decomp_LU :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vectmat.mat * Gsl_permut.permut * int
  val solve_LU :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    [< `A of float array
     | `V of Gsl_vector.vector
     | `VF of Gsl_vector_flat.vector ] ->
    float array
  val det_LU :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    float
  val invert_LU :
    ?protect:bool ->
    ?result:Gsl_vectmat.mat ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vectmat.mat
  external complex_LU_decomp : Gsl_vectmat.cmat -> Gsl_permut.permut -> int
    = "ml_gsl_linalg_complex_LU_decomp"
  external complex_LU_solve :
    Gsl_vectmat.cmat ->
    Gsl_permut.permut -> b:Gsl_vectmat.cvec -> x:Gsl_vectmat.cvec -> unit
    = "ml_gsl_linalg_complex_LU_solve"
  external complex_LU_svx :
    Gsl_vectmat.cmat -> Gsl_permut.permut -> Gsl_vectmat.cvec -> unit
    = "ml_gsl_linalg_complex_LU_svx"
  external complex_LU_refine :
    a:Gsl_vectmat.cmat ->
    lu:Gsl_vectmat.cmat ->
    Gsl_permut.permut ->
    b:Gsl_vectmat.cvec -> x:Gsl_vectmat.cvec -> res:Gsl_vectmat.cvec -> unit
    = "ml_gsl_linalg_complex_LU_refine_bc" "ml_gsl_linalg_complex_LU_refine"
  external complex_LU_invert :
    Gsl_vectmat.cmat -> Gsl_permut.permut -> Gsl_vectmat.cmat -> unit
    = "ml_gsl_linalg_complex_LU_invert"
  external complex_LU_det : Gsl_vectmat.cmat -> int -> Gsl_complex.complex
    = "ml_gsl_linalg_complex_LU_det"
  external complex_LU_lndet : Gsl_vectmat.cmat -> float
    = "ml_gsl_linalg_complex_LU_lndet"
  external complex_LU_sgndet : Gsl_vectmat.cmat -> int -> Gsl_complex.complex
    = "ml_gsl_linalg_complex_LU_sgndet"
  external _QR_decomp : Gsl_vectmat.mat -> Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_decomp"
  external _QR_solve :
    Gsl_vectmat.mat ->
    Gsl_vectmat.vec -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_solve"
  external _QR_svx :
    Gsl_vectmat.mat -> Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_svx"
  external _QR_lssolve :
    Gsl_vectmat.mat ->
    Gsl_vectmat.vec ->
    b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> res:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_lssolve"
  external _QR_QTvec :
    Gsl_vectmat.mat -> Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_QTvec"
  external _QR_Qvec :
    Gsl_vectmat.mat -> Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_Qvec"
  external _QR_Rsolve :
    Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_Rsolve"
  external _QR_Rsvx : Gsl_vectmat.mat -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_Rsvx"
  external _QR_unpack :
    Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> q:Gsl_vectmat.mat -> r:Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_QR_unpack"
  external _QR_QRsolve :
    Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_QRsolve"
  external _QR_update :
    Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat -> w:Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QR_update"
  external _R_solve :
    r:Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_R_solve"
  external _QRPT_decomp :
    a:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> p:Gsl_permut.permut -> norm:Gsl_vectmat.vec -> int
    = "ml_gsl_linalg_QRPT_decomp"
  external _QRPT_decomp2 :
    a:Gsl_vectmat.mat ->
    q:Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> p:Gsl_permut.permut -> norm:Gsl_vectmat.vec -> int
    = "ml_gsl_linalg_QRPT_decomp2_bc" "ml_gsl_linalg_QRPT_decomp2"
  external _QRPT_solve :
    qr:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec ->
    p:Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_solve"
  external _QRPT_svx :
    qr:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> p:Gsl_permut.permut -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_svx"
  external _QRPT_QRsolve :
    q:Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat ->
    p:Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_QRsolve"
  external _QRPT_update :
    q:Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat ->
    p:Gsl_permut.permut -> u:Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_update"
  external _QRPT_Rsolve :
    qr:Gsl_vectmat.mat ->
    p:Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_Rsolve"
  external _QRPT_Rsvx :
    qr:Gsl_vectmat.mat -> p:Gsl_permut.permut -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_QRPT_Rsolve"
  external _SV_decomp :
    a:Gsl_vectmat.mat ->
    v:Gsl_vectmat.mat -> s:Gsl_vectmat.vec -> work:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_SV_decomp"
  external _SV_decomp_mod :
    a:Gsl_vectmat.mat ->
    x:Gsl_vectmat.mat ->
    v:Gsl_vectmat.mat -> s:Gsl_vectmat.vec -> work:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_SV_decomp_mod"
  external _SV_decomp_jacobi :
    a:Gsl_vectmat.mat -> v:Gsl_vectmat.mat -> s:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_SV_decomp_jacobi"
  external _SV_solve :
    u:Gsl_vectmat.mat ->
    v:Gsl_vectmat.mat ->
    s:Gsl_vectmat.vec -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_SV_solve"
  external _LQ_decomp : a:Gsl_vectmat.mat -> tau:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_decomp"
  external _LQ_solve_T :
    lq:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_solve_T"
  external _LQ_svx_T :
    lq:Gsl_vectmat.mat -> tau:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_svx_T"
  external _LQ_lssolve_T :
    lq:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec ->
    b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> res:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_lssolve_T"
  external _LQ_Lsolve_T :
    lq:Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_Lsolve_T"
  external _LQ_Lsvx_T : lq:Gsl_vectmat.mat -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_Lsvx_T"
  external _L_solve_T :
    l:Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_L_solve_T"
  external _LQ_vecQ :
    lq:Gsl_vectmat.mat -> tau:Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_vecQ"
  external _LQ_vecQT :
    lq:Gsl_vectmat.mat -> tau:Gsl_vectmat.vec -> v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_vecQT"
  external _LQ_unpack :
    lq:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> q:Gsl_vectmat.mat -> l:Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_LQ_unpack"
  external _LQ_update :
    q:Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat -> v:Gsl_vectmat.vec -> w:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_update"
  external _LQ_LQsolve :
    q:Gsl_vectmat.mat ->
    l:Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_LQ_LQsolve"
  external _PTLQ_decomp :
    a:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> Gsl_permut.permut -> norm:Gsl_vectmat.vec -> int
    = "ml_gsl_linalg_PTLQ_decomp"
  external _PTLQ_decomp2 :
    a:Gsl_vectmat.mat ->
    q:Gsl_vectmat.mat ->
    r:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> Gsl_permut.permut -> norm:Gsl_vectmat.vec -> int
    = "ml_gsl_linalg_PTLQ_decomp2_bc" "ml_gsl_linalg_PTLQ_decomp2"
  external _PTLQ_solve_T :
    qr:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec ->
    Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_solve_T"
  external _PTLQ_svx_T :
    lq:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec -> Gsl_permut.permut -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_svx_T"
  external _PTLQ_LQsolve_T :
    q:Gsl_vectmat.mat ->
    l:Gsl_vectmat.mat ->
    Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_LQsolve_T"
  external _PTLQ_Lsolve_T :
    lq:Gsl_vectmat.mat ->
    Gsl_permut.permut -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_Lsolve_T"
  external _PTLQ_Lsvx_T :
    lq:Gsl_vectmat.mat -> Gsl_permut.permut -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_Lsvx_T"
  external _PTLQ_update :
    q:Gsl_vectmat.mat ->
    l:Gsl_vectmat.mat ->
    Gsl_permut.permut -> v:Gsl_vectmat.vec -> w:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_PTLQ_update"
  external cho_decomp : Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_cholesky_decomp"
  external cho_solve :
    Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_cholesky_solve"
  external cho_svx : Gsl_vectmat.mat -> Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_cholesky_svx"
  external cho_decomp_unit : Gsl_vectmat.mat -> Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_cholesky_decomp_unit"
  external symmtd_decomp : a:Gsl_vectmat.mat -> tau:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_symmtd_decomp"
  external symmtd_unpack :
    a:Gsl_vectmat.mat ->
    tau:Gsl_vectmat.vec ->
    q:Gsl_vectmat.mat ->
    diag:Gsl_vectmat.vec -> subdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_symmtd_unpack"
  external symmtd_unpack_T :
    a:Gsl_vectmat.mat ->
    diag:Gsl_vectmat.vec -> subdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_symmtd_unpack_T"
  external hermtd_decomp : a:Gsl_vectmat.cmat -> tau:Gsl_vectmat.cvec -> unit
    = "ml_gsl_linalg_hermtd_decomp"
  external hermtd_unpack :
    a:Gsl_vectmat.cmat ->
    tau:Gsl_vectmat.cvec ->
    q:Gsl_vectmat.cmat ->
    diag:Gsl_vectmat.vec -> subdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_hermtd_unpack"
  external hermtd_unpack_T :
    a:Gsl_vectmat.cmat ->
    diag:Gsl_vectmat.vec -> subdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_hermtd_unpack_T"
  external bidiag_decomp :
    a:Gsl_vectmat.mat ->
    tau_u:Gsl_vectmat.vec -> tau_v:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_bidiag_decomp"
  external bidiag_unpack :
    a:Gsl_vectmat.mat ->
    tau_u:Gsl_vectmat.vec ->
    u:Gsl_vectmat.mat ->
    tau_v:Gsl_vectmat.vec ->
    v:Gsl_vectmat.mat ->
    diag:Gsl_vectmat.vec -> superdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_bidiag_unpack_bc" "ml_gsl_linalg_bidiag_unpack"
  external bidiag_unpack2 :
    a:Gsl_vectmat.mat ->
    tau_u:Gsl_vectmat.vec ->
    tau_v:Gsl_vectmat.vec -> v:Gsl_vectmat.mat -> unit
    = "ml_gsl_linalg_bidiag_unpack2"
  external bidiag_unpack_B :
    a:Gsl_vectmat.mat ->
    diag:Gsl_vectmat.vec -> superdiag:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_bidiag_unpack_B"
  external _HH_solve :
    Gsl_vectmat.mat -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_HH_solve"
  external _HH_svx : Gsl_vectmat.mat -> Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_HH_svx"
  val solve_HH :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    [< `A of float array
     | `V of Gsl_vector.vector
     | `VF of Gsl_vector_flat.vector ] ->
    float array
  external solve_symm_tridiag :
    diag:Gsl_vectmat.vec ->
    offdiag:Gsl_vectmat.vec -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_solve_symm_tridiag"
  external solve_tridiag :
    diag:Gsl_vectmat.vec ->
    abovediag:Gsl_vectmat.vec ->
    belowdiag:Gsl_vectmat.vec ->
    b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_solve_tridiag"
  external solve_symm_cyc_tridiag :
    diag:Gsl_vectmat.vec ->
    offdiag:Gsl_vectmat.vec -> b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_solve_symm_cyc_tridiag"
  external solve_cyc_tridiag :
    diag:Gsl_vectmat.vec ->
    abovediag:Gsl_vectmat.vec ->
    belowdiag:Gsl_vectmat.vec ->
    b:Gsl_vectmat.vec -> x:Gsl_vectmat.vec -> unit
    = "ml_gsl_linalg_solve_cyc_tridiag"
  external _exponential :
    Gsl_vectmat.mat -> Gsl_vectmat.mat -> Gsl_fun.mode -> unit
    = "ml_gsl_linalg_exponential_ss"
  val exponential :
    ?mode:Gsl_fun.mode ->
    [< `A of float array * int * int
     | `M of Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    [ `M of Gsl_matrix.matrix ]
end