sig
  type symm_ws
  val make_symm_ws : int -> Gsl_eigen.symm_ws
  external _symm :
    Gsl_vectmat.mat -> Gsl_vectmat.vec -> Gsl_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 Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vector.vector
  type symmv_ws
  val make_symmv_ws : int -> Gsl_eigen.symmv_ws
  external _symmv :
    Gsl_vectmat.mat ->
    Gsl_vectmat.vec -> Gsl_vectmat.mat -> Gsl_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 Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vector.vector * Gsl_matrix.matrix
  type sort = VAL_ASC | VAL_DESC | ABS_ASC | ABS_DESC
  external symmv_sort :
    Gsl_vector.vector * Gsl_matrix.matrix -> Gsl_eigen.sort -> unit
    = "ml_gsl_eigen_symmv_sort"
  type herm_ws
  val make_herm_ws : int -> Gsl_eigen.herm_ws
  external _herm :
    Gsl_vectmat.cmat -> Gsl_vectmat.vec -> Gsl_eigen.herm_ws -> unit
    = "ml_gsl_eigen_herm"
  val herm :
    ?protect:bool ->
    [< `CA of Gsl_complex.complex_array * int * int
     | `CM of Gsl_matrix_complex.matrix
     | `CMF of Gsl_matrix_complex_flat.matrix ] ->
    Gsl_vector.vector
  type hermv_ws
  val make_hermv_ws : int -> Gsl_eigen.hermv_ws
  external _hermv :
    Gsl_vectmat.cmat ->
    Gsl_vectmat.vec -> Gsl_vectmat.cmat -> Gsl_eigen.hermv_ws -> unit
    = "ml_gsl_eigen_hermv"
  val hermv :
    ?protect:bool ->
    [< `CA of Gsl_complex.complex_array * int * int
     | `CM of Gsl_matrix_complex.matrix
     | `CMF of Gsl_matrix_complex_flat.matrix ] ->
    Gsl_vector.vector * Gsl_matrix_complex.matrix
  external hermv_sort :
    Gsl_vector.vector * Gsl_matrix_complex.matrix -> Gsl_eigen.sort -> unit
    = "ml_gsl_eigen_hermv_sort"
  type nonsymm_ws
  val make_nonsymm_ws : int -> Gsl_eigen.nonsymm_ws
  external _nonsymm :
    Gsl_vectmat.mat -> Gsl_vectmat.cvec -> Gsl_eigen.nonsymm_ws -> unit
    = "ml_gsl_eigen_nonsymm"
  external _nonsymm_Z :
    Gsl_vectmat.mat ->
    Gsl_vectmat.cvec -> Gsl_vectmat.mat -> Gsl_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 Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vector_complex.vector
  type nonsymmv_ws
  val make_nonsymmv_ws : int -> Gsl_eigen.nonsymmv_ws
  external _nonsymmv :
    Gsl_vectmat.mat ->
    Gsl_vectmat.cvec -> Gsl_vectmat.cmat -> Gsl_eigen.nonsymmv_ws -> unit
    = "ml_gsl_eigen_nonsymmv"
  external _nonsymmv_Z :
    Gsl_vectmat.mat ->
    Gsl_vectmat.cvec ->
    Gsl_vectmat.cmat -> Gsl_vectmat.mat -> Gsl_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 Gsl_matrix.matrix
     | `MF of Gsl_matrix_flat.matrix ] ->
    Gsl_vector_complex.vector * Gsl_matrix_complex.matrix
  external nonsymmv_sort :
    Gsl_vector_complex.vector * Gsl_matrix_complex.matrix ->
    Gsl_eigen.sort -> unit = "ml_gsl_eigen_nonsymmv_sort"
end