sig
  type vertex
  type hedge
  val vertex_dummy : SHGraph.S.vertex
  val hedge_dummy : SHGraph.S.hedge
  module SetV :
    sig
      type elt = vertex
      type t
      val repr : t -> elt Sette.set
      val obj : elt Sette.set -> t
      module Ord : sig type t = elt val compare : t -> t -> int end
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        (Format.formatter -> elt -> unit) -> Format.formatter -> t -> unit
    end
  module SetH :
    sig
      type elt = hedge
      type t
      val repr : t -> elt Sette.set
      val obj : elt Sette.set -> t
      module Ord : sig type t = elt val compare : t -> t -> int end
      val empty : t
      val is_empty : t -> bool
      val mem : elt -> t -> bool
      val add : elt -> t -> t
      val singleton : elt -> t
      val remove : elt -> t -> t
      val union : t -> t -> t
      val inter : t -> t -> t
      val diff : t -> t -> t
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val subset : t -> t -> bool
      val iter : (elt -> unit) -> t -> unit
      val fold : (elt -> '-> 'a) -> t -> '-> 'a
      val for_all : (elt -> bool) -> t -> bool
      val exists : (elt -> bool) -> t -> bool
      val filter : (elt -> bool) -> t -> t
      val partition : (elt -> bool) -> t -> t * t
      val cardinal : t -> int
      val elements : t -> elt list
      val min_elt : t -> elt
      val max_elt : t -> elt
      val choose : t -> elt
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        (Format.formatter -> elt -> unit) -> Format.formatter -> t -> unit
    end
  module HashV :
    sig
      type key = vertex
      type 'a t = (key, 'a) Hashhe.hashtbl
      module Hash :
        sig type t = key val equal : t -> t -> bool val hash : t -> int end
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val map : (key -> '-> 'b) -> 'a t -> 'b t
      val length : 'a t -> int
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        ?firstbind:(unit, Format.formatter, unit) format ->
        ?sepbind:(unit, Format.formatter, unit) format ->
        ?lastbind:(unit, Format.formatter, unit) format ->
        (Format.formatter -> key -> unit) ->
        (Format.formatter -> '-> unit) -> Format.formatter -> 'a t -> unit
    end
  module HashH :
    sig
      type key = hedge
      type 'a t = (key, 'a) Hashhe.hashtbl
      module Hash :
        sig type t = key val equal : t -> t -> bool val hash : t -> int end
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val map : (key -> '-> 'b) -> 'a t -> 'b t
      val length : 'a t -> int
      val print :
        ?first:(unit, Format.formatter, unit) format ->
        ?sep:(unit, Format.formatter, unit) format ->
        ?last:(unit, Format.formatter, unit) format ->
        ?firstbind:(unit, Format.formatter, unit) format ->
        ?sepbind:(unit, Format.formatter, unit) format ->
        ?lastbind:(unit, Format.formatter, unit) format ->
        (Format.formatter -> key -> unit) ->
        (Format.formatter -> '-> unit) -> Format.formatter -> 'a t -> unit
    end
  val stdcompare : (SHGraph.S.vertex, SHGraph.S.hedge) SHGraph.compare
  type ('a, 'b, 'c) t
  val create : int -> '-> ('a, 'b, 'c) SHGraph.S.t
  val clear : ('a, 'b, 'c) SHGraph.S.t -> unit
  val is_empty : ('a, 'b, 'c) SHGraph.S.t -> bool
  val size_vertex : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_hedge : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_edgevh : ('a, 'b, 'c) SHGraph.S.t -> int
  val size_edgehv : ('a, 'b, 'c) SHGraph.S.t -> int
  val size : ('a, 'b, 'c) SHGraph.S.t -> int * int * int * int
  val attrvertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> 'a
  val attrhedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> 'b
  val info : ('a, 'b, 'c) SHGraph.S.t -> 'c
  val is_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> bool
  val is_hedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> bool
  val succhedge :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetH.t
  val predhedge :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetH.t
  val succvertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> SHGraph.S.vertex array
  val predvertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> SHGraph.S.vertex array
  val succ_vertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetV.t
  val pred_vertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.SetV.t
  val add_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> '-> unit
  val add_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.hedge ->
    '-> pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> unit
  val replace_attrvertex :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> '-> unit
  val replace_attrhedge :
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> '-> unit
  val remove_vertex : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> unit
  val remove_hedge : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.hedge -> unit
  val iter_vertex :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex ->
     '-> pred:SHGraph.S.SetH.t -> succ:SHGraph.S.SetH.t -> unit) ->
    unit
  val iter_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge ->
     '-> pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> unit) ->
    unit
  val fold_vertex :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex ->
     '-> pred:SHGraph.S.SetH.t -> succ:SHGraph.S.SetH.t -> '-> 'g) ->
    '-> 'g
  val fold_hedge :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.hedge ->
     '->
     pred:SHGraph.S.vertex array -> succ:SHGraph.S.vertex array -> '-> 'g) ->
    '-> 'g
  val map :
    ('a, 'b, 'c) SHGraph.S.t ->
    (SHGraph.S.vertex -> '-> 'aa) ->
    (SHGraph.S.hedge -> '-> 'bb) ->
    ('-> 'cc) -> ('aa, 'bb, 'cc) SHGraph.S.t
  val copy :
    (SHGraph.S.vertex -> '-> 'aa) ->
    (SHGraph.S.hedge -> '-> 'bb) ->
    ('-> 'cc) -> ('a, 'b, 'c) SHGraph.S.t -> ('aa, 'bb, 'cc) SHGraph.S.t
  val transpose :
    (SHGraph.S.vertex -> '-> 'aa) ->
    (SHGraph.S.hedge -> '-> 'bb) ->
    ('-> 'cc) -> ('a, 'b, 'c) SHGraph.S.t -> ('aa, 'bb, 'cc) SHGraph.S.t
  val min : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t
  val max : ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t
  val topological_sort :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.vertex -> SHGraph.S.vertex list
  val topological_sort_multi :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t -> SHGraph.S.SetV.t -> SHGraph.S.vertex list
  val reachable :
    ?filter:(SHGraph.S.hedge -> bool) ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.vertex -> SHGraph.S.SetV.t * SHGraph.S.SetH.t
  val reachable_multi :
    ?filter:(SHGraph.S.hedge -> bool) ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.SetV.t -> SHGraph.S.SetV.t * SHGraph.S.SetH.t
  val cfc :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.vertex -> SHGraph.S.vertex list list
  val cfc_multi :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.SetV.t -> SHGraph.S.vertex list list
  val scfc :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.vertex -> (unit, SHGraph.S.vertex) Ilist.t
  val scfc_multi :
    ?priority:SHGraph.S.hedge SHGraph.priority ->
    ('a, 'b, 'c) SHGraph.S.t ->
    SHGraph.S.SetV.t -> (unit, SHGraph.S.vertex) Ilist.t
  val print :
    (Format.formatter -> SHGraph.S.vertex -> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c) SHGraph.S.t -> unit
  val print_dot :
    ?style:string ->
    ?titlestyle:string ->
    ?vertexstyle:string ->
    ?hedgestyle:string ->
    ?fvertexstyle:(SHGraph.S.vertex -> string) ->
    ?fhedgestyle:(SHGraph.S.hedge -> string) ->
    ?title:string ->
    (Format.formatter -> SHGraph.S.vertex -> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> unit) ->
    (Format.formatter -> SHGraph.S.vertex -> '-> unit) ->
    (Format.formatter -> SHGraph.S.hedge -> '-> unit) ->
    Format.formatter -> ('a, 'b, 'c) SHGraph.S.t -> unit
end