sig
  module Deriv :
    sig
      type kind =
          CONJUGATE_FR
        | CONJUGATE_PR
        | VECTOR_BFGS
        | VECTOR_BFGS2
        | STEEPEST_DESCENT
      type t
      val make :
        Multimin.Deriv.kind ->
        int ->
        Fun.multim_fun_fdf ->
        x:Vector.vector -> step:float -> tol:float -> Multimin.Deriv.t
      external name : Multimin.Deriv.t -> string
        = "ml_gsl_multimin_fdfminimizer_name"
      external iterate : Multimin.Deriv.t -> unit
        = "ml_gsl_multimin_fdfminimizer_iterate"
      external restart : Multimin.Deriv.t -> unit
        = "ml_gsl_multimin_fdfminimizer_restart"
      external minimum :
        ?x:Vector.vector ->
        ?dx:Vector.vector -> ?g:Vector.vector -> Multimin.Deriv.t -> float
        = "ml_gsl_multimin_fdfminimizer_minimum"
      external test_gradient : Multimin.Deriv.t -> float -> bool
        = "ml_gsl_multimin_test_gradient"
    end
  module NoDeriv :
    sig
      type kind = NM_SIMPLEX
      type t
      val make :
        Multimin.NoDeriv.kind ->
        int ->
        Fun.multim_fun ->
        x:Vector.vector -> step_size:Vector.vector -> Multimin.NoDeriv.t
      external name : Multimin.NoDeriv.t -> string
        = "ml_gsl_multimin_fminimizer_name"
      external iterate : Multimin.NoDeriv.t -> unit
        = "ml_gsl_multimin_fminimizer_iterate"
      external minimum : ?x:Vector.vector -> Multimin.NoDeriv.t -> float
        = "ml_gsl_multimin_fminimizer_minimum"
      external size : Multimin.NoDeriv.t -> float
        = "ml_gsl_multimin_fminimizer_size"
      external test_size : Multimin.NoDeriv.t -> float -> bool
        = "ml_gsl_multimin_test_size"
    end
end