sig
  class clock : string -> Source.clock
  class wallclock : ?sync:bool -> string -> clock
  class self_sync :
    string ->
    object
      method attach : Source.active_source -> unit
      method attach_clock : Source.clock_variable -> unit
      method detach : (Source.active_source -> bool) -> unit
      method end_tick : unit
      method get_tick : int
      method id : string
      method register_blocking_source : unit
      method start_outputs :
        (Source.active_source -> bool) -> unit -> Source.active_source list
      method sub_clocks : Source.clock_variable list
      method unregister_blocking_source : unit
    end
  val running : unit -> bool
  val collect_after : (unit -> 'a) -> 'a
  val force_init :
    (Source.active_source -> bool) -> Source.active_source list
  val start : unit -> unit
  val stop : unit -> unit
  val fold : (Source.clock -> '-> 'a) -> '-> 'a
  type clock_variable = Source.clock_variable
  val to_string : Clock.clock_variable -> string
  val create_unknown :
    sources:Source.active_source list ->
    sub_clocks:Clock.clock_variable list -> Clock.clock_variable
  val create_known : Clock.clock -> Clock.clock_variable
  val unify : Clock.clock_variable -> Clock.clock_variable -> unit
  val get : Clock.clock_variable -> Source.clock
end