sig
  type symm_ws
  val make_symm_ws : int -> Eigen.symm_ws
  external _symm : Vectmat.mat -> Vectmat.vec -> Eigen.symm_ws -> unit
    = "ml_gsl_eigen_symm"
  val symm :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Matrix.matrix
     | `MF of Matrix_flat.matrix ] ->
    Vector.vector
  type symmv_ws
  val make_symmv_ws : int -> Eigen.symmv_ws
  external _symmv :
    Vectmat.mat -> Vectmat.vec -> Vectmat.mat -> Eigen.symmv_ws -> unit
    = "ml_gsl_eigen_symmv"
  val symmv :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Matrix.matrix
     | `MF of Matrix_flat.matrix ] ->
    Vector.vector * Matrix.matrix
  type sort = VAL_ASC | VAL_DESC | ABS_ASC | ABS_DESC
  external symmv_sort : Vector.vector * Matrix.matrix -> Eigen.sort -> unit
    = "ml_gsl_eigen_symmv_sort"
  type herm_ws
  val make_herm_ws : int -> Eigen.herm_ws
  external _herm : Vectmat.cmat -> Vectmat.vec -> Eigen.herm_ws -> unit
    = "ml_gsl_eigen_herm"
  val herm :
    ?protect:bool ->
    [< `CA of Gsl_complex.complex_array * int * int
     | `CM of Matrix_complex.matrix
     | `CMF of Matrix_complex_flat.matrix ] ->
    Vector.vector
  type hermv_ws
  val make_hermv_ws : int -> Eigen.hermv_ws
  external _hermv :
    Vectmat.cmat -> Vectmat.vec -> Vectmat.cmat -> Eigen.hermv_ws -> unit
    = "ml_gsl_eigen_hermv"
  val hermv :
    ?protect:bool ->
    [< `CA of Gsl_complex.complex_array * int * int
     | `CM of Matrix_complex.matrix
     | `CMF of Matrix_complex_flat.matrix ] ->
    Vector.vector * Matrix_complex.matrix
  external hermv_sort :
    Vector.vector * Matrix_complex.matrix -> Eigen.sort -> unit
    = "ml_gsl_eigen_hermv_sort"
  type nonsymm_ws
  val make_nonsymm_ws : int -> Eigen.nonsymm_ws
  external _nonsymm : Vectmat.mat -> Vectmat.cvec -> Eigen.nonsymm_ws -> unit
    = "ml_gsl_eigen_nonsymm"
  external _nonsymm_Z :
    Vectmat.mat -> Vectmat.cvec -> Vectmat.mat -> Eigen.nonsymm_ws -> unit
    = "ml_gsl_eigen_nonsymm_Z"
  val nonsymm :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Matrix.matrix
     | `MF of Matrix_flat.matrix ] ->
    Vector_complex.vector
  type nonsymmv_ws
  val make_nonsymmv_ws : int -> Eigen.nonsymmv_ws
  external _nonsymmv :
    Vectmat.mat -> Vectmat.cvec -> Vectmat.cmat -> Eigen.nonsymmv_ws -> unit
    = "ml_gsl_eigen_nonsymmv"
  external _nonsymmv_Z :
    Vectmat.mat ->
    Vectmat.cvec -> Vectmat.cmat -> Vectmat.mat -> Eigen.nonsymmv_ws -> unit
    = "ml_gsl_eigen_nonsymmv_Z"
  val nonsymmv :
    ?protect:bool ->
    [< `A of float array * int * int
     | `AA of float array array
     | `M of Matrix.matrix
     | `MF of Matrix_flat.matrix ] ->
    Vector_complex.vector * Matrix_complex.matrix
  external nonsymmv_sort :
    Vector_complex.vector * Matrix_complex.matrix -> Eigen.sort -> unit
    = "ml_gsl_eigen_nonsymmv_sort"
end