sig
  type system
  val make_system :
    (float -> float array -> float array -> unit) ->
    ?jac:(float -> float array -> Gsl_matrix.matrix -> float array -> unit) ->
    int -> Gsl_odeiv.system
  type step
  type step_kind =
      RK2
    | RK4
    | RKF45
    | RKCK
    | RK8PD
    | RK2IMP
    | RK2SIMP
    | RK4IMP
    | BSIMP
    | GEAR1
    | GEAR2
  val make_step : Gsl_odeiv.step_kind -> dim:int -> Gsl_odeiv.step
  external step_reset : Gsl_odeiv.step -> unit = "ml_gsl_odeiv_step_reset"
  external step_name : Gsl_odeiv.step -> string = "ml_gsl_odeiv_step_name"
  external step_order : Gsl_odeiv.step -> int = "ml_gsl_odeiv_step_order"
  external step_apply :
    Gsl_odeiv.step ->
    t:float ->
    h:float ->
    y:float array ->
    yerr:float array ->
    ?dydt_in:float array -> ?dydt_out:float array -> Gsl_odeiv.system -> unit
    = "ml_gsl_odeiv_step_apply_bc" "ml_gsl_odeiv_step_apply"
  type control
  val make_control_standard_new :
    eps_abs:float ->
    eps_rel:float -> a_y:float -> a_dydt:float -> Gsl_odeiv.control
  val make_control_y_new :
    eps_abs:float -> eps_rel:float -> Gsl_odeiv.control
  val make_control_yp_new :
    eps_abs:float -> eps_rel:float -> Gsl_odeiv.control
  val make_control_scaled_new :
    eps_abs:float ->
    eps_rel:float ->
    a_y:float -> a_dydt:float -> scale_abs:float array -> Gsl_odeiv.control
  external control_name : Gsl_odeiv.control -> string
    = "ml_gsl_odeiv_control_name"
  type hadjust = HADJ_DEC | HADJ_NIL | HADJ_INC
  external control_hadjust :
    Gsl_odeiv.control ->
    Gsl_odeiv.step ->
    y:float array ->
    yerr:float array ->
    dydt:float array -> h:float -> Gsl_odeiv.hadjust * float
    = "ml_gsl_odeiv_control_hadjust_bc" "ml_gsl_odeiv_control_hadjust"
  type evolve
  val make_evolve : int -> Gsl_odeiv.evolve
  external evolve_reset : Gsl_odeiv.evolve -> unit
    = "ml_gsl_odeiv_evolve_reset"
  external evolve_apply :
    Gsl_odeiv.evolve ->
    Gsl_odeiv.control ->
    Gsl_odeiv.step ->
    Gsl_odeiv.system ->
    t:float -> t1:float -> h:float -> y:float array -> float * float
    = "ml_gsl_odeiv_evolve_apply_bc" "ml_gsl_odeiv_evolve_apply"
end