sig
  val total_time_s : unit -> float
  val total_time_ns : unit -> int64
  val start_time : unit -> int64
  val ns_to_s : int64 -> float
  module Section :
    sig
      type t
      val full_name : Util.Section.t -> string
      val set_debug : Util.Section.t -> int -> unit
      val clear_debug : Util.Section.t -> unit
      val get_debug : Util.Section.t -> int option
      val cur_level : Util.Section.t -> int
      val iter : (string * Util.Section.t) Sequence.t
      val root : Util.Section.t
      val zip : Util.Section.t
      val make :
        ?parent:Util.Section.t ->
        ?inheriting:Util.Section.t list -> string -> Util.Section.t
    end
  val set_debug : int -> unit
  val get_debug : unit -> int
  val debugf :
    ?section:Util.Section.t ->
    int ->
    ('a, Format.formatter, unit, unit) Pervasives.format4 ->
    ('-> unit) -> unit
  val debug : ?section:Util.Section.t -> int -> string -> unit
  val ksprintf_noc :
    f:(string -> 'a) ->
    ('b, Format.formatter, unit, 'a) Pervasives.format4 -> 'b
  val err_spf : ('b, Format.formatter, unit, string) Pervasives.format4 -> 'b
  val warn : string -> unit
  val warnf : ('a, Format.formatter, unit, unit) Pervasives.format4 -> 'a
  exception Error of string * string
  val error : where:string -> string -> 'a
  val errorf :
    where:string -> ('b, Format.formatter, unit, 'a) Pervasives.format4 -> 'b
  val pp_pos : Lexing.position -> string
  val set_memory_limit : int -> unit
  val set_time_limit : int -> unit
  module Exn :
    sig
      val pp_stack : Buffer.t -> int -> unit
      val fmt_stack : Format.formatter -> int -> unit
      val pp_backtrace : Buffer.t -> unit -> unit
      val fmt_backtrace : Format.formatter -> unit -> unit
    end
  type profiler
  val enable_profiling : bool Pervasives.ref
  val mk_profiler : string -> Util.profiler
  val enter_prof : Util.profiler -> unit
  val exit_prof : Util.profiler -> unit
  val with_prof : Util.profiler -> ('-> 'b) -> '-> 'b
  type stat
  val mk_stat : string -> Util.stat
  val print_global_stats : unit -> unit
  val incr_stat : Util.stat -> unit
  val add_stat : Util.stat -> int -> unit
  module Flag :
    sig
      type gen = int Pervasives.ref
      val create : unit -> Util.Flag.gen
      val get_new : Util.Flag.gen -> int
    end
  val finally : do_:(unit -> unit) -> (unit -> 'a) -> 'a
  val pp_pair :
    ?sep:string ->
    'CCFormat.printer -> 'CCFormat.printer -> ('a * 'b) CCFormat.printer
  val pp_list :
    ?sep:string -> 'CCFormat.printer -> 'a list CCFormat.printer
  val ord_option : 'CCOrd.t -> 'a option CCOrd.t
  val map_product : f:('-> 'b list list) -> 'a list -> 'b list list
  type 'a or_error = [ `Error of string | `Ok of 'a ]
  val popen : cmd:string -> input:string -> string Util.or_error
end