sig
  type cluster = string
  type status = Global | Tree | Both
  class type
    ['vertex, 'edge, 'cluster, 'tree_vertex, 'tree_edge, 'tree_cluster]
    view_container_type =
    object
      method adapt_zoom : unit -> unit
      method depth_backward : int
      method depth_forward : int
      method global_view : ('vertex, 'edge, 'cluster) DGraphView.view option
      method set_depth_backward : int -> unit
      method set_depth_forward : int -> unit
      method set_tree_root : 'vertex -> unit
      method status : DGraphContainer.status
      method switch : DGraphContainer.status -> unit
      method tree_root : 'vertex option
      method tree_view :
        ('tree_vertex, 'tree_edge, 'tree_cluster) DGraphView.view option
    end
  module type S =
    sig
      type graph
      type vertex
      type edge
      module Tree :
        sig
          type t
          module V :
            sig
              type t
              val compare : t -> t -> int
              val hash : t -> int
              val equal : t -> t -> bool
              type label = vertex
              val create : label -> t
              val label : t -> label
            end
          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 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
        end
      module GView :
        sig
          type vertex = vertex
          type edge = edge
          type cluster = cluster
          val view :
            ?aa:bool ->
            ?delay_node:(vertex -> bool) ->
            ?delay_edge:(edge -> bool) ->
            ?delay_cluster:(cluster -> bool) ->
            ?border_width:int ->
            ?width:int ->
            ?height:int ->
            ?packing:(GObj.widget -> unit) ->
            ?show:bool ->
            (vertex, edge, cluster) DGraphModel.abstract_model ->
            (vertex, edge, cluster) DGraphView.view
        end
      module TView :
        sig
          type vertex = Tree.V.t
          type edge = Tree.E.t
          type cluster = cluster
          val view :
            ?aa:bool ->
            ?delay_node:(vertex -> bool) ->
            ?delay_edge:(edge -> bool) ->
            ?delay_cluster:(cluster -> bool) ->
            ?border_width:int ->
            ?width:int ->
            ?height:int ->
            ?packing:(GObj.widget -> unit) ->
            ?show:bool ->
            (vertex, edge, cluster) DGraphModel.abstract_model ->
            (vertex, edge, cluster) DGraphView.view
        end
      type global_view =
          (DGraphContainer.S.vertex, DGraphContainer.S.edge,
           DGraphContainer.cluster)
          DGraphView.view
      type tree_view =
          (DGraphContainer.S.Tree.V.t, DGraphContainer.S.Tree.E.t,
           DGraphContainer.cluster)
          DGraphView.view
      class view_container :
        ?packing:(GObj.widget -> unit) ->
        ?status:DGraphContainer.status ->
        ?default_callbacks:bool ->
        mk_global_view:(unit -> DGraphContainer.S.global_view) ->
        mk_tree_view:(depth_backward:int ->
                      depth_forward:int ->
                      Gtk.widget Gtk.obj ->
                      DGraphContainer.S.vertex -> DGraphContainer.S.tree_view) ->
        DGraphContainer.S.vertex option ->
        [DGraphContainer.S.vertex, DGraphContainer.S.edge,
         DGraphContainer.cluster, DGraphContainer.S.Tree.V.t,
         DGraphContainer.S.Tree.E.t, DGraphContainer.cluster]
        view_container_type
    end
  module Make :
    functor (G : Graph.Graphviz.GraphWithDotAttrs->
      sig
        type graph = G.t
        type vertex = G.V.t
        type edge = G.E.t
        module Tree :
          sig
            type t
            module V :
              sig
                type t
                val compare : t -> t -> int
                val hash : t -> int
                val equal : t -> t -> bool
                type label = vertex
                val create : label -> t
                val label : t -> label
              end
            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 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
          end
        module GView :
          sig
            type vertex = vertex
            type edge = edge
            type cluster = cluster
            val view :
              ?aa:bool ->
              ?delay_node:(vertex -> bool) ->
              ?delay_edge:(edge -> bool) ->
              ?delay_cluster:(cluster -> bool) ->
              ?border_width:int ->
              ?width:int ->
              ?height:int ->
              ?packing:(GObj.widget -> unit) ->
              ?show:bool ->
              (vertex, edge, cluster) DGraphModel.abstract_model ->
              (vertex, edge, cluster) DGraphView.view
          end
        module TView :
          sig
            type vertex = Tree.V.t
            type edge = Tree.E.t
            type cluster = cluster
            val view :
              ?aa:bool ->
              ?delay_node:(vertex -> bool) ->
              ?delay_edge:(edge -> bool) ->
              ?delay_cluster:(cluster -> bool) ->
              ?border_width:int ->
              ?width:int ->
              ?height:int ->
              ?packing:(GObj.widget -> unit) ->
              ?show:bool ->
              (vertex, edge, cluster) DGraphModel.abstract_model ->
              (vertex, edge, cluster) DGraphView.view
          end
        type global_view = (vertex, edge, cluster) DGraphView.view
        type tree_view = (Tree.V.t, Tree.E.t, cluster) DGraphView.view
        class view_container :
          ?packing:(GObj.widget -> unit) ->
          ?status:status ->
          ?default_callbacks:bool ->
          mk_global_view:(unit -> global_view) ->
          mk_tree_view:(depth_backward:int ->
                        depth_forward:int ->
                        Gtk.widget Gtk.obj -> vertex -> tree_view) ->
          vertex option ->
          [vertex, edge, cluster, Tree.V.t, Tree.E.t, cluster]
          view_container_type
        val from_graph :
          ?packing:(GObj.widget -> unit) ->
          ?status:DGraphContainer.status ->
          ?default_callbacks:bool ->
          ?mk_global_view:((G.V.t, G.E.t, DGraphContainer.cluster)
                           DGraphModel.abstract_model -> global_view) ->
          ?mk_tree_view:((Tree.V.t, Tree.E.t, DGraphContainer.cluster)
                         DGraphModel.abstract_model -> tree_view) ->
          ?root:G.vertex -> G.t -> view_container
        val from_graph_with_commands :
          ?packing:(GObj.widget -> unit) ->
          ?status:DGraphContainer.status ->
          ?default_callbacks:bool ->
          ?mk_global_view:((G.V.t, G.E.t, DGraphContainer.cluster)
                           DGraphModel.abstract_model -> global_view) ->
          ?mk_tree_view:((Tree.V.t, Tree.E.t, DGraphContainer.cluster)
                         DGraphModel.abstract_model -> tree_view) ->
          ?root:G.vertex -> G.t -> GPack.table * view_container
      end
  module Dot :
    sig
      type graph = DGraphModel.DotG.t
      type vertex = DGraphModel.DotG.V.t
      type edge = DGraphModel.DotG.E.t
      module Tree :
        sig
          type t
          module V :
            sig
              type t
              val compare : t -> t -> int
              val hash : t -> int
              val equal : t -> t -> bool
              type label = vertex
              val create : label -> t
              val label : t -> label
            end
          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 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
        end
      module GView :
        sig
          type vertex = vertex
          type edge = edge
          type cluster = cluster
          val view :
            ?aa:bool ->
            ?delay_node:(vertex -> bool) ->
            ?delay_edge:(edge -> bool) ->
            ?delay_cluster:(cluster -> bool) ->
            ?border_width:int ->
            ?width:int ->
            ?height:int ->
            ?packing:(GObj.widget -> unit) ->
            ?show:bool ->
            (vertex, edge, cluster) DGraphModel.abstract_model ->
            (vertex, edge, cluster) DGraphView.view
        end
      module TView :
        sig
          type vertex = Tree.V.t
          type edge = Tree.E.t
          type cluster = cluster
          val view :
            ?aa:bool ->
            ?delay_node:(vertex -> bool) ->
            ?delay_edge:(edge -> bool) ->
            ?delay_cluster:(cluster -> bool) ->
            ?border_width:int ->
            ?width:int ->
            ?height:int ->
            ?packing:(GObj.widget -> unit) ->
            ?show:bool ->
            (vertex, edge, cluster) DGraphModel.abstract_model ->
            (vertex, edge, cluster) DGraphView.view
        end
      type global_view = (vertex, edge, cluster) DGraphView.view
      type tree_view = (Tree.V.t, Tree.E.t, cluster) DGraphView.view
      class view_container :
        ?packing:(GObj.widget -> unit) ->
        ?status:status ->
        ?default_callbacks:bool ->
        mk_global_view:(unit -> global_view) ->
        mk_tree_view:(depth_backward:int ->
                      depth_forward:int ->
                      Gtk.widget Gtk.obj -> vertex -> tree_view) ->
        vertex option ->
        [vertex, edge, cluster, Tree.V.t, Tree.E.t, cluster]
        view_container_type
      val from_dot :
        ?packing:(GObj.widget -> unit) ->
        ?status:DGraphContainer.status ->
        ?default_callbacks:bool ->
        ?mk_global_view:((DGraphModel.DotG.V.t, DGraphModel.DotG.E.t,
                          DGraphModel.cluster)
                         DGraphModel.abstract_model -> global_view) ->
        ?mk_tree_view:((Tree.V.t, Tree.E.t, DGraphModel.cluster)
                       DGraphModel.abstract_model -> tree_view) ->
        string -> view_container
      val from_dot_with_commands :
        ?packing:(GObj.widget -> unit) ->
        ?status:DGraphContainer.status ->
        ?default_callbacks:bool ->
        ?mk_global_view:((DGraphModel.DotG.V.t, DGraphModel.DotG.E.t,
                          DGraphModel.cluster)
                         DGraphModel.abstract_model -> global_view) ->
        ?mk_tree_view:((Tree.V.t, Tree.E.t, DGraphModel.cluster)
                       DGraphModel.abstract_model -> tree_view) ->
        string -> GPack.table * view_container
    end
end