sig
  type kind = PLAIN | MISER | VEGAS
  val integrate :
    Gsl_monte.kind ->
    Gsl_fun.monte_fun ->
    lo:float array -> up:float array -> int -> Gsl_rng.t -> Gsl_fun.result
  type plain_state
  val make_plain_state : int -> Gsl_monte.plain_state
  external init_plain : Gsl_monte.plain_state -> unit
    = "ml_gsl_monte_plain_init"
  external integrate_plain :
    Gsl_fun.monte_fun ->
    lo:float array ->
    up:float array ->
    int -> Gsl_rng.t -> Gsl_monte.plain_state -> Gsl_fun.result
    = "ml_gsl_monte_plain_integrate_bc" "ml_gsl_monte_plain_integrate"
  type miser_state
  type miser_params = {
    estimate_frac : float;
    min_calls : int;
    min_calls_per_bisection : int;
    miser_alpha : float;
    dither : float;
  }
  val make_miser_state : int -> Gsl_monte.miser_state
  external init_miser : Gsl_monte.miser_state -> unit
    = "ml_gsl_monte_miser_init"
  external integrate_miser :
    Gsl_fun.monte_fun ->
    lo:float array ->
    up:float array ->
    int -> Gsl_rng.t -> Gsl_monte.miser_state -> Gsl_fun.result
    = "ml_gsl_monte_miser_integrate_bc" "ml_gsl_monte_miser_integrate"
  external get_miser_params : Gsl_monte.miser_state -> Gsl_monte.miser_params
    = "ml_gsl_monte_miser_get_params"
  external set_miser_params :
    Gsl_monte.miser_state -> Gsl_monte.miser_params -> unit
    = "ml_gsl_monte_miser_set_params"
  type vegas_state
  type vegas_info = { result : float; sigma : float; chisq : float; }
  type vegas_mode = STRATIFIED | IMPORTANCE_ONLY | IMPORTANCE
  type vegas_params = {
    vegas_alpha : float;
    iterations : int;
    stage : int;
    mode : Gsl_monte.vegas_mode;
    verbose : int;
    ostream : Pervasives.out_channel option;
  }
  val make_vegas_state : int -> Gsl_monte.vegas_state
  external init_vegas : Gsl_monte.vegas_state -> unit
    = "ml_gsl_monte_vegas_init"
  external integrate_vegas :
    Gsl_fun.monte_fun ->
    lo:float array ->
    up:float array ->
    int -> Gsl_rng.t -> Gsl_monte.vegas_state -> Gsl_fun.result
    = "ml_gsl_monte_vegas_integrate_bc" "ml_gsl_monte_vegas_integrate"
  external get_vegas_info : Gsl_monte.vegas_state -> Gsl_monte.vegas_info
    = "ml_gsl_monte_vegas_get_info"
  external get_vegas_params : Gsl_monte.vegas_state -> Gsl_monte.vegas_params
    = "ml_gsl_monte_vegas_get_params"
  external set_vegas_params :
    Gsl_monte.vegas_state -> Gsl_monte.vegas_params -> unit
    = "ml_gsl_monte_vegas_set_params"
end