sig
  type t
  type r = NoRoot | Rising | Falling
  val create : int -> Sundials.Roots.t
  val make : int -> Sundials.Roots.r -> Sundials.Roots.t
  val init : int -> (int -> Sundials.Roots.r) -> Sundials.Roots.t
  val length : Sundials.Roots.t -> int
  val pp : Stdlib.Format.formatter -> Sundials.Roots.t -> unit
  val ppi :
    ?start:string ->
    ?stop:string ->
    ?sep:string ->
    ?item:(Stdlib.Format.formatter -> int -> Sundials.Roots.r -> unit) ->
    unit -> Stdlib.Format.formatter -> Sundials.Roots.t -> unit
  val detected : Sundials.Roots.t -> int -> bool
  val rising : Sundials.Roots.t -> int -> bool
  val falling : Sundials.Roots.t -> int -> bool
  val get : Sundials.Roots.t -> int -> Sundials.Roots.r
  val set : Sundials.Roots.t -> int -> Sundials.Roots.r -> unit
  val set_noroot : Sundials.Roots.t -> int -> unit
  val set_rising : Sundials.Roots.t -> int -> unit
  val set_falling : Sundials.Roots.t -> int -> unit
  val fill : Sundials.Roots.t -> Sundials.Roots.r -> unit
  val copy : Sundials.Roots.t -> Sundials.Roots.t
  val int_of_root : Sundials.Roots.r -> int
  val reset : Sundials.Roots.t -> unit
  val exists : Sundials.Roots.t -> bool
  val iter : (Sundials.Roots.r -> unit) -> Sundials.Roots.t -> unit
  val iteri : (int -> Sundials.Roots.r -> unit) -> Sundials.Roots.t -> unit
  val of_list : Sundials.Roots.r list -> Sundials.Roots.t
  val to_list : Sundials.Roots.t -> Sundials.Roots.r list
  val of_array : Sundials.Roots.r array -> Sundials.Roots.t
  val to_array : Sundials.Roots.t -> Sundials.Roots.r array
end