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