sig
  type tip_info = { tip_line_width : float; is_double : bool; }
  type info = {
    tip_info : Diagrams.Edge.tip_info;
    start : Diagrams.Gentity.t;
    finish : Diagrams.Gentity.t;
    params : RawContent.path_param;
    given_curve : Diagrams.Curve.t;
    underlying_curve : Diagrams.Curve.t;
    curves : (RawContent.path_param * Diagrams.Curve.t) list;
    decorations : Diagrams.Edge.decoration list;
    z_curve : float array list;
    anchor : Diagrams.anchor -> Diagrams.Point.t;
  }
  and decoration =
      Curve of RawContent.path_param * Diagrams.Curve.t
    | Node of Diagrams.Node.t
  val evaluate_z : Diagrams.Edge.info -> int * float -> float
  val evaluate_z_global : Diagrams.Edge.info -> float -> float
  type t = Diagrams.Edge.info
  type edge_transfo = Diagrams.Edge.info -> Diagrams.Edge.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
  val default_tip_info : Diagrams.Edge.tip_info
  val default_params : RawContent.path_param
  val default_edge_info :
    Diagrams.Gentity.t ->
    Diagrams.Gentity.t -> Diagrams.Curve.t -> Diagrams.Edge.info
  val empty : Diagrams.Edge.info
  val transform :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Gentity.t ->
    Diagrams.Gentity.t -> Diagrams.Curve.t -> Diagrams.Edge.info
  val outer_curve : '-> '-> 'b
  type continue_path_spec = Diagrams.Point.t list
  and path_spec = Diagrams.Edge.continue_path_spec list
  val point_lists_of_path_spec : '-> 'a list list -> 'a list list
  type controls = Diagrams.Edge.continue_path_spec * Diagrams.Point.t list
  val point_lists_of_edge_spec_rec :
    'a list list -> '-> '-> 'a list list -> 'a list list
  val point_lists_of_edge_spec :
    Diagrams.Gentity.t ->
    Diagrams.Point.t list list ->
    Diagrams.Gentity.t -> Diagrams.Point.t list list
  val decoration_to_contents :
    '-> Diagrams.Edge.decoration -> RawContent.raw list
  val to_contents : Diagrams.Edge.info -> RawContent.raw list
  val to_gentity : Diagrams.Edge.info -> Diagrams.Gentity.t
  val paramsOf : RawContent.path_param -> Transfo.Style.t
  val params_pet : Transfo.Pet.t
  val dashed : float list -> Diagrams.Edge.Transfo.Style.t
  val fill : Color.color -> Diagrams.Edge.Transfo.Style.t
  val color : Color.color -> Diagrams.Edge.Transfo.Style.t
  val noStroke : Diagrams.Edge.Transfo.Style.t
  val black : Diagrams.Edge.Transfo.Style.t
  val lineWidth : float -> Diagrams.Edge.Transfo.Style.t
  val do_clip :
    (float array * float array) list ->
    Diagrams.Gentity.t ->
    Diagrams.Gentity.t -> (float array * float array) list
  val clip : Transfo.Style.t
  val clip_pet : Transfo.Pet.t
  val draw : Transfo.Style.t
  val draw_pet : Transfo.Pet.t
  val do_squiggle :
    int ->
    float -> float array * float array -> (float array * float array) list
  val squiggle : int -> float -> float -> float -> Transfo.Style.t
  val squiggle_pet : Transfo.Pet.t
  val shorten : float -> float -> Transfo.Style.t
  val shorten_pet : Transfo.Pet.t
  val shortenS : float -> Diagrams.Edge.Transfo.Style.t
  val shortenE : float -> Diagrams.Edge.Transfo.Style.t
  val zs : float array list -> Transfo.Style.t
  val zs_pet : Transfo.Pet.t
  val double : float -> Transfo.Style.t
  val double_pet : Transfo.Pet.t
  val fontArrowHeadCurves :
    Document.environment -> (float array * float array) list list * float
  val fontArrowHead :
    float * float ->
    float ->
    '->
    Diagrams.Edge.tip_info ->
    RawContent.path_param ->
    (float array * float array) list list ->
    float -> (float array * float array) list
  val cliptip :
    ?reverse:bool ->
    float * float ->
    Diagrams.Edge.info ->
    (float array * float array) list ->
    (float array * float array) list -> (float array * float array) list
  val base_arrow :
    Document.environment ->
    ?head_or_tail:bool -> Diagrams.Edge.info -> Diagrams.Edge.info
  val arrowOf : Document.environment -> Transfo.Style.t
  val arrow_head_pet : Transfo.Pet.t
  val arrow : Document.environment -> Diagrams.Edge.Transfo.Style.t
  val backArrowOf : Document.environment -> Transfo.Style.t
  val backArrow_head_pet : Transfo.Pet.t
  val arrow' : Document.environment -> Diagrams.Edge.Transfo.Style.t
  val bothArrowOf : Document.environment -> Transfo.Style.t
  val bothArrow_head_pet : Transfo.Pet.t
  val dblArrow : Document.environment -> Diagrams.Edge.Transfo.Style.t
  val modToOf : float -> float -> Document.environment -> Transfo.Style.t
  val mod_to_of_pet : Transfo.Pet.t
  val modTo : Document.environment -> Diagrams.Edge.Transfo.Style.t
  val bendOf : float -> Transfo.Style.t
  val bend_pet : Transfo.Pet.t
  val bendLeft : float -> Diagrams.Edge.Transfo.Style.t
  val bendRight : float -> Diagrams.Edge.Transfo.Style.t
  val foreground :
    ?shortens:float ->
    ?shortene:float -> ?color:Color.color -> float -> Transfo.Style.t
  val foreground_pet : Transfo.Pet.t
  val make_anchors : Transfo.Style.t
  val make_anchors_pet : Transfo.Pet.t
  val label :
    Document.environment ->
    ?pos:anchor ->
    ?style:Node.Transfo.Style.t list ->
    Document.content list -> Transfo.Style.t
  val label_pet : Transfo.Pet.t
  val label_anchor :
    Diagrams.anchor ->
    Document.environment ->
    ?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 above :
    Document.environment ->
    ?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 below :
    Document.environment ->
    ?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 left :
    Document.environment ->
    ?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 right :
    Document.environment ->
    ?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 aboveL :
    Document.environment ->
    ?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 aboveR :
    Document.environment ->
    ?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 belowL :
    Document.environment ->
    ?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 belowR :
    Document.environment ->
    ?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 labelOn :
    Document.environment ->
    ?style:Diagrams.Node.Transfo.Style.t list ->
    Document.environment ->
    ?pos:Diagrams.anchor ->
    ?shape:Diagrams.Node.Transfo.Style.t ->
    Document.content list -> Diagrams.Edge.Transfo.Style.t
  val raw_edge :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Gentity.t ->
    Diagrams.Gentity.t -> Diagrams.Curve.t -> Diagrams.Edge.info
  val path_of_curve :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Curve.t -> Diagrams.Edge.info
  val path :
    Diagrams.Edge.Transfo.Style.t list ->
    float * float -> (float * float) list list -> Diagrams.Edge.info
  val polyLine :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Node.info list -> Diagrams.Edge.info
  val of_gentities :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Gentity.t ->
    ?controls:Diagrams.Point.t list list ->
    Diagrams.Gentity.t -> Diagrams.Edge.info
  val make :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Node.info ->
    ?controls:Diagrams.Point.t list list ->
    Diagrams.Node.info -> Diagrams.Edge.info
  val makes :
    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 make_3d :
    Diagrams.Edge.Transfo.Style.t list ->
    Diagrams.Node.info ->
    ?projection:Proj3d.projection ->
    ?controls:Diagrams.Point.t list list ->
    ?controls3d:(float * float * float) list list ->
    Diagrams.Node.info -> Diagrams.Edge.info
  val makes_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 restrict :
    Diagrams.Edge.info -> int * float -> int * float -> Diagrams.Edge.info
  val put_forth :
    Diagrams.Edge.info ->
    int * float -> ?color:Color.color -> float -> float -> Diagrams.Edge.info
end