sig
  type data
  type t
  val create : int -> Weak.S.t
  val clear : Weak.S.t -> unit
  val merge : Weak.S.t -> Weak.S.data -> Weak.S.data
  val add : Weak.S.t -> Weak.S.data -> unit
  val remove : Weak.S.t -> Weak.S.data -> unit
  val find : Weak.S.t -> Weak.S.data -> Weak.S.data
  val find_opt : Weak.S.t -> Weak.S.data -> Weak.S.data option
  val find_all : Weak.S.t -> Weak.S.data -> Weak.S.data list
  val mem : Weak.S.t -> Weak.S.data -> bool
  val iter : (Weak.S.data -> unit) -> Weak.S.t -> unit
  val fold : (Weak.S.data -> 'acc -> 'acc) -> Weak.S.t -> 'acc -> 'acc
  val count : Weak.S.t -> int
  val stats : Weak.S.t -> int * int * int * int * int * int
end