sig
  module G : Graph.Sig.G
  module GraphAttrs :
    sig
      type t = G.t
      module V :
        sig
          type t = G.V.t
          val compare : t -> t -> int
          val hash : t -> int
          val equal : t -> t -> bool
          type label
          val create : label -> t
          val label : t -> label
        end
      type vertex = V.t
      module E :
        sig
          type t = G.E.t
          val compare : t -> t -> int
          type vertex = vertex
          val src : t -> vertex
          val dst : t -> vertex
          type label
          val create : vertex -> label -> vertex -> t
          val label : t -> label
        end
      type edge = E.t
      val is_directed : bool
      val is_empty : t -> bool
      val nb_vertex : t -> int
      val nb_edges : t -> int
      val out_degree : t -> vertex -> int
      val in_degree : t -> vertex -> int
      val mem_vertex : t -> vertex -> bool
      val mem_edge : t -> vertex -> vertex -> bool
      val mem_edge_e : t -> edge -> bool
      val find_edge : t -> vertex -> vertex -> edge
      val find_all_edges : t -> vertex -> vertex -> edge list
      val succ : t -> vertex -> vertex list
      val pred : t -> vertex -> vertex list
      val succ_e : t -> vertex -> edge list
      val pred_e : t -> vertex -> edge list
      val iter_vertex : (vertex -> unit) -> t -> unit
      val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
      val iter_edges : (vertex -> vertex -> unit) -> t -> unit
      val fold_edges : (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
      val iter_edges_e : (edge -> unit) -> t -> unit
      val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
      val map_vertex : (vertex -> vertex) -> t -> t
      val iter_succ : (vertex -> unit) -> t -> vertex -> unit
      val iter_pred : (vertex -> unit) -> t -> vertex -> unit
      val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
      val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
      val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
      val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
      val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
      val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
      val graph_attributes : t -> Graph.Graphviz.DotAttributes.graph list
      val default_vertex_attributes :
        t -> Graph.Graphviz.DotAttributes.vertex list
      val vertex_name : V.t -> string
      val vertex_attributes : V.t -> Graph.Graphviz.DotAttributes.vertex list
      val default_edge_attributes :
        t -> Graph.Graphviz.DotAttributes.edge list
      val edge_attributes : E.t -> Graph.Graphviz.DotAttributes.edge list
      val get_subgraph : V.t -> Graph.Graphviz.DotAttributes.subgraph option
    end
  val create : unit -> DGraphModel.Make(GraphAttrs).model
end