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