sig
  type color = int
  type arrow_style =
    [ `Dot | `Inv | `Invdot | `Invodot | `None | `Normal | `Odot ]
  module CommonAttributes :
    sig
      type graph =
        [ `Center of bool
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Label of string
        | `Orientation of [ `Landscape | `Portrait ]
        | `Page of float * float
        | `Pagedir of [ `LeftToRight | `TopToBottom ]
        | `Size of float * float ]
      type vertex =
        [ `Color of Graphviz.color
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Height of float
        | `Label of string
        | `Orientation of float
        | `Peripheries of int
        | `Regular of bool
        | `Shape of
            [ `Box
            | `Circle
            | `Diamond
            | `Doublecircle
            | `Ellipse
            | `Plaintext
            | `Polygon of int * float
            | `Record ]
        | `Style of [ `Bold | `Dashed | `Dotted | `Filled | `Invis | `Solid ]
        | `Width of float ]
      type edge =
        [ `Color of Graphviz.color
        | `Decorate of bool
        | `Dir of [ `Back | `Both | `Forward | `None ]
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Label of string
        | `Labelfontcolor of Graphviz.color
        | `Labelfontname of string
        | `Labelfontsize of int
        | `Style of [ `Bold | `Dashed | `Dotted | `Invis | `Solid ] ]
    end
  module DotAttributes :
    sig
      type graph =
        [ `Bgcolor of Graphviz.color
        | `Center of bool
        | `Comment of string
        | `Concentrate of bool
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontpath of string
        | `Fontsize of int
        | `Label of string
        | `Layers of string list
        | `Margin of float
        | `Mclimit of float
        | `Nodesep of float
        | `Nslimit of int
        | `Nslimit1 of int
        | `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
        | `Comment of string
        | `Distortion of float
        | `Fillcolor of Graphviz.color
        | `Fixedsize of bool
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Height of float
        | `Label of string
        | `Layer of string
        | `Orientation of float
        | `Peripheries of int
        | `Regular of bool
        | `Shape of
            [ `Box
            | `Circle
            | `Diamond
            | `Doublecircle
            | `Ellipse
            | `Plaintext
            | `Polygon of int * float
            | `Record ]
        | `Style of [ `Bold | `Dashed | `Dotted | `Filled | `Invis | `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
        | `Comment of string
        | `Constraints 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
        | `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
        | `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 ]
    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 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
        | `Label of string
        | `Margin of float * float
        | `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
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Height of float
        | `Label of string
        | `Orientation of float
        | `Peripheries of int
        | `Pos of float * float
        | `Regular of bool
        | `Shape of
            [ `Box
            | `Circle
            | `Diamond
            | `Doublecircle
            | `Ellipse
            | `Plaintext
            | `Polygon of int * float
            | `Record ]
        | `Style of [ `Bold | `Dashed | `Dotted | `Filled | `Invis | `Solid ]
        | `Width of float ]
      type edge =
        [ `Color of Graphviz.color
        | `Decorate of bool
        | `Dir of [ `Back | `Both | `Forward | `None ]
        | `Fontcolor of Graphviz.color
        | `Fontname of string
        | `Fontsize of int
        | `Id of string
        | `Label of string
        | `Labelfontcolor of Graphviz.color
        | `Labelfontname of string
        | `Labelfontsize of int
        | `Len of float
        | `Style of [ `Bold | `Dashed | `Dotted | `Invis | `Solid ]
        | `Weight of float ]
    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 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