sig
  type 'a priority =
    'SHGraph.priority =
      Filter of ('-> bool)
    | Priority of ('-> int)
  type ('a, 'b) compare =
    ('a, 'b) SHGraph.compare = {
    hashv : 'Hashhe.compare;
    hashh : 'Hashhe.compare;
    comparev : '-> '-> int;
    compareh : '-> '-> int;
  }
  type ('a, 'b, 'c, 'd, 'e) t = {
    compare : ('a, 'b) PSHGraph.compare;
    mutable graph : ('a, 'b, 'c, 'd, 'e) SHGraph.t;
  }
  val stdcompare : ('a, 'b) PSHGraph.compare
  val make :
    ('a, 'b) PSHGraph.compare ->
    ('a, 'b, 'c, 'd, 'e) SHGraph.t -> ('a, 'b, 'c, 'd, 'e) PSHGraph.t
  val create_compare :
    ('a, 'b) PSHGraph.compare -> int -> '-> ('a, 'b, 'd, 'e, 'c) PSHGraph.t
  val create :
    ('a, 'b) PSHGraph.compare -> int -> '-> ('a, 'b, 'd, 'e, 'c) PSHGraph.t
  val clear : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> unit
  val size_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> int
  val size_hedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> int
  val size_edgevh : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> int
  val size_edgehv : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> int
  val size : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> int * int * int * int
  val attrvertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'c
  val attrhedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'd
  val info : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'e
  val is_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> bool
  val is_hedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> bool
  val is_empty : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> bool
  val succhedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'PSette.t
  val predhedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'PSette.t
  val succvertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'a array
  val predvertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'a array
  val succ_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'PSette.t
  val pred_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> 'PSette.t
  val add_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> '-> unit
  val add_hedge :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    '-> '-> pred:'a array -> succ:'a array -> unit
  val replace_attrvertex :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> '-> unit
  val replace_attrhedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> '-> unit
  val remove_hedge : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> unit
  val remove_vertex : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> '-> unit
  val iter_vertex :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    ('-> '-> pred:'PSette.t -> succ:'PSette.t -> unit) -> unit
  val fold_vertex :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    ('-> '-> pred:'PSette.t -> succ:'PSette.t -> '-> 'f) ->
    '-> 'f
  val iter_hedge :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    ('-> '-> pred:'a array -> succ:'a array -> unit) -> unit
  val fold_hedge :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    ('-> '-> pred:'a array -> succ:'a array -> '-> 'f) -> '-> 'f
  val map :
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    ('-> '-> 'f) ->
    ('-> '-> 'g) -> ('-> 'h) -> ('a, 'b, 'f, 'g, 'h) PSHGraph.t
  val copy :
    ('-> '-> 'c) ->
    ('-> '-> 'f) ->
    ('-> 'h) ->
    ('a, 'd, 'b, 'e, 'g) PSHGraph.t -> ('a, 'd, 'c, 'f, 'h) PSHGraph.t
  val transpose :
    ('-> '-> 'c) ->
    ('-> '-> 'f) ->
    ('-> 'h) ->
    ('a, 'd, 'b, 'e, 'g) PSHGraph.t -> ('a, 'd, 'c, 'f, 'h) PSHGraph.t
  val topological_sort :
    ?priority:'PSHGraph.priority ->
    ('b, 'a, 'c, 'd, 'e) PSHGraph.t -> '-> 'b list
  val topological_sort_multi :
    '->
    '->
    ?priority:'PSHGraph.priority ->
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'PSette.t -> 'a list
  val reachable :
    ?filter:('-> bool) ->
    ('b, 'a, 'c, 'd, 'e) PSHGraph.t -> '-> 'PSette.t * 'PSette.t
  val reachable_multi :
    '->
    '->
    ?filter:('-> bool) ->
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t ->
    'PSette.t -> 'PSette.t * 'PSette.t
  val cfc :
    ?priority:'PSHGraph.priority ->
    ('b, 'a, 'c, 'd, 'e) PSHGraph.t -> '-> 'b list list
  val cfc_multi :
    '->
    '->
    ?priority:'PSHGraph.priority ->
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'PSette.t -> 'a list list
  val scfc :
    ?priority:'PSHGraph.priority ->
    ('b, 'a, 'c, 'd, 'e) PSHGraph.t -> '-> (unit, 'b) Ilist.t
  val scfc_multi :
    '->
    '->
    ?priority:'PSHGraph.priority ->
    ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'PSette.t -> (unit, 'a) Ilist.t
  val print :
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> unit
  val print_dot :
    ?style:string ->
    ?titlestyle:string ->
    ?vertexstyle:string ->
    ?hedgestyle:string ->
    ?fvertexstyle:('-> string) ->
    ?fhedgestyle:('-> string) ->
    ?title:string ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> '-> unit) ->
    (Format.formatter -> '-> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> unit
  val min : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'PSette.t
  val max : ('a, 'b, 'c, 'd, 'e) PSHGraph.t -> 'PSette.t
end