sig
  type color = int
  type color_with_transparency = int32
  val color_to_color_with_transparency :
    Graphviz.color -> Graphviz.color_with_transparency
  type arrow_style =
      [ `Dot | `Inv | `Invdot | `Invodot | `None | `Normal | `Odot ]
  module type ATTRIBUTES =
    sig
      type graph
      type vertex
      type edge
      type subgraph = {
        sg_name : string;
        sg_attributes : Graphviz.ATTRIBUTES.vertex list;
        sg_parent : string option;
      }
    end
  module CommonAttributes :
    sig
      type graph =
          [ `Center of bool
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `HtmlLabel of string
          | `Label of string
          | `OrderingOut
          | `Orientation of [ `Landscape | `Portrait ]
          | `Page of float * float
          | `Pagedir of [ `LeftToRight | `TopToBottom ]
          | `Size of float * float ]
      type vertex =
          [ `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `Height of float
          | `HtmlLabel of string
          | `Label of string
          | `Orientation of float
          | `Penwidth of float
          | `Peripheries of int
          | `Regular of bool
          | `Shape of
              [ `Assembly
              | `Box
              | `Box3d
              | `Cds
              | `Circle
              | `Component
              | `Diamond
              | `Doublecircle
              | `Doubleoctagon
              | `Egg
              | `Ellipse
              | `Fivepoverhang
              | `Folder
              | `House
              | `Insulator
              | `Invhouse
              | `Invtrapezium
              | `Invtriangle
              | `Larrow
              | `Lpromoter
              | `Mcircle
              | `Mdiamond
              | `Msquare
              | `Note
              | `Noverhang
              | `Oval
              | `Parallelogram
              | `Plaintext
              | `Polygon of int * float
              | `Primersite
              | `Promoter
              | `Proteasesite
              | `Proteinstab
              | `Rarrow
              | `Record
              | `Restrictionsite
              | `Ribosite
              | `Rnastab
              | `Rpromoter
              | `Signature
              | `Star
              | `Tab
              | `Terminator
              | `Threepoverhang
              | `Trapezium
              | `Triangle
              | `Tripleoctagon
              | `Underline
              | `Utr ]
          | `Style of
              [ `Bold
              | `Dashed
              | `Dotted
              | `Filled
              | `Invis
              | `Rounded
              | `Solid ]
          | `Width of float ]
      type edge =
          [ `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Decorate of bool
          | `Dir of [ `Back | `Both | `Forward | `None ]
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `HtmlLabel of string
          | `Label of string
          | `Labelfontcolor of Graphviz.color
          | `Labelfontname of string
          | `Labelfontsize of int
          | `Penwidth of float
          | `Style of [ `Bold | `Dashed | `Dotted | `Invis | `Solid ] ]
    end
  module DotAttributes :
    sig
      type graph =
          [ `Bgcolor of Graphviz.color
          | `BgcolorWithTransparency of Graphviz.color_with_transparency
          | `Center of bool
          | `Comment of string
          | `Concentrate of bool
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontpath of string
          | `Fontsize of int
          | `HtmlLabel of string
          | `Label of string
          | `Layers of string list
          | `Margin of float
          | `Mclimit of float
          | `Nodesep of float
          | `Nslimit of int
          | `Nslimit1 of int
          | `OrderingOut
          | `Orientation of [ `Landscape | `Portrait ]
          | `Page of float * float
          | `Pagedir of [ `LeftToRight | `TopToBottom ]
          | `Quantum of float
          | `Rankdir of [ `LeftToRight | `TopToBottom ]
          | `Ranksep of float
          | `Ratio of [ `Auto | `Compress | `Fill | `Float of float ]
          | `Samplepoints of int
          | `Size of float * float
          | `Url of string ]
      type vertex =
          [ `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Comment of string
          | `Distortion of float
          | `Fillcolor of Graphviz.color
          | `FillcolorWithTransparency of Graphviz.color_with_transparency
          | `Fixedsize of bool
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `Height of float
          | `HtmlLabel of string
          | `Label of string
          | `Layer of string
          | `Orientation of float
          | `Penwidth of float
          | `Peripheries of int
          | `Regular of bool
          | `Shape of
              [ `Assembly
              | `Box
              | `Box3d
              | `Cds
              | `Circle
              | `Component
              | `Diamond
              | `Doublecircle
              | `Doubleoctagon
              | `Egg
              | `Ellipse
              | `Fivepoverhang
              | `Folder
              | `House
              | `Insulator
              | `Invhouse
              | `Invtrapezium
              | `Invtriangle
              | `Larrow
              | `Lpromoter
              | `Mcircle
              | `Mdiamond
              | `Msquare
              | `Note
              | `Noverhang
              | `Oval
              | `Parallelogram
              | `Plaintext
              | `Polygon of int * float
              | `Primersite
              | `Promoter
              | `Proteasesite
              | `Proteinstab
              | `Rarrow
              | `Record
              | `Restrictionsite
              | `Ribosite
              | `Rnastab
              | `Rpromoter
              | `Signature
              | `Star
              | `Tab
              | `Terminator
              | `Threepoverhang
              | `Trapezium
              | `Triangle
              | `Tripleoctagon
              | `Underline
              | `Utr ]
          | `Style of
              [ `Bold
              | `Dashed
              | `Dotted
              | `Filled
              | `Invis
              | `Rounded
              | `Solid ]
          | `Url of string
          | `Width of float
          | `Z of float ]
      type edge =
          [ `Arrowhead of Graphviz.arrow_style
          | `Arrowsize of float
          | `Arrowtail of Graphviz.arrow_style
          | `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Comment of string
          | `Constraint of bool
          | `Decorate of bool
          | `Dir of [ `Back | `Both | `Forward | `None ]
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `Headlabel of string
          | `Headport of [ `E | `N | `NE | `NW | `S | `SE | `SW | `W ]
          | `Headurl of string
          | `HtmlLabel of string
          | `Label of string
          | `Labelangle of float
          | `Labeldistance of float
          | `Labelfloat of bool
          | `Labelfontcolor of Graphviz.color
          | `Labelfontname of string
          | `Labelfontsize of int
          | `Layer of string
          | `Minlen of int
          | `Penwidth of float
          | `Samehead of string
          | `Sametail of string
          | `Style of [ `Bold | `Dashed | `Dotted | `Invis | `Solid ]
          | `Taillabel of string
          | `Tailport of [ `E | `N | `NE | `NW | `S | `SE | `SW | `W ]
          | `Tailurl of string
          | `Weight of int ]
      type subgraph = {
        sg_name : string;
        sg_attributes : Graphviz.DotAttributes.vertex list;
        sg_parent : string option;
      }
    end
  module type GraphWithDotAttrs =
    sig
      type t
      module V : 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 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 -> Graphviz.DotAttributes.graph list
      val default_vertex_attributes : t -> Graphviz.DotAttributes.vertex list
      val vertex_name : V.t -> string
      val vertex_attributes : V.t -> Graphviz.DotAttributes.vertex list
      val default_edge_attributes : t -> Graphviz.DotAttributes.edge list
      val edge_attributes : E.t -> Graphviz.DotAttributes.edge list
      val get_subgraph : V.t -> Graphviz.DotAttributes.subgraph option
    end
  module Dot :
    functor
      (X : sig
             type t
             module V : sig type t end
             module E :
               sig
                 type t
                 val src : Graphviz.Dot.E.t -> Graphviz.Dot.V.t
                 val dst : Graphviz.Dot.E.t -> Graphviz.Dot.V.t
               end
             val iter_vertex :
               (Graphviz.Dot.V.t -> unit) -> Graphviz.Dot.t -> unit
             val iter_edges_e :
               (Graphviz.Dot.E.t -> unit) -> Graphviz.Dot.t -> unit
             val graph_attributes :
               Graphviz.Dot.t -> Graphviz.DotAttributes.graph list
             val default_vertex_attributes :
               Graphviz.Dot.t -> Graphviz.DotAttributes.vertex list
             val vertex_name : Graphviz.Dot.V.t -> string
             val vertex_attributes :
               Graphviz.Dot.V.t -> Graphviz.DotAttributes.vertex list
             val get_subgraph :
               Graphviz.Dot.V.t -> Graphviz.DotAttributes.subgraph option
             val default_edge_attributes :
               Graphviz.Dot.t -> Graphviz.DotAttributes.edge list
             val edge_attributes :
               Graphviz.Dot.E.t -> Graphviz.DotAttributes.edge list
           end->
      sig
        val fprint_graph : Format.formatter -> X.t -> unit
        val output_graph : Pervasives.out_channel -> X.t -> unit
      end
  module NeatoAttributes :
    sig
      type graph =
          [ `Center of bool
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `HtmlLabel of string
          | `Label of string
          | `Margin of float * float
          | `OrderingOut
          | `Orientation of [ `Landscape | `Portrait ]
          | `Overlap of bool
          | `Page of float * float
          | `Pagedir of [ `LeftToRight | `TopToBottom ]
          | `Sep of float
          | `Size of float * float
          | `Spline of bool
          | `Start of int ]
      type vertex =
          [ `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `Height of float
          | `HtmlLabel of string
          | `Label of string
          | `Orientation of float
          | `Penwidth of float
          | `Peripheries of int
          | `Pos of float * float
          | `Regular of bool
          | `Shape of
              [ `Assembly
              | `Box
              | `Box3d
              | `Cds
              | `Circle
              | `Component
              | `Diamond
              | `Doublecircle
              | `Doubleoctagon
              | `Egg
              | `Ellipse
              | `Fivepoverhang
              | `Folder
              | `House
              | `Insulator
              | `Invhouse
              | `Invtrapezium
              | `Invtriangle
              | `Larrow
              | `Lpromoter
              | `Mcircle
              | `Mdiamond
              | `Msquare
              | `Note
              | `Noverhang
              | `Oval
              | `Parallelogram
              | `Plaintext
              | `Polygon of int * float
              | `Primersite
              | `Promoter
              | `Proteasesite
              | `Proteinstab
              | `Rarrow
              | `Record
              | `Restrictionsite
              | `Ribosite
              | `Rnastab
              | `Rpromoter
              | `Signature
              | `Star
              | `Tab
              | `Terminator
              | `Threepoverhang
              | `Trapezium
              | `Triangle
              | `Tripleoctagon
              | `Underline
              | `Utr ]
          | `Style of
              [ `Bold
              | `Dashed
              | `Dotted
              | `Filled
              | `Invis
              | `Rounded
              | `Solid ]
          | `Width of float ]
      type edge =
          [ `Color of Graphviz.color
          | `ColorWithTransparency of Graphviz.color_with_transparency
          | `Decorate of bool
          | `Dir of [ `Back | `Both | `Forward | `None ]
          | `Fontcolor of Graphviz.color
          | `Fontname of string
          | `Fontsize of int
          | `HtmlLabel of string
          | `Id of string
          | `Label of string
          | `Labelfontcolor of Graphviz.color
          | `Labelfontname of string
          | `Labelfontsize of int
          | `Len of float
          | `Penwidth of float
          | `Style of [ `Bold | `Dashed | `Dotted | `Invis | `Solid ]
          | `Weight of float ]
      type subgraph = {
        sg_name : string;
        sg_attributes : Graphviz.NeatoAttributes.vertex list;
        sg_parent : string option;
      }
    end
  module Neato :
    functor
      (X : sig
             type t
             module V : sig type t end
             module E :
               sig
                 type t
                 val src : Graphviz.Neato.E.t -> Graphviz.Neato.V.t
                 val dst : Graphviz.Neato.E.t -> Graphviz.Neato.V.t
               end
             val iter_vertex :
               (Graphviz.Neato.V.t -> unit) -> Graphviz.Neato.t -> unit
             val iter_edges_e :
               (Graphviz.Neato.E.t -> unit) -> Graphviz.Neato.t -> unit
             val graph_attributes :
               Graphviz.Neato.t -> Graphviz.NeatoAttributes.graph list
             val default_vertex_attributes :
               Graphviz.Neato.t -> Graphviz.NeatoAttributes.vertex list
             val vertex_name : Graphviz.Neato.V.t -> string
             val vertex_attributes :
               Graphviz.Neato.V.t -> Graphviz.NeatoAttributes.vertex list
             val get_subgraph :
               Graphviz.Neato.V.t -> Graphviz.NeatoAttributes.subgraph option
             val default_edge_attributes :
               Graphviz.Neato.t -> Graphviz.NeatoAttributes.edge list
             val edge_attributes :
               Graphviz.Neato.E.t -> Graphviz.NeatoAttributes.edge list
           end->
      sig
        val set_command : string -> unit
        exception Error of string
        val handle_error : ('-> 'b) -> '-> 'b
        val fprint_graph : Format.formatter -> X.t -> unit
        val output_graph : Pervasives.out_channel -> X.t -> unit
      end
end