sig
  type pos = int * int
  type path = PathVisual.PathFinding.pos list
  type hash_from_pos_to_int = int PathVisual.IntPairHash.t
  type heap_of_pos_cost_dist = PathVisual.MutBinHeap.t
  type distance_function =
      PathVisual.PathFinding.pos -> PathVisual.PathFinding.pos -> float
  val dist_simple :
    PathVisual.PathFinding.pos -> PathVisual.PathFinding.pos -> float
  val dist_euclid :
    PathVisual.PathFinding.pos -> PathVisual.PathFinding.pos -> float
  val string_of_path : PathVisual.PathFinding.path -> string
  val path :
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.hash_from_pos_to_int ->
    PathVisual.PathFinding.path
  val lineofsight :
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    (PathVisual.PathFinding.pos -> bool) -> bool
  val path_opt'' :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.path * PathVisual.PathFinding.path *
    PathVisual.PathFinding.path * PathVisual.PathFinding.pos list ->
    (PathVisual.PathFinding.path ->
     PathVisual.PathFinding.path ->
     PathVisual.PathFinding.pos list ->
     PathVisual.PathFinding.pos ->
     PathVisual.PathFinding.pos ->
     PathVisual.PathFinding.path * PathVisual.PathFinding.path *
     PathVisual.PathFinding.path * PathVisual.PathFinding.pos list) ->
    PathVisual.PathFinding.path * PathVisual.PathFinding.path *
    PathVisual.PathFinding.path * PathVisual.PathFinding.pos list
  val path_opt' : '-> 'b list -> 'c list * 'b list * 'b list * 'd list
  val path_opt :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.path ->
    (PathVisual.PathFinding.path ->
     PathVisual.PathFinding.path ->
     PathVisual.PathFinding.pos list ->
     PathVisual.PathFinding.pos ->
     PathVisual.PathFinding.pos ->
     PathVisual.PathFinding.path * PathVisual.PathFinding.path *
     PathVisual.PathFinding.path * PathVisual.PathFinding.pos list) ->
    PathVisual.PathFinding.path
  val path_opt_good_foundf :
    (int * int) list ->
    '->
    (int * int) list ->
    int * int ->
    int * int ->
    (int * int) list * (int * int) list * (int * int) list * 'b list
  val path_opt_good :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.path -> PathVisual.PathFinding.path
  val path_opt_fast_foundf :
    (int * int) list ->
    '->
    'b list ->
    int * int -> int * int -> (int * int) list * 'b list * 'b list * 'c list
  val path_opt_fast :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.path -> PathVisual.PathFinding.path
  exception Exception_intpairhash of int PathVisual.IntPairHash.t
  val pathfindingloop :
    '->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    ('->
     PathVisual.PathFinding.pos -> PathVisual.PathFinding.pos -> 'b * 'c) ->
    ('-> PathVisual.PathFinding.pos -> '-> '-> '-> 'b * 'c) ->
    '-> PathVisual.PathFinding.path
  val astar'' :
    PathVisual.Cave.t ->
    PathVisual.MutBinHeap.pos ->
    PathVisual.PathFinding.hash_from_pos_to_int ->
    PathVisual.PathFinding.heap_of_pos_cost_dist ->
    PathVisual.PathFinding.distance_function ->
    PathVisual.PathFinding.hash_from_pos_to_int *
    PathVisual.PathFinding.heap_of_pos_cost_dist
  val astar' :
    '->
    PathVisual.MutBinHeap.pos ->
    '-> 'PathVisual.IntPairHash.t * PathVisual.MutBinHeap.t
  val astar :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.distance_function -> PathVisual.PathFinding.path
  val dijkstra'' :
    PathVisual.Cave.t ->
    PathVisual.MutBinHeap.pos ->
    PathVisual.PathFinding.hash_from_pos_to_int ->
    PathVisual.PathFinding.heap_of_pos_cost_dist ->
    PathVisual.PathFinding.distance_function ->
    PathVisual.PathFinding.hash_from_pos_to_int *
    PathVisual.PathFinding.heap_of_pos_cost_dist
  val dijkstra' :
    '->
    PathVisual.MutBinHeap.pos ->
    '-> 'PathVisual.IntPairHash.t * PathVisual.MutBinHeap.t
  val dijkstra :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.distance_function -> PathVisual.PathFinding.path
  val greedy_astar'' :
    PathVisual.Cave.t ->
    PathVisual.MutBinHeap.pos ->
    PathVisual.PathFinding.hash_from_pos_to_int ->
    PathVisual.PathFinding.heap_of_pos_cost_dist ->
    PathVisual.PathFinding.distance_function ->
    PathVisual.PathFinding.hash_from_pos_to_int *
    PathVisual.PathFinding.heap_of_pos_cost_dist
  val greedy_astar' :
    '->
    PathVisual.MutBinHeap.pos ->
    '-> 'PathVisual.IntPairHash.t * PathVisual.MutBinHeap.t
  val greedy_astar :
    PathVisual.Cave.t ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.distance_function -> PathVisual.PathFinding.path
end