functor (Args : sig val env : Document.environment end->
  sig
    val stack : Diagrams.entity list Pervasives.ref
    val env : Document.environment
    val compute_intersections :
      (Diagrams.Edge.info ->
       int * float -> float -> float -> Diagrams.Edge.info)
      option Pervasives.ref
    val epsilon : float Pervasives.ref
    val margin : float Pervasives.ref
    val t_margin : float Pervasives.ref
    val node :
      Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Node.info
    val coordinate : Diagrams.Point.t -> Diagrams.Node.info
    val edge :
      Diagrams.Edge.Transfo.Style.t list ->
      Diagrams.Node.info ->
      ?controls:Diagrams.Point.t list list ->
      Diagrams.Node.info -> Diagrams.Edge.info
    val edges :
      Diagrams.Edge.Transfo.Style.t list ->
      (Diagrams.Edge.Transfo.Style.t list * Diagrams.Node.info *
       Diagrams.Point.t list list * Diagrams.Node.info)
      list -> Diagrams.Edge.info list
    val path :
      Diagrams.Edge.Transfo.Style.t list ->
      float * float -> (float * float) list list -> Diagrams.Edge.info
    val raw : float * float -> RawContent.raw list -> Diagrams.Entity.raw
    val edge_3d :
      Diagrams.Edge.Transfo.Style.t list ->
      Diagrams.Node.info ->
      ?controls:Diagrams.Point.t list list ->
      ?controls3d:(float * float * float) list list ->
      ?projection:Proj3d.projection ->
      Diagrams.Node.info -> Diagrams.Edge.info
    val edges_3d :
      Diagrams.Edge.Transfo.Style.t list ->
      ?projection:Proj3d.projection ->
      (Diagrams.Edge.Transfo.Style.t list * Diagrams.Node.info *
       Diagrams.Point.t list list * (float * float * float) list list *
       Diagrams.Node.info)
      list -> Diagrams.Edge.info list
    val matrix_full :
      Matrix.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Document.content list) list list ->
      Diagrams.Matrix.info
    val math_matrix_full :
      Matrix.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Maths.math list) list list ->
      Diagrams.Matrix.info
    val matrix :
      Matrix.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Document.content list) list list ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
    val math_matrix :
      Matrix.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Maths.math list) list list ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
    val matrix_3d_full :
      Matrix3d.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Document.content list) list list
      list -> Diagrams.Matrix3d.info
    val matrix_3d_project :
      Diagrams.Matrix3d.info ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix array
    val matrix_3d :
      Matrix3d.T.Style.t list ->
      (Diagrams.Node.Transfo.Style.t list * Document.content list) list list
      list ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix array
    val all_intersections :
      Diagrams.Entity.t list ->
      (Diagrams.Edge.t * Diagrams.Edge.t *
       ((int * float * Bezier.curve) * (int * float * Bezier.curve)))
      list
    val add_intersections :
      (Diagrams.Edge.t -> int * float -> float -> float -> Diagrams.Edge.t) ->
      unit
    val spit_stack : unit -> Diagrams.entity list
    val spit_stack_with_intersections : unit -> Diagrams.entity list
    val include_diagram : Diagrams.entity list -> unit
    val make :
      ?offset:float ->
      ?adjust_before:bool ->
      ?hcenter:bool ->
      ?vcenter:bool -> ?width_fixed:bool -> unit -> Box.drawingBox
    val defaultLabelStyle : Diagrams.Node.Transfo.Style.t list
    val label_anchor :
      Diagrams.anchor ->
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labela :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelb :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labell :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelr :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelal :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelar :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelbl :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val labelbr :
      ?pos:Diagrams.anchor ->
      ?shape:Diagrams.Node.Transfo.Style.t ->
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Document.content list -> Diagrams.Edge.Transfo.Style.t
    val label_edge :
      Diagrams.Edge.info ->
      Diagrams.Node.Transfo.Style.t list ->
      float -> Document.content list -> Diagrams.Node.info
    val label_edge_anchor :
      Diagrams.Edge.info ->
      Diagrams.anchor -> float -> Document.content list -> Diagrams.Node.info
    val label_edgea :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgeb :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgel :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edger :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgebr :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgebl :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgear :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgeal :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val label_edgec :
      ?style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.Edge.info -> Document.content list -> Diagrams.Node.info
    val edge_anchor :
      Diagrams.Node.info ->
      Diagrams.Node.info ->
      Diagrams.Edge.Transfo.Style.t list ->
      Diagrams.anchor ->
      float ->
      Document.content list -> Diagrams.Edge.info * Diagrams.Node.info
    val edges_anchor :
      (Diagrams.Node.info * Diagrams.Node.info *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor * float *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    val edges_anchor_mid :
      (Diagrams.Node.info * Diagrams.Node.info *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    val edge_anchor_of_gentities :
      Diagrams.Gentity.t ->
      Diagrams.Gentity.t ->
      Diagrams.Edge.Transfo.Style.t list ->
      Diagrams.anchor ->
      float ->
      Document.content list -> Diagrams.Edge.info * Diagrams.Node.info
    val edges_anchor_of_gentities :
      (Diagrams.Gentity.t * Diagrams.Gentity.t *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor * float *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    val edges_anchor_mid_of_gentities :
      (Diagrams.Gentity.t * Diagrams.Gentity.t *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    val edge_anchor_of_edges :
      Diagrams.Edge.info ->
      Diagrams.Edge.info ->
      Diagrams.Edge.Transfo.Style.t list ->
      Diagrams.anchor ->
      float ->
      Document.content list -> Diagrams.Edge.info * Diagrams.Node.info
    val edges_anchor_of_edges :
      (Diagrams.Edge.info * Diagrams.Edge.info *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor * float *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    val edges_anchor_mid_of_edges :
      (Diagrams.Edge.info * Diagrams.Edge.info *
       Diagrams.Edge.Transfo.Style.t list * Diagrams.anchor *
       Document.content list)
      list -> (Diagrams.Edge.info * Diagrams.Node.info) list
    module Arr :
      sig
        val fun_max : ?max:('-> '-> 'a) -> (int -> 'a) -> int -> 'a
        val node_width : Diagrams.Edge.info -> float
        val between_borders :
          (int -> float) ->
          (int -> float) ->
          Diagrams.anchor array ->
          (int -> int -> Diagrams.Node.Transfo.Style.t list) ->
          Diagrams.Matrix.info -> int -> int -> float * float
        module Make :
          functor
            (MkMatrix : sig
                          type t
                          val make_matrix :
                            Matrix.T.Style.t list ->
                            (Diagrams.Node.Transfo.Style.t list *
                             Diagrams.MakeDiagram.Arr.t list)
                            list list ->
                            Diagrams.Node.info *
                            Diagrams.Node.info Diagrams.Matrix.matrix
                        end->
            sig
              val array :
                Diagrams.anchor list ->
                ?vertical_padding:(int -> float) ->
                ?horizontal_padding:(int -> float) ->
                ?all_node_styles:Matrix.T.Style.t list ->
                ?matrix_anchor:(Diagrams.Matrix.info -> Diagrams.Point.t) ->
                ?main_node_style:Diagrams.Node.Transfo.Style.t list ->
                MkMatrix.t list list list ->
                Diagrams.Node.info *
                Diagrams.Node.info Diagrams.Matrix.matrix
            end
      end
    module MakeMathMatrix :
      sig
        type t = Maths.math
        val make_matrix :
          Matrix.T.Style.t list ->
          (Diagrams.Node.Transfo.Style.t list * Maths.math list) list list ->
          Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
      end
    module MakeMatrix :
      sig
        type t = Document.content
        val make_matrix :
          Matrix.T.Style.t list ->
          (Diagrams.Node.Transfo.Style.t list * Document.content list) list
          list ->
          Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
      end
    module MakeArray :
      sig
        val array :
          anchor list ->
          ?vertical_padding:(int -> float) ->
          ?horizontal_padding:(int -> float) ->
          ?all_node_styles:Matrix.T.Style.t list ->
          ?matrix_anchor:(Matrix.info -> Point.t) ->
          ?main_node_style:Node.Transfo.Style.t list ->
          MakeMathMatrix.t list list list ->
          Node.info * Node.info Matrix.matrix
      end
    module MakeTabular :
      sig
        val array :
          anchor list ->
          ?vertical_padding:(int -> float) ->
          ?horizontal_padding:(int -> float) ->
          ?all_node_styles:Matrix.T.Style.t list ->
          ?matrix_anchor:(Matrix.info -> Point.t) ->
          ?main_node_style:Node.Transfo.Style.t list ->
          MakeMatrix.t list list list -> Node.info * Node.info Matrix.matrix
      end
    val array :
      Diagrams.anchor list ->
      ?vertical_padding:(int -> float) ->
      ?horizontal_padding:(int -> float) ->
      ?all_node_styles:Matrix.T.Style.t list ->
      ?matrix_anchor:(Diagrams.Matrix.info -> Diagrams.Point.t) ->
      ?main_node_style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.MakeDiagram.MakeMathMatrix.t list list list ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
    val tabular :
      Diagrams.anchor list ->
      ?vertical_padding:(int -> float) ->
      ?horizontal_padding:(int -> float) ->
      ?all_node_styles:Matrix.T.Style.t list ->
      ?matrix_anchor:(Diagrams.Matrix.info -> Diagrams.Point.t) ->
      ?main_node_style:Diagrams.Node.Transfo.Style.t list ->
      Diagrams.MakeDiagram.MakeMatrix.t list list list ->
      Diagrams.Node.info * Diagrams.Node.info Diagrams.Matrix.matrix
  end