sig
  type pos = int * int
  type elt = PathVisual.MutBinHeap.pos * int * float
  type arrayidx = int
  type t = {
    mutable last : PathVisual.MutBinHeap.arrayidx;
    mutable arr : PathVisual.MutBinHeap.elt array;
    hash : PathVisual.MutBinHeap.arrayidx PathVisual.IntPairHash.t;
    compare : PathVisual.MutBinHeap.elt -> PathVisual.MutBinHeap.elt -> int;
  }
  val get :
    PathVisual.MutBinHeap.t ->
    PathVisual.MutBinHeap.arrayidx -> PathVisual.MutBinHeap.elt
  val parent :
    PathVisual.MutBinHeap.arrayidx -> PathVisual.MutBinHeap.arrayidx
  val left_child :
    PathVisual.MutBinHeap.arrayidx -> PathVisual.MutBinHeap.arrayidx
  val right_child :
    PathVisual.MutBinHeap.arrayidx -> PathVisual.MutBinHeap.arrayidx
  val getpos :
    PathVisual.MutBinHeap.t ->
    PathVisual.IntPairHash.key -> PathVisual.MutBinHeap.elt
  val swap :
    PathVisual.MutBinHeap.t ->
    PathVisual.MutBinHeap.arrayidx -> PathVisual.MutBinHeap.arrayidx -> unit
  val bubbleup :
    PathVisual.MutBinHeap.t -> PathVisual.MutBinHeap.arrayidx -> unit
  val bubbledown :
    PathVisual.MutBinHeap.t -> PathVisual.MutBinHeap.arrayidx -> unit
  val make :
    (PathVisual.MutBinHeap.elt -> PathVisual.MutBinHeap.elt -> int) ->
    PathVisual.MutBinHeap.t
  val insert : PathVisual.MutBinHeap.t -> PathVisual.MutBinHeap.elt -> unit
  val remove : PathVisual.MutBinHeap.t -> PathVisual.IntPairHash.key -> unit
  val replace : PathVisual.MutBinHeap.t -> PathVisual.MutBinHeap.elt -> unit
  val pop : PathVisual.MutBinHeap.t -> PathVisual.MutBinHeap.elt
end