module type S =
sig
type edge
type vertex
type graph
val compare_vertex : vertex -> vertex -> int
val compare_edge : edge -> edge -> int
val empty : graph
val add_vertex : graph -> vertex -> graph
val add_edge : graph -> vertex -> vertex -> edge -> graph
val remove_vertex : graph -> vertex -> graph
val remove_edge : graph -> edge -> graph
module V : Set.S with type elt = vertex
module E : Set.S with type elt = edge
module VMap : Map.S with type key = vertex
module EMap : Map.S with type key = edge
val v : graph -> V.t
val e : graph -> E.t
val tail : graph -> edge -> vertex
val head : graph -> edge -> vertex
val extremities : graph -> edge -> vertex * vertex
val opposite : graph -> edge -> vertex -> vertex
val delta_in : graph -> vertex -> E.t
val delta_out : graph -> vertex -> E.t
val delta : graph -> vertex -> E.t
val in_neighbour : graph -> vertex -> V.t
val out_neighbour : graph -> vertex -> V.t
val neighbour : graph -> vertex -> V.t
val adjacent : graph -> vertex -> vertex -> bool
val edge : graph -> vertex -> vertex -> edge
val arcs : graph -> vertex -> vertex -> E.t
val edges : graph -> vertex -> vertex -> E.t
val induced : graph -> V.t -> graph
val subgraph : graph -> E.t -> graph
val contract : graph -> ?w:vertex -> edge -> graph
val identify : graph -> ?w:vertex -> V.t -> graph
val simplify : graph -> vertex -> graph
val directed_simplify : graph -> vertex -> graph
module VFun : Cmap.CMAP with type elt = vertex
module VCount : Counter.COUNTER with type elt = vertex
module EFun : Cmap.CMAP with type elt = edge
module ECount : Counter.COUNTER with type elt = edge
end