sig
  type 'a matrix = 'a array array
  val map : ('-> 'b) -> 'a array array -> 'b array array
  val mapi : (int -> int -> '-> 'b) -> 'a array array -> 'b array array
  type info = {
    mainNode : Diagrams.Node.info;
    common : Diagrams.Node.Transfo.Style.t list;
    nodes : Diagrams.Node.info Diagrams.Matrix.matrix;
    placement : Diagrams.Matrix.info -> int -> int -> Diagrams.Point.t;
  }
  type t = Diagrams.Matrix.info
  module Transfo :
    sig
      module rec Style :
        sig
          type t = { pet : Pet.t; transfo : transfo; }
          and transfo = info -> info
        end
      and Pet :
        sig
          type t
          val name : t -> string
          val append : t -> Style.t list -> Style.t -> Style.t list
          val ( = ) : t -> t -> bool
          val register :
            ?depends:t list ->
            ?codepends:t list ->
            ?append:(Style.t list -> Style.t -> Style.t list) ->
            string -> (t -> 'a) -> 'a * t
          module Map :
            sig
              type key = t
              type +'a t
              val empty : 'a t
              val is_empty : 'a t -> bool
              val mem : key -> 'a t -> bool
              val add : key -> '-> 'a t -> 'a t
              val singleton : key -> '-> 'a t
              val remove : key -> 'a t -> 'a t
              val merge :
                (key -> 'a option -> 'b option -> 'c option) ->
                'a t -> 'b t -> 'c t
              val union :
                (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t
              val compare : ('-> '-> int) -> 'a t -> 'a t -> int
              val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
              val iter : (key -> '-> unit) -> 'a t -> unit
              val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
              val for_all : (key -> '-> bool) -> 'a t -> bool
              val exists : (key -> '-> bool) -> 'a t -> bool
              val filter : (key -> '-> bool) -> 'a t -> 'a t
              val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
              val cardinal : 'a t -> int
              val bindings : 'a t -> (key * 'a) list
              val min_binding : 'a t -> key * 'a
              val min_binding_opt : 'a t -> (key * 'a) option
              val max_binding : 'a t -> key * 'a
              val max_binding_opt : 'a t -> (key * 'a) option
              val choose : 'a t -> key * 'a
              val choose_opt : 'a t -> (key * 'a) option
              val split : key -> 'a t -> 'a t * 'a option * 'a t
              val find : key -> 'a t -> 'a
              val find_opt : key -> 'a t -> 'a option
              val find_first : (key -> bool) -> 'a t -> key * 'a
              val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
              val find_last : (key -> bool) -> 'a t -> key * 'a
              val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
              val map : ('-> 'b) -> 'a t -> 'b t
              val mapi : (key -> '-> 'b) -> 'a t -> 'b t
            end
        end
      val transform : Style.t list -> info -> info
    end
  module T = Transfo
  module S = T.Style
  val default_matrix_node_anchor : [> `Base ]
  val default_matrix_node_style :
    Document.environment -> Diagrams.Node.Transfo.Style.t list
  val between_centers : float -> float -> '-> int -> int -> float * float
  val default : Document.environment -> Diagrams.Matrix.info
  val nodes_contents : Diagrams.Matrix.info -> RawContent.raw list
  val to_contents : Diagrams.Matrix.info -> RawContent.raw list
  val allNodes : Node.Transfo.Style.t list -> S.t
  val all_nodes_pet : T.Pet.t
  val make_node_array :
    Diagrams.Node.Transfo.Style.t list ->
    int ->
    int ->
    Diagrams.Node.Transfo.Style.t list list list ->
    Diagrams.Node.info array array
  val makeNodes : Node.Transfo.Style.t list list list -> S.t
  val make_nodes_pet : T.Pet.t
  val contents_output :
    (Diagrams.Node.Transfo.Style.t list * RawContent.raw list) list list ->
    S.t
  val contents_box :
    Document.environment ->
    (Diagrams.Node.Transfo.Style.t list * Box.box list) list list -> S.t
  val contents :
    Document.environment ->
    (Diagrams.Node.Transfo.Style.t list * Document.content list) list list ->
    S.t
  val placement : (info -> int -> int -> Point.t) -> S.t
  val placement_pet : T.Pet.t
  val makePlacement : S.t
  val make_placement_pet : T.Pet.t
  val setZ : (Node.info -> int -> int -> float) -> S.t
  val set_z_pet : T.Pet.t
  val mk_matrix_anchor :
    (Diagrams.Matrix.info -> float * float) ->
    Diagrams.Matrix.info -> float * float
  val matrixAnchor :
    int -> int -> Diagrams.anchor -> Diagrams.Matrix.info -> Diagrams.Point.t
  val matrixLine : Diagrams.Matrix.info -> float * float
  val matrixFirstLine : Diagrams.Matrix.info -> float * float
  val matrixBase : Diagrams.Matrix.info -> float * float
  val matrixCenter : Diagrams.Matrix.info -> float * float
  val mainNode :
    ?matrix_anchor:(info -> Point.t) -> Node.Transfo.Style.t list -> S.t
  val main_node_pet : T.Pet.t
  val mainAnchor : (info -> float * float) -> S.t
  val main_anchor_pet : T.Pet.t
  val centers : float -> float -> S.t
  val transform_matrix :
    Document.environment ->
    T.Style.t list ->
    (Diagrams.Node.Transfo.Style.t list * Document.content list) list list ->
    Diagrams.Matrix.info -> Diagrams.Matrix.info
  val make :
    Document.environment ->
    T.Style.t list ->
    (Diagrams.Node.Transfo.Style.t list * Document.content list) list list ->
    Diagrams.Matrix.info
  val make_simple :
    Document.environment ->
    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 translate :
    float * float -> Diagrams.Matrix.info -> Diagrams.Matrix.info
end