sig
  type cluster = string
  module Make :
    functor (Tree : Graph.Graphviz.GraphWithDotAttrs->
      functor
        (TreeManipulation : sig val is_ghost_node : Tree.V.t -> bool end->
        sig
          val from_tree :
            [> `widget ] Gtk.obj ->
            Tree.t -> Tree.V.t -> XDot.Make(Tree).graph_layout
        end
  module MakeFromDotModel :
    functor
      (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 = DGraphModel.DotG.V.t
                    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 = unit
                    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->
      functor
        (TreeManipulation : sig val is_ghost_node : Tree.V.t -> bool end->
        sig
          module Tree :
            sig
              type t = Tree.t
              module V :
                sig
                  type t = Tree.V.t
                  val compare : t -> t -> int
                  val hash : t -> int
                  val equal : t -> t -> bool
                  type label = DGraphModel.DotG.V.t
                  val create : label -> t
                  val label : t -> label
                end
              type vertex = V.t
              module E :
                sig
                  type t = Tree.E.t
                  val compare : t -> t -> int
                  type vertex = Tree.vertex
                  val src : t -> vertex
                  val dst : t -> vertex
                  type label = unit
                  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 from_model :
            DGraphTreeLayout.MakeFromDotModel.Tree.t ->
            DGraphTreeLayout.MakeFromDotModel.Tree.V.t ->
            DGraphModel.dotg_model -> XDot.Make(Tree).graph_layout
        end
end