sig
  type t
  type accel
  type interp_type =
      LINEAR
    | POLYNOMIAL
    | CSPLINE
    | CSPLINE_PERIODIC
    | AKIMA
    | AKIMA_PERIODIC
  val make : Interp.interp_type -> int -> Interp.t
  val init : Interp.t -> float array -> float array -> unit
  external name : Interp.t -> string = "ml_gsl_interp_name"
  external min_size : Interp.t -> int = "ml_gsl_interp_min_size"
  val make_accel : unit -> Interp.accel
  external i_eval :
    Interp.t -> float array -> float array -> float -> Interp.accel -> float
    = "ml_gsl_interp_eval"
  external i_eval_deriv :
    Interp.t -> float array -> float array -> float -> Interp.accel -> float
    = "ml_gsl_interp_eval_deriv"
  external i_eval_deriv2 :
    Interp.t -> float array -> float array -> float -> Interp.accel -> float
    = "ml_gsl_interp_eval_deriv2"
  external i_eval_integ :
    Interp.t ->
    float array -> float array -> float -> float -> Interp.accel -> float
    = "ml_gsl_interp_eval_integ_bc" "ml_gsl_interp_eval_integ"
  type interp = {
    interp : Interp.t;
    accel : Interp.accel;
    xa : float array;
    ya : float array;
    size : int;
    i_type : Interp.interp_type;
  }
  val make_interp :
    Interp.interp_type -> float array -> float array -> Interp.interp
  val eval : Interp.interp -> float -> float
  external eval_array : Interp.interp -> float array -> float array -> unit
    = "ml_gsl_interp_eval_array"
  val eval_deriv : Interp.interp -> float -> float
  val eval_deriv2 : Interp.interp -> float -> float
  val eval_integ : Interp.interp -> float -> float -> float
end