sig
  exception DotError of string
  class type ['a, 'b, 'c] abstract_model =
    object
      method bounding_box : XDot.bounding_box
      method dst : '-> 'a
      method find_edge : '-> '-> 'b
      method get_cluster_layout : '-> XDot.cluster_layout
      method get_edge_layout : '-> XDot.edge_layout
      method get_vertex_layout : '-> XDot.node_layout
      method iter_clusters : ('-> unit) -> unit
      method iter_edges : ('-> '-> unit) -> unit
      method iter_edges_e : ('-> unit) -> unit
      method iter_pred : ('-> unit) -> '-> unit
      method iter_pred_e : ('-> unit) -> '-> unit
      method iter_succ : ('-> unit) -> '-> unit
      method iter_succ_e : ('-> unit) -> '-> unit
      method iter_vertex : ('-> unit) -> unit
      method mem_edge : '-> '-> bool
      method mem_edge_e : '-> bool
      method mem_vertex : '-> bool
      method src : '-> 'a
    end
  module Make :
    functor (G : Graph.Graphviz.GraphWithDotAttrs->
      sig
        type cluster = string
        class model :
          (G.vertex, G.edge, DGraphModel.Make.cluster) XDot.graph_layout ->
          G.t -> [G.vertex, G.edge, DGraphModel.Make.cluster] abstract_model
        val from_graph :
          ?cmd:string -> ?tmp_name:string -> G.t -> DGraphModel.Make.model
      end
  module Vertex : sig type t = XDot.node_layout end
  module Edge :
    sig
      type t = XDot.edge_layout
      val compare : t -> t -> int
      val default : t
    end
  module DotG :
    sig
      type t = Graph.Imperative.Digraph.AbstractLabeled(Vertex)(Edge).t
      module V : Graph.Sig.VERTEX
      type vertex = V.t
      module E :
        sig
          type 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 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
    end
  type cluster = string
  type dotg_model =
      (DGraphModel.DotG.vertex, DGraphModel.DotG.edge, DGraphModel.cluster)
      DGraphModel.abstract_model
  val read_dot : ?cmd:string -> string -> DGraphModel.dotg_model
  val read_xdot : string -> DGraphModel.dotg_model
end