sig
  type solver_result = Success | RootsFound | StopTimeReached
  type step_stats = {
    num_steps : int;
    actual_init_step : float;
    last_step : float;
    current_step : float;
    current_time : float;
  }
  type interpolant_type = Hermite | Lagrange
  type linearity = Linear of bool | Nonlinear
  type 'data error_weight_fun = 'data -> 'data -> unit
  type ('data, 'kind) tolerance =
      SStolerances of float * float
    | SVtolerances of float * ('data, 'kind) Nvector.t
    | WFtolerances of 'data Arkode.Common.error_weight_fun
  val default_tolerances : ('data, 'kind) Arkode.Common.tolerance
  type predictor_method =
      TrivialPredictor
    | MaximumOrderPredictor
    | VariableOrderPredictor
    | CutoffOrderPredictor
  type 'd nonlin_system_data = {
    tcur : float;
    zpred : 'd;
    zi : 'd;
    fi : 'd;
    gamma : float;
    sdata : 'd;
  }
  type 'd rootsfn = float -> '-> Sundials.RealArray.t -> unit
  val no_roots : int * 'Arkode.Common.rootsfn
  type adaptivity_args = {
    h1 : float;
    h2 : float;
    h3 : float;
    e1 : float;
    e2 : float;
    e3 : float;
    q : int;
    p : int;
  }
  type 'd adaptivity_fn =
      float -> '-> Arkode.Common.adaptivity_args -> float
  type adaptivity_params = {
    ks : (float * float * float) option;
    method_order : bool;
  }
  type 'd adaptivity_method =
      PIDcontroller of Arkode.Common.adaptivity_params
    | PIcontroller of Arkode.Common.adaptivity_params
    | Icontroller of Arkode.Common.adaptivity_params
    | ExplicitGustafsson of Arkode.Common.adaptivity_params
    | ImplicitGustafsson of Arkode.Common.adaptivity_params
    | ImExGustafsson of Arkode.Common.adaptivity_params
    | AdaptivityFn of 'Arkode.Common.adaptivity_fn
  type 'd rhsfn = float -> '-> '-> unit
  type 'd stability_fn = float -> '-> float
  type 'd resize_fn = '-> '-> unit
  type 'd postprocess_step_fn = float -> '-> unit
  type 'd triple = 'd * 'd * 'd
  type ('t, 'd) jacobian_arg =
    ('t, 'd) Arkode_impl.jacobian_arg = {
    jac_t : float;
    jac_y : 'd;
    jac_fy : 'd;
    jac_tmp : 't;
  }
end