sig
  type ('a, 'b) t = { xy : ('a, 'b) PHashhe.t; yx : ('b, 'a) PHashhe.t; }
  val hashx : ('a, 'b) PDHashhe.t -> ('a, 'b) PHashhe.t
  val hashy : ('a, 'b) PDHashhe.t -> ('b, 'a) PHashhe.t
  val clear : ('a, 'b) PDHashhe.t -> unit
  val create_compare :
    'a Hashhe.compare -> 'b Hashhe.compare -> int -> ('a, 'b) PDHashhe.t
  val create :
    ('a -> int) ->
    ('a -> 'a -> bool) ->
    ('b -> int) -> ('b -> 'b -> bool) -> int -> ('a, 'b) PDHashhe.t
  val add : ('a, 'b) PDHashhe.t -> 'a -> 'b -> unit
  val y_of_x : ('a, 'b) PDHashhe.t -> 'a -> 'b
  val x_of_y : ('a, 'b) PDHashhe.t -> 'b -> 'a
  val removex : ('a, 'b) PDHashhe.t -> 'a -> unit
  val removey : ('a, 'b) PDHashhe.t -> 'b -> unit
  val memx : ('a, 'b) PDHashhe.t -> 'a -> bool
  val memy : ('a, 'b) PDHashhe.t -> 'b -> bool
  val iter : ('a, 'b) PDHashhe.t -> ('a -> 'b -> unit) -> unit
  val fold : ('a, 'b) PDHashhe.t -> 'c -> ('a -> 'b -> 'c -> 'c) -> 'c
  val cardinal : ('a, 'b) PDHashhe.t -> int
  val print :
    ?first:(unit, Format.formatter, unit) Pervasives.format ->
    ?sep:(unit, Format.formatter, unit) Pervasives.format ->
    ?last:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastbind:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> 'a -> unit) ->
    (Format.formatter -> 'b -> unit) ->
    Format.formatter -> ('a, 'b) PDHashhe.t -> unit
end