sig
  module Signature :
    sig
      type point
      type num
      module type Boxlike =
        sig
          type t
          val width : Mlpost.Signature.Boxlike.t -> Mlpost.Signature.num
          val height : Mlpost.Signature.Boxlike.t -> Mlpost.Signature.num
          val set_pos :
            Mlpost.Signature.point ->
            Mlpost.Signature.Boxlike.t -> Mlpost.Signature.Boxlike.t
        end
    end
  module Num :
    sig
      type t = Mlpost.Signature.num
      val of_float : float -> Mlpost.Num.t
      val bp : float -> Mlpost.Num.t
      val pt : float -> Mlpost.Num.t
      val cm : float -> Mlpost.Num.t
      val mm : float -> Mlpost.Num.t
      val inch : float -> Mlpost.Num.t
      val em : float -> Mlpost.Num.t
      val ex : float -> Mlpost.Num.t
      val addn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val subn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val multn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val multf : float -> Mlpost.Num.t -> Mlpost.Num.t
      val divf : Mlpost.Num.t -> float -> Mlpost.Num.t
      val neg : Mlpost.Num.t -> Mlpost.Num.t
      val divn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val maxn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val minn : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val gmean : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      val if_null :
        Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
      module Infix :
        sig
          val ( +/ ) : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
          val ( -/ ) : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
          val ( */ ) : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
          val ( // ) : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t
          val ( *./ ) : float -> Mlpost.Num.t -> Mlpost.Num.t
          val ( /./ ) : Mlpost.Num.t -> float -> Mlpost.Num.t
        end
      val zero : Mlpost.Num.t
      val one : Mlpost.Num.t
      val two : Mlpost.Num.t
      val pi : float
      val deg2rad : float -> float
      type scale = float -> Mlpost.Num.t
      module Scale :
        sig
          val bp : float -> Mlpost.Num.scale
          val pt : float -> Mlpost.Num.scale
          val cm : float -> Mlpost.Num.scale
          val mm : float -> Mlpost.Num.scale
          val inch : float -> Mlpost.Num.scale
        end
    end
  module Color :
    sig
      type t
      val default : Mlpost.Color.t
      val rgb : float -> float -> float -> Mlpost.Color.t
      val rgb8 : int -> int -> int -> Mlpost.Color.t
      val cmyk : float -> float -> float -> float -> Mlpost.Color.t
      val rgba : float -> float -> float -> float -> Mlpost.Color.t
      val rgb8a : int -> int -> int -> int -> Mlpost.Color.t
      val cmyka : float -> float -> float -> float -> float -> Mlpost.Color.t
      val is_opaque : Mlpost.Color.t -> bool
      val opaque : Mlpost.Color.t -> Mlpost.Color.t
      val transparent : float -> Mlpost.Color.t -> Mlpost.Color.t
      val hsv : float -> float -> float -> Mlpost.Color.t
      val color_gen : float -> float -> unit -> Mlpost.Color.t
      val white : Mlpost.Color.t
      val black : Mlpost.Color.t
      val red : Mlpost.Color.t
      val blue : Mlpost.Color.t
      val green : Mlpost.Color.t
      val cyan : Mlpost.Color.t
      val yellow : Mlpost.Color.t
      val magenta : Mlpost.Color.t
      val lightred : Mlpost.Color.t
      val lightblue : Mlpost.Color.t
      val lightgreen : Mlpost.Color.t
      val lightcyan : Mlpost.Color.t
      val lightyellow : Mlpost.Color.t
      val lightmagenta : Mlpost.Color.t
      val gray : float -> Mlpost.Color.t
      val lightgray : Mlpost.Color.t
      val mediumgray : Mlpost.Color.t
      val darkgray : Mlpost.Color.t
      val orange : Mlpost.Color.t
      val purple : Mlpost.Color.t
      val color : string -> Mlpost.Color.t
    end
  module rec Point :
    sig
      type t = Mlpost.Signature.point
      val pt : Mlpost.Num.t * Mlpost.Num.t -> Mlpost.Point.t
      val dir : float -> Mlpost.Point.t
      val up : Mlpost.Point.t
      val down : Mlpost.Point.t
      val left : Mlpost.Point.t
      val right : Mlpost.Point.t
      val origin : Mlpost.Point.t
      val length : Mlpost.Point.t -> Mlpost.Num.t
      val xpart : Mlpost.Point.t -> Mlpost.Num.t
      val ypart : Mlpost.Point.t -> Mlpost.Num.t
      val transform : Mlpost.Transform.t -> Mlpost.Point.t -> Mlpost.Point.t
      val segment :
        float -> Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Point.t
      val add : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Point.t
      val shift : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Point.t
      val sub : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Point.t
      val mult : Mlpost.Num.t -> Mlpost.Point.t -> Mlpost.Point.t
      val scale : Mlpost.Num.t -> Mlpost.Point.t -> Mlpost.Point.t
      val rotate : float -> Mlpost.Point.t -> Mlpost.Point.t
      val rotate_around :
        Mlpost.Point.t -> float -> Mlpost.Point.t -> Mlpost.Point.t
      val xscale : Mlpost.Num.t -> Mlpost.Point.t -> Mlpost.Point.t
      val yscale : Mlpost.Num.t -> Mlpost.Point.t -> Mlpost.Point.t
      val normalize : Mlpost.Point.t -> Mlpost.Point.t
      val bpp : float * float -> Mlpost.Point.t
      val inp : float * float -> Mlpost.Point.t
      val cmp : float * float -> Mlpost.Point.t
      val mmp : float * float -> Mlpost.Point.t
      val ptp : float * float -> Mlpost.Point.t
      val map_bp : (float * float) list -> Mlpost.Point.t list
      val map_in : (float * float) list -> Mlpost.Point.t list
      val map_cm : (float * float) list -> Mlpost.Point.t list
      val map_mm : (float * float) list -> Mlpost.Point.t list
      val map_pt : (float * float) list -> Mlpost.Point.t list
      val p :
        ?scale:(float -> Mlpost.Num.t) -> float * float -> Mlpost.Point.t
      val ptlist :
        ?scale:(float -> Mlpost.Num.t) ->
        (float * float) list -> Mlpost.Point.t list
      val draw :
        ?brush:Mlpost.Brush.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t -> Mlpost.Point.t -> Mlpost.Command.t
    end
  and MetaPath :
    sig
      type direction = Mlpost.Path.direction
      val vec : Mlpost.Point.t -> Mlpost.MetaPath.direction
      val curl : float -> Mlpost.MetaPath.direction
      val noDir : Mlpost.MetaPath.direction
      type knot = Mlpost.Path.knot
      val knotp :
        ?l:Mlpost.MetaPath.direction ->
        ?r:Mlpost.MetaPath.direction ->
        Mlpost.Point.t -> Mlpost.MetaPath.knot
      val knotlist :
        (Mlpost.MetaPath.direction * Mlpost.Point.t *
         Mlpost.MetaPath.direction)
        list -> Mlpost.MetaPath.knot list
      type joint = Mlpost.Path.joint
      val jLine : Mlpost.MetaPath.joint
      val jCurve : Mlpost.MetaPath.joint
      val jCurveNoInflex : Mlpost.MetaPath.joint
      val jTension : float -> float -> Mlpost.MetaPath.joint
      val jControls :
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.MetaPath.joint
      type t
      type path = Mlpost.Path.t
      val knot :
        ?l:Mlpost.MetaPath.direction ->
        ?r:Mlpost.MetaPath.direction ->
        ?scale:(float -> Mlpost.Num.t) ->
        float * float -> Mlpost.MetaPath.knot
      val knotn :
        ?l:Mlpost.MetaPath.direction ->
        ?r:Mlpost.MetaPath.direction ->
        Mlpost.Num.t * Mlpost.Num.t -> Mlpost.MetaPath.knot
      val path :
        ?style:Mlpost.MetaPath.joint ->
        ?scale:(float -> Mlpost.Num.t) ->
        (float * float) list -> Mlpost.MetaPath.t
      val pathn :
        ?style:Mlpost.MetaPath.joint ->
        (Mlpost.Num.t * Mlpost.Num.t) list -> Mlpost.MetaPath.t
      val pathk :
        ?style:Mlpost.MetaPath.joint ->
        Mlpost.MetaPath.knot list -> Mlpost.MetaPath.t
      val pathp :
        ?style:Mlpost.MetaPath.joint ->
        Mlpost.Point.t list -> Mlpost.MetaPath.t
      val jointpathk :
        Mlpost.MetaPath.knot list ->
        Mlpost.MetaPath.joint list -> Mlpost.MetaPath.t
      val jointpathp :
        Mlpost.Point.t list ->
        Mlpost.MetaPath.joint list -> Mlpost.MetaPath.t
      val jointpathn :
        (Mlpost.Num.t * Mlpost.Num.t) list ->
        Mlpost.MetaPath.joint list -> Mlpost.MetaPath.t
      val jointpath :
        ?scale:(float -> Mlpost.Num.t) ->
        (float * float) list ->
        Mlpost.MetaPath.joint list -> Mlpost.MetaPath.t
      val cycle :
        ?dir:Mlpost.MetaPath.direction ->
        ?style:Mlpost.MetaPath.joint ->
        Mlpost.MetaPath.t -> Mlpost.MetaPath.path
      val concat :
        ?style:Mlpost.MetaPath.joint ->
        Mlpost.MetaPath.t -> Mlpost.MetaPath.knot -> Mlpost.MetaPath.t
      val start : Mlpost.MetaPath.knot -> Mlpost.MetaPath.t
      val append :
        ?style:Mlpost.MetaPath.joint ->
        Mlpost.MetaPath.t -> Mlpost.MetaPath.t -> Mlpost.MetaPath.t
      val defaultjoint : Mlpost.MetaPath.joint
      val to_path : Mlpost.MetaPath.t -> Mlpost.MetaPath.path
      val of_path : Mlpost.MetaPath.path -> Mlpost.MetaPath.t
    end
  and Path :
    sig
      type direction
      val vec : Mlpost.Point.t -> Mlpost.Path.direction
      val curl : float -> Mlpost.Path.direction
      val noDir : Mlpost.Path.direction
      type knot
      val knotp :
        ?l:Mlpost.Path.direction ->
        ?r:Mlpost.Path.direction -> Mlpost.Point.t -> Mlpost.Path.knot
      val knotlist :
        (Mlpost.Path.direction * Mlpost.Point.t * Mlpost.Path.direction) list ->
        Mlpost.Path.knot list
      type joint
      val jLine : Mlpost.Path.joint
      val jCurve : Mlpost.Path.joint
      val jCurveNoInflex : Mlpost.Path.joint
      val jTension : float -> float -> Mlpost.Path.joint
      val jControls : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Path.joint
      type t
      val knot :
        ?l:Mlpost.Path.direction ->
        ?r:Mlpost.Path.direction ->
        ?scale:(float -> Mlpost.Num.t) -> float * float -> Mlpost.Path.knot
      val knotn :
        ?l:Mlpost.Path.direction ->
        ?r:Mlpost.Path.direction ->
        Mlpost.Num.t * Mlpost.Num.t -> Mlpost.Path.knot
      val path :
        ?style:Mlpost.Path.joint ->
        ?cycle:Mlpost.Path.joint ->
        ?scale:(float -> Mlpost.Num.t) ->
        (float * float) list -> Mlpost.Path.t
      val pathn :
        ?style:Mlpost.Path.joint ->
        ?cycle:Mlpost.Path.joint ->
        (Mlpost.Num.t * Mlpost.Num.t) list -> Mlpost.Path.t
      val pathk :
        ?style:Mlpost.Path.joint ->
        ?cycle:Mlpost.Path.joint -> Mlpost.Path.knot list -> Mlpost.Path.t
      val pathp :
        ?style:Mlpost.Path.joint ->
        ?cycle:Mlpost.Path.joint -> Mlpost.Point.t list -> Mlpost.Path.t
      val jointpathk :
        Mlpost.Path.knot list -> Mlpost.Path.joint list -> Mlpost.Path.t
      val jointpathp :
        Mlpost.Point.t list -> Mlpost.Path.joint list -> Mlpost.Path.t
      val jointpathn :
        (Mlpost.Num.t * Mlpost.Num.t) list ->
        Mlpost.Path.joint list -> Mlpost.Path.t
      val jointpath :
        ?scale:(float -> Mlpost.Num.t) ->
        (float * float) list -> Mlpost.Path.joint list -> Mlpost.Path.t
      val cycle :
        ?dir:Mlpost.Path.direction ->
        ?style:Mlpost.Path.joint -> Mlpost.Path.t -> Mlpost.Path.t
      val concat :
        ?style:Mlpost.Path.joint ->
        Mlpost.Path.t -> Mlpost.Path.knot -> Mlpost.Path.t
      val start : Mlpost.Path.knot -> Mlpost.Path.t
      val append :
        ?style:Mlpost.Path.joint ->
        Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
      val length : Mlpost.Path.t -> Mlpost.Num.t
      val point : float -> Mlpost.Path.t -> Mlpost.Point.t
      val pointn : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Point.t
      val direction : float -> Mlpost.Path.t -> Mlpost.Point.t
      val directionn : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Point.t
      val subpath : float -> float -> Mlpost.Path.t -> Mlpost.Path.t
      val subpathn :
        Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
      val transform : Mlpost.Transform.t -> Mlpost.Path.t -> Mlpost.Path.t
      val scale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
      val rotate : float -> Mlpost.Path.t -> Mlpost.Path.t
      val shift : Mlpost.Point.t -> Mlpost.Path.t -> Mlpost.Path.t
      val yscale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
      val xscale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
      val cut_after : Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
      val cut_before : Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
      val strip : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
      val build_cycle : Mlpost.Path.t list -> Mlpost.Path.t
      val defaultjoint : Mlpost.Path.joint
      val fullcircle : Mlpost.Path.t
      val halfcircle : Mlpost.Path.t
      val quartercircle : Mlpost.Path.t
      val unitsquare : Mlpost.Path.t
      type metapath = Mlpost.MetaPath.t
      val of_metapath : Mlpost.Path.metapath -> Mlpost.Path.t
      val to_metapath : Mlpost.Path.t -> Mlpost.Path.metapath
      type orientation =
          Up
        | Down
        | Left
        | Right
        | Upn of Mlpost.Num.t
        | Downn of Mlpost.Num.t
        | Leftn of Mlpost.Num.t
        | Rightn of Mlpost.Num.t
      val smart_path :
        ?style:Mlpost.Path.joint ->
        Mlpost.Path.orientation list ->
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Path.t
      val draw :
        ?brush:Mlpost.Brush.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t -> Mlpost.Path.t -> Mlpost.Command.t
      val fill : ?color:Mlpost.Color.t -> Mlpost.Path.t -> Mlpost.Command.t
    end
  and Pen :
    sig
      type t
      val transform : Mlpost.Transform.t -> Mlpost.Pen.t -> Mlpost.Pen.t
      val default : Mlpost.Pen.t
      val circle : Mlpost.Pen.t
      val square : Mlpost.Pen.t
      val from_path : Mlpost.Path.t -> Mlpost.Pen.t
      val scale : Mlpost.Num.t -> Mlpost.Pen.t -> Mlpost.Pen.t
      val rotate : float -> Mlpost.Pen.t -> Mlpost.Pen.t
      val shift : Mlpost.Point.t -> Mlpost.Pen.t -> Mlpost.Pen.t
      val yscale : Mlpost.Num.t -> Mlpost.Pen.t -> Mlpost.Pen.t
      val xscale : Mlpost.Num.t -> Mlpost.Pen.t -> Mlpost.Pen.t
    end
  and Dash :
    sig
      type t
      val evenly : Mlpost.Dash.t
      val withdots : Mlpost.Dash.t
      val scaled : float -> Mlpost.Dash.t -> Mlpost.Dash.t
      val shifted : Mlpost.Point.t -> Mlpost.Dash.t -> Mlpost.Dash.t
      type on_off
      val on : Mlpost.Num.t -> Mlpost.Dash.on_off
      val off : Mlpost.Num.t -> Mlpost.Dash.on_off
      val pattern : Mlpost.Dash.on_off list -> Mlpost.Dash.t
    end
  and Brush :
    sig
      module Pen :
        sig
          type t = Mlpost.Pen.t
          val transform :
            Mlpost.Transform.t -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
          val default : Mlpost.Brush.Pen.t
          val circle : Mlpost.Brush.Pen.t
          val square : Mlpost.Brush.Pen.t
          val from_path : Mlpost.Path.t -> Mlpost.Brush.Pen.t
          val scale :
            Mlpost.Num.t -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
          val rotate : float -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
          val shift :
            Mlpost.Point.t -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
          val yscale :
            Mlpost.Num.t -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
          val xscale :
            Mlpost.Num.t -> Mlpost.Brush.Pen.t -> Mlpost.Brush.Pen.t
        end
      module Dash :
        sig
          type t = Mlpost.Dash.t
          val evenly : Mlpost.Brush.Dash.t
          val withdots : Mlpost.Brush.Dash.t
          val scaled :
            Mlpost.Num.t -> Mlpost.Brush.Dash.t -> Mlpost.Brush.Dash.t
          val shifted :
            Mlpost.Point.t -> Mlpost.Brush.Dash.t -> Mlpost.Brush.Dash.t
          type on_off
          val on : Mlpost.Num.t -> Mlpost.Brush.Dash.on_off
          val off : Mlpost.Num.t -> Mlpost.Brush.Dash.on_off
          val pattern : Mlpost.Brush.Dash.on_off list -> Mlpost.Brush.Dash.t
        end
      type t
      val t :
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Brush.Pen.t ->
        ?dash:Mlpost.Brush.Dash.t ->
        ?scale:Mlpost.Num.t ->
        ?brush:Mlpost.Brush.t -> unit -> Mlpost.Brush.t
      val pen : Mlpost.Brush.t -> Mlpost.Brush.Pen.t option
      val dash : Mlpost.Brush.t -> Mlpost.Brush.Dash.t option
      val color : Mlpost.Brush.t -> Mlpost.Color.t option
      type brush_colored =
          ?pen:Mlpost.Brush.Pen.t ->
          ?dash:Mlpost.Brush.Dash.t ->
          ?scale:Mlpost.Num.t ->
          ?brush:Mlpost.Brush.t -> unit -> Mlpost.Brush.t
      val white : Mlpost.Brush.brush_colored
      val black : Mlpost.Brush.brush_colored
      val red : Mlpost.Brush.brush_colored
      val blue : Mlpost.Brush.brush_colored
      val green : Mlpost.Brush.brush_colored
      val cyan : Mlpost.Brush.brush_colored
      val yellow : Mlpost.Brush.brush_colored
      val magenta : Mlpost.Brush.brush_colored
      val lightred : Mlpost.Brush.brush_colored
      val lightblue : Mlpost.Brush.brush_colored
      val lightgreen : Mlpost.Brush.brush_colored
      val lightcyan : Mlpost.Brush.brush_colored
      val lightyellow : Mlpost.Brush.brush_colored
      val lightmagenta : Mlpost.Brush.brush_colored
      val gray : float -> Mlpost.Brush.brush_colored
      val lightgray : Mlpost.Brush.brush_colored
      val mediumgray : Mlpost.Brush.brush_colored
      val darkgray : Mlpost.Brush.brush_colored
      val orange : Mlpost.Brush.brush_colored
      val purple : Mlpost.Brush.brush_colored
    end
  and Transform :
    sig
      type t'
      val scaled : Mlpost.Num.t -> Mlpost.Transform.t'
      val rotated : float -> Mlpost.Transform.t'
      val shifted : Mlpost.Point.t -> Mlpost.Transform.t'
      val slanted : Mlpost.Num.t -> Mlpost.Transform.t'
      val xscaled : Mlpost.Num.t -> Mlpost.Transform.t'
      val yscaled : Mlpost.Num.t -> Mlpost.Transform.t'
      val zscaled : Mlpost.Point.t -> Mlpost.Transform.t'
      val reflect : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Transform.t'
      val rotate_around : Mlpost.Point.t -> float -> Mlpost.Transform.t'
      type matrix = {
        xx : Mlpost.Num.t;
        yx : Mlpost.Num.t;
        xy : Mlpost.Num.t;
        yy : Mlpost.Num.t;
        x0 : Mlpost.Num.t;
        y0 : Mlpost.Num.t;
      }
      val explicit : Mlpost.Transform.matrix -> Mlpost.Transform.t'
      type t = Mlpost.Transform.t' list
      val id : Mlpost.Transform.t
    end
  and Picture :
    sig
      type t = Mlpost.Command.t
      val make : Mlpost.Command.t -> Mlpost.Picture.t
      val tex : string -> Mlpost.Picture.t
      val transform :
        Mlpost.Transform.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val bbox : Mlpost.Picture.t -> Mlpost.Path.t
      val corner_bbox :
        ?dx:Mlpost.Num.t ->
        ?dy:Mlpost.Num.t -> Mlpost.Picture.t -> Mlpost.Path.t
      val center : Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val place_up_left :
        Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val place_up_right :
        Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val place_bot_left :
        Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val place_bot_right :
        Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val beside : Mlpost.Picture.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val below : Mlpost.Picture.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val ctr : Mlpost.Picture.t -> Mlpost.Point.t
      val north : Mlpost.Picture.t -> Mlpost.Point.t
      val south : Mlpost.Picture.t -> Mlpost.Point.t
      val west : Mlpost.Picture.t -> Mlpost.Point.t
      val east : Mlpost.Picture.t -> Mlpost.Point.t
      val north_west : Mlpost.Picture.t -> Mlpost.Point.t
      val south_west : Mlpost.Picture.t -> Mlpost.Point.t
      val north_east : Mlpost.Picture.t -> Mlpost.Point.t
      val south_east : Mlpost.Picture.t -> Mlpost.Point.t
      val corner :
        Mlpost.Command.position -> Mlpost.Picture.t -> Mlpost.Point.t
      val ulcorner : Mlpost.Picture.t -> Mlpost.Point.t
      val llcorner : Mlpost.Picture.t -> Mlpost.Point.t
      val urcorner : Mlpost.Picture.t -> Mlpost.Point.t
      val lrcorner : Mlpost.Picture.t -> Mlpost.Point.t
      val clip : Mlpost.Picture.t -> Mlpost.Path.t -> Mlpost.Picture.t
      val width : Mlpost.Picture.t -> Mlpost.Num.t
      val height : Mlpost.Picture.t -> Mlpost.Num.t
      val scale : Mlpost.Num.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val rotate : float -> Mlpost.Picture.t -> Mlpost.Picture.t
      val shift : Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val yscale : Mlpost.Num.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val xscale : Mlpost.Num.t -> Mlpost.Picture.t -> Mlpost.Picture.t
      val spin : float -> Mlpost.Picture.t -> Mlpost.Picture.t
      type escaped = [ `Backslash | `Underscore ]
      val escape_latex : Mlpost.Picture.escaped list -> string -> string
      val escape_all : string -> string
      val set_pos : Mlpost.Point.t -> Mlpost.Picture.t -> Mlpost.Picture.t
    end
  and Command :
    sig
      val set_verbosity : bool -> unit
      type t
      val draw :
        ?brush:Mlpost.Brush.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t -> Mlpost.Path.t -> Mlpost.Command.t
      val fill : ?color:Mlpost.Color.t -> Mlpost.Path.t -> Mlpost.Command.t
      val draw_pic : Mlpost.Picture.t -> Mlpost.Command.t
      val externalimage :
        string ->
        [ `Exact of Mlpost.Num.t * Mlpost.Num.t
        | `Height of Mlpost.Num.t
        | `Inside of Mlpost.Num.t * Mlpost.Num.t
        | `None
        | `Width of Mlpost.Num.t ] -> Mlpost.Command.t
      val nop : Mlpost.Command.t
      val append : Mlpost.Command.t -> Mlpost.Command.t -> Mlpost.Command.t
      val ( ++ ) : Mlpost.Command.t -> Mlpost.Command.t -> Mlpost.Command.t
      val seq : Mlpost.Command.t list -> Mlpost.Command.t
      val iter : int -> int -> (int -> Mlpost.Command.t) -> Mlpost.Command.t
      val iterl : ('-> Mlpost.Command.t) -> 'a list -> Mlpost.Command.t
      type hposition = [ `Center | `East | `Left | `Right | `West ]
      type vposition = [ `Bot | `Bottom | `Center | `North | `South | `Top ]
      type position =
          [ `Bot
          | `Bottom
          | `Bottomleft
          | `Bottomright
          | `Center
          | `East
          | `Left
          | `Lowerleft
          | `Lowerright
          | `Lowleft
          | `Lowright
          | `North
          | `Northeast
          | `Northwest
          | `Right
          | `South
          | `Southeast
          | `Southwest
          | `Top
          | `Topleft
          | `Topright
          | `Upleft
          | `Upperleft
          | `Upperright
          | `Upright
          | `West ]
      val label :
        ?pos:Mlpost.Command.position ->
        Mlpost.Picture.t -> Mlpost.Point.t -> Mlpost.Command.t
      val dotlabel :
        ?pos:Mlpost.Command.position ->
        Mlpost.Picture.t -> Mlpost.Point.t -> Mlpost.Command.t
    end
  module Shapes :
    sig
      val round_rect :
        Mlpost.Num.t ->
        Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t
      val rectangle : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t
      val ellipse : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t
      val circle : Mlpost.Num.t -> Mlpost.Path.t
      val patatoid : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t
      val patatoid2 : Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t
    end
  module Box :
    sig
      type t
      type style =
          Rect
        | Circle
        | RoundRect
        | Patatoid
        | Patatoid2
        | Ellipse
        | RoundBox
        | Custom of
            (Mlpost.Num.t ->
             Mlpost.Num.t -> Mlpost.Num.t * Mlpost.Num.t * Mlpost.Path.t)
      type 'a box_creator =
          ?dx:Mlpost.Num.t ->
          ?dy:Mlpost.Num.t ->
          ?name:string ->
          ?stroke:Mlpost.Color.t option ->
          ?pen:Mlpost.Pen.t ->
          ?dash:Mlpost.Dash.t -> ?fill:Mlpost.Color.t -> '-> Mlpost.Box.t
      val empty :
        ?width:Mlpost.Num.t ->
        ?height:Mlpost.Num.t ->
        ?style:Mlpost.Box.style ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t -> ?fill:Mlpost.Color.t -> unit -> Mlpost.Box.t
      val empty_from_box :
        ?style:Mlpost.Box.style ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?fill:Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
      val pic :
        ?style:Mlpost.Box.style -> Mlpost.Picture.t Mlpost.Box.box_creator
      val path :
        ?style:Mlpost.Box.style -> Mlpost.Path.t Mlpost.Box.box_creator
      val tex : ?style:Mlpost.Box.style -> string Mlpost.Box.box_creator
      val box :
        ?style:Mlpost.Box.style -> Mlpost.Box.t Mlpost.Box.box_creator
      val circle : Mlpost.Box.t Mlpost.Box.box_creator
      val ellipse : Mlpost.Box.t Mlpost.Box.box_creator
      val rect : Mlpost.Box.t Mlpost.Box.box_creator
      val round_rect : Mlpost.Box.t Mlpost.Box.box_creator
      val patatoid : Mlpost.Box.t Mlpost.Box.box_creator
      val patatoid2 : Mlpost.Box.t Mlpost.Box.box_creator
      val round_box : Mlpost.Box.t Mlpost.Box.box_creator
      val bpath : Mlpost.Box.t -> Mlpost.Path.t
      val ctr : Mlpost.Box.t -> Mlpost.Point.t
      val north : Mlpost.Box.t -> Mlpost.Point.t
      val south : Mlpost.Box.t -> Mlpost.Point.t
      val west : Mlpost.Box.t -> Mlpost.Point.t
      val east : Mlpost.Box.t -> Mlpost.Point.t
      val north_west : Mlpost.Box.t -> Mlpost.Point.t
      val south_west : Mlpost.Box.t -> Mlpost.Point.t
      val north_east : Mlpost.Box.t -> Mlpost.Point.t
      val south_east : Mlpost.Box.t -> Mlpost.Point.t
      type vposition =
          [ `Bot
          | `Bottom
          | `Center
          | `Custom of Mlpost.Box.t -> Mlpost.Num.t
          | `North
          | `South
          | `Top ]
      type hposition =
          [ `Center
          | `Custom of Mlpost.Box.t -> Mlpost.Num.t
          | `East
          | `Left
          | `Right
          | `West ]
      type position =
          [ `Bot
          | `Bottom
          | `Bottomleft
          | `Bottomright
          | `Center
          | `Custom of Mlpost.Box.t -> Mlpost.Point.t
          | `East
          | `Left
          | `Lowerleft
          | `Lowerright
          | `Lowleft
          | `Lowright
          | `North
          | `Northeast
          | `Northwest
          | `Right
          | `South
          | `Southeast
          | `Southwest
          | `Top
          | `Topleft
          | `Topright
          | `Upleft
          | `Upperleft
          | `Upperright
          | `Upright
          | `West ]
      val corner : Mlpost.Box.position -> Mlpost.Box.t -> Mlpost.Point.t
      val opposite_position : Mlpost.Box.position -> Mlpost.Box.position
      val height : Mlpost.Box.t -> Mlpost.Num.t
      val width : Mlpost.Box.t -> Mlpost.Num.t
      val shift : Point.t -> t -> t
      val center : Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
      val draw : ?debug:bool -> Mlpost.Box.t -> Mlpost.Command.t
      val group :
        ?style:Mlpost.Box.style -> Mlpost.Box.t list Mlpost.Box.box_creator
      val halign :
        ?pos:Mlpost.Box.vposition ->
        Mlpost.Num.t -> Mlpost.Box.t list -> Mlpost.Box.t list
      val valign :
        ?pos:Mlpost.Box.hposition ->
        Mlpost.Num.t -> Mlpost.Box.t list -> Mlpost.Box.t list
      val hplace :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?min_width:Mlpost.Num.t ->
        ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
      val vplace :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?min_height:Mlpost.Num.t ->
        ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
      val hbox :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?style:Mlpost.Box.style ->
        ?min_width:Mlpost.Num.t ->
        ?same_width:bool -> Mlpost.Box.t list Mlpost.Box.box_creator
      val hbox_list :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?min_width:Mlpost.Num.t ->
        ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
      val vbox :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?style:Mlpost.Box.style ->
        ?min_height:Mlpost.Num.t ->
        ?same_height:bool -> Mlpost.Box.t list Mlpost.Box.box_creator
      val vbox_list :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Box.position ->
        ?min_height:Mlpost.Num.t ->
        ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
      val tabular :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?style:Mlpost.Box.style ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?fill:Mlpost.Color.t -> Mlpost.Box.t array array -> Mlpost.Box.t
      val tabularl :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?style:Mlpost.Box.style ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?fill:Mlpost.Color.t -> Mlpost.Box.t list list -> Mlpost.Box.t
      val tabulari :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?style:Mlpost.Box.style ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?fill:Mlpost.Color.t ->
        int -> int -> (int -> int -> Mlpost.Box.t) -> Mlpost.Box.t
      val hblock :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?min_width:Mlpost.Num.t ->
        ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t
      val vblock :
        ?padding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?name:string ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        ?min_height:Mlpost.Num.t ->
        ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t
      val grid :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t -> Mlpost.Box.t array array -> Mlpost.Box.t
      val gridl :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t -> Mlpost.Box.t list list -> Mlpost.Box.t
      val gridi :
        ?hpadding:Mlpost.Num.t ->
        ?vpadding:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        ?stroke:Mlpost.Color.t option ->
        ?pen:Mlpost.Pen.t ->
        ?dash:Mlpost.Dash.t ->
        int -> int -> (int -> int -> Mlpost.Box.t) -> Mlpost.Box.t
      val place :
        Mlpost.Box.position ->
        ?pos:Mlpost.Box.position ->
        ?padding:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Box.t
      val nth : int -> Mlpost.Box.t -> Mlpost.Box.t
      val get : string -> Mlpost.Box.t -> Mlpost.Box.t
      val sub : Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Box.t
      val elts : Mlpost.Box.t -> Mlpost.Box.t array
      val setp : string -> Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
      val getp : string -> Mlpost.Box.t -> Mlpost.Point.t
      val getpx : string -> Mlpost.Box.t -> Mlpost.Num.t
      val getpy : string -> Mlpost.Box.t -> Mlpost.Num.t
      val get_fill : Mlpost.Box.t -> Mlpost.Color.t option
      val set_fill : Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
      val get_stroke : Mlpost.Box.t -> Mlpost.Color.t option
      val set_stroke : Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
      val clear_stroke : Mlpost.Box.t -> Mlpost.Box.t
      val get_name : Mlpost.Box.t -> string option
      val set_name : string -> Mlpost.Box.t -> Mlpost.Box.t
      val get_pen : Mlpost.Box.t -> Mlpost.Pen.t option
      val set_pen : Mlpost.Pen.t -> Mlpost.Box.t -> Mlpost.Box.t
      val set_height :
        Mlpost.Command.vposition ->
        Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val set_width :
        Mlpost.Command.hposition ->
        Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val get_dash : Mlpost.Box.t -> Mlpost.Dash.t option
      val set_dash : Mlpost.Dash.t -> Mlpost.Box.t -> Mlpost.Box.t
      val clear_dash : Mlpost.Box.t -> Mlpost.Box.t
      val set_height2 :
        Mlpost.Box.vposition ->
        Mlpost.Num.t ->
        Mlpost.Box.vposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val set_width2 :
        Mlpost.Box.hposition ->
        Mlpost.Num.t ->
        Mlpost.Box.hposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val set_size :
        Mlpost.Command.position ->
        width:Mlpost.Num.t ->
        height:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val same_height :
        ?pos:Mlpost.Box.vposition -> Mlpost.Box.t list -> Mlpost.Box.t list
      val same_width :
        ?pos:Mlpost.Box.hposition -> Mlpost.Box.t list -> Mlpost.Box.t list
      val same_size :
        ?pos:Mlpost.Box.position -> Mlpost.Box.t list -> Mlpost.Box.t list
      val set_post_draw :
        (Mlpost.Box.t -> Mlpost.Command.t) -> Mlpost.Box.t -> Mlpost.Box.t
      val clear_post_draw : Mlpost.Box.t -> Mlpost.Box.t
      val set_pre_draw :
        (Mlpost.Box.t -> Mlpost.Command.t) -> Mlpost.Box.t -> Mlpost.Box.t
      val clear_pre_draw : Mlpost.Box.t -> Mlpost.Box.t
      val shadow : Mlpost.Box.t -> Mlpost.Box.t
      val cpath :
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Path.t
      val cpath_left :
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Box.t -> Mlpost.Point.t -> Mlpost.Path.t
      val cpath_right :
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Path.t
      val transform : Mlpost.Transform.t -> Mlpost.Box.t -> Mlpost.Box.t
      val scale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val rotate : float -> Mlpost.Box.t -> Mlpost.Box.t
      val shift : Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
      val yscale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val xscale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
      val set_pos : Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
    end
  module Arrow :
    sig
      type kind
      val simple :
        ?color:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t -> Mlpost.Path.t -> Mlpost.Command.t
      val draw :
        ?kind:Mlpost.Arrow.kind ->
        ?tex:string ->
        ?pos:float ->
        ?anchor:Mlpost.Command.position -> Mlpost.Path.t -> Mlpost.Command.t
      val point_to_point :
        ?kind:Mlpost.Arrow.kind ->
        ?tex:string ->
        ?pos:float ->
        ?anchor:Mlpost.Command.position ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Command.t
      val box_to_box :
        ?kind:Mlpost.Arrow.kind ->
        ?tex:string ->
        ?pos:float ->
        ?anchor:Mlpost.Command.position ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
      val point_to_box :
        ?kind:Mlpost.Arrow.kind ->
        ?tex:string ->
        ?pos:float ->
        ?anchor:Mlpost.Command.position ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Command.t
      val box_to_point :
        ?kind:Mlpost.Arrow.kind ->
        ?tex:string ->
        ?pos:float ->
        ?anchor:Mlpost.Command.position ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Box.t -> Mlpost.Point.t -> Mlpost.Command.t
      val classic : Mlpost.Arrow.kind
      val triangle : Mlpost.Arrow.kind
      val triangle_full : Mlpost.Arrow.kind
      val implies : Mlpost.Arrow.kind
      val iff : Mlpost.Arrow.kind
      type head_description
      val make_head :
        ?cut:Mlpost.Path.t ->
        Mlpost.Command.t -> Mlpost.Arrow.head_description
      type head =
          Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Arrow.head_description
      val head_classic :
        ?color:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?angle:float -> ?size:Mlpost.Num.t -> Mlpost.Arrow.head
      val head_triangle :
        ?color:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?angle:float -> ?size:Mlpost.Num.t -> Mlpost.Arrow.head
      val head_triangle_full :
        ?color:Mlpost.Color.t ->
        ?angle:float -> ?size:Mlpost.Num.t -> Mlpost.Arrow.head
      val empty : Mlpost.Arrow.kind
      val add_line :
        ?brush:Mlpost.Brush.t ->
        ?dashed:Mlpost.Dash.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?from_point:float ->
        ?to_point:float ->
        ?dist:Mlpost.Num.t -> Mlpost.Arrow.kind -> Mlpost.Arrow.kind
      val add_head :
        ?head:Mlpost.Arrow.head -> Mlpost.Arrow.kind -> Mlpost.Arrow.kind
      val add_foot :
        ?head:Mlpost.Arrow.head -> Mlpost.Arrow.kind -> Mlpost.Arrow.kind
      val add_belt :
        ?clip:bool ->
        ?rev:bool ->
        ?point:float ->
        ?head:Mlpost.Arrow.head -> Mlpost.Arrow.kind -> Mlpost.Arrow.kind
      val draw_thick :
        ?style:Mlpost.Path.joint ->
        ?boxed:bool ->
        ?line_color:Mlpost.Color.t ->
        ?fill_color:Mlpost.Color.t ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?width:Mlpost.Num.t ->
        ?head_length:Mlpost.Num.t ->
        ?head_width:Mlpost.Num.t ->
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Command.t
    end
  module Helpers :
    sig
      val dotlabels :
        ?pos:Mlpost.Command.position ->
        string list -> Mlpost.Point.t list -> Mlpost.Command.t
      val draw_simple_arrow :
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Command.t
      val draw_label_arrow :
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?pos:Mlpost.Command.position ->
        Mlpost.Picture.t ->
        Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Command.t
      val draw_labelbox_arrow :
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?pos:Mlpost.Command.position ->
        Mlpost.Box.t -> Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Command.t
      val box_arrow :
        ?within:Mlpost.Box.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
      val box_line :
        ?within:Mlpost.Box.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
      val box_label_arrow :
        ?within:Mlpost.Box.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        Mlpost.Picture.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
      val box_label_line :
        ?within:Mlpost.Box.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        Mlpost.Picture.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
      val box_labelbox_arrow :
        ?within:Mlpost.Box.t ->
        ?color:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t ->
        ?dashed:Mlpost.Dash.t ->
        ?style:Mlpost.Path.joint ->
        ?outd:Mlpost.Path.direction ->
        ?ind:Mlpost.Path.direction ->
        ?sep:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Command.t
    end
  module Tree :
    sig
      type t
      type arrow_style = Directed | Undirected
      type edge_style = Straight | Curve | Square | HalfSquare
      val leaf : Mlpost.Box.t -> Mlpost.Tree.t
      val node :
        ?ls:Mlpost.Num.t ->
        ?cs:Mlpost.Num.t ->
        ?arrow_style:Mlpost.Tree.arrow_style ->
        ?edge_style:Mlpost.Tree.edge_style ->
        ?stroke:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?sep:Mlpost.Num.t ->
        Mlpost.Box.t -> Mlpost.Tree.t list -> Mlpost.Tree.t
      val nodel :
        ?ls:Mlpost.Num.t ->
        ?cs:Mlpost.Num.t ->
        ?arrow_style:Mlpost.Tree.arrow_style ->
        ?edge_style:Mlpost.Tree.edge_style ->
        ?stroke:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?sep:Mlpost.Num.t ->
        Mlpost.Box.t ->
        (Mlpost.Tree.t * (Mlpost.Command.position * Mlpost.Picture.t)) list ->
        Mlpost.Tree.t
      val bin :
        ?ls:Mlpost.Num.t ->
        ?cs:Mlpost.Num.t ->
        ?arrow_style:Mlpost.Tree.arrow_style ->
        ?edge_style:Mlpost.Tree.edge_style ->
        ?stroke:Mlpost.Color.t ->
        ?brush:Mlpost.Brush.t ->
        ?pen:Mlpost.Pen.t ->
        ?sep:Mlpost.Num.t ->
        Mlpost.Box.t -> Mlpost.Tree.t -> Mlpost.Tree.t -> Mlpost.Tree.t
      val to_box : Mlpost.Tree.t -> Mlpost.Box.t
      val draw : ?debug:bool -> Mlpost.Tree.t -> Mlpost.Command.t
      module Simple :
        sig
          type t
          val leaf : Mlpost.Box.t -> Mlpost.Tree.Simple.t
          val node :
            ?ls:Mlpost.Num.t ->
            ?cs:Mlpost.Num.t ->
            ?arrow_style:Mlpost.Tree.arrow_style ->
            ?edge_style:Mlpost.Tree.edge_style ->
            ?stroke:Mlpost.Color.t ->
            ?brush:Mlpost.Brush.t ->
            ?pen:Mlpost.Pen.t ->
            ?sep:Mlpost.Num.t ->
            ?valign:Mlpost.Command.position ->
            ?halign:Mlpost.Command.position ->
            Mlpost.Box.t -> Mlpost.Tree.Simple.t list -> Mlpost.Tree.Simple.t
          val bin :
            ?ls:Mlpost.Num.t ->
            ?cs:Mlpost.Num.t ->
            ?arrow_style:Mlpost.Tree.arrow_style ->
            ?edge_style:Mlpost.Tree.edge_style ->
            ?stroke:Mlpost.Color.t ->
            ?brush:Mlpost.Brush.t ->
            ?pen:Mlpost.Pen.t ->
            ?sep:Mlpost.Num.t ->
            Mlpost.Box.t ->
            Mlpost.Tree.Simple.t ->
            Mlpost.Tree.Simple.t -> Mlpost.Tree.Simple.t
          val to_box : Mlpost.Tree.Simple.t -> Mlpost.Box.t
          val draw : ?debug:bool -> Mlpost.Tree.Simple.t -> Mlpost.Command.t
        end
    end
  module Tree_adv :
    sig
      type 'a t = Node of 'a * 'Mlpost.Tree_adv.t list
      module Place :
        functor (X : Signature.Boxlike->
          sig
            val gen_place :
              place:(Mlpost.Box.t Mlpost.Tree_adv.t -> Mlpost.Box.t) ->
              X.t Mlpost.Tree_adv.t -> X.t Mlpost.Tree_adv.t
            val place :
              ?ls:Mlpost.Num.t ->
              ?cs:Mlpost.Num.t ->
              ?valign:Mlpost.Box.position ->
              ?halign:Mlpost.Box.position ->
              X.t Mlpost.Tree_adv.t -> X.t Mlpost.Tree_adv.t
          end
      val gen_draw_arrows :
        '->
        style:(Mlpost.Point.t -> Mlpost.Point.t -> 'a) ->
        corner:(Mlpost.Box.position -> '-> Mlpost.Point.t) ->
        'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val draw :
        ('-> Mlpost.Box.t) -> 'Mlpost.Tree_adv.t -> Mlpost.Command.t
      val map : ('-> 'b) -> 'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val map2 :
        ('-> '-> 'c) ->
        'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val combine :
        'Mlpost.Tree_adv.t ->
        'Mlpost.Tree_adv.t -> ('a * 'b) Mlpost.Tree_adv.t
      val split :
        ('a * 'b) Mlpost.Tree_adv.t ->
        'Mlpost.Tree_adv.t * 'Mlpost.Tree_adv.t
      val root_map :
        ('a option -> '-> 'b) ->
        'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val map_children :
        ('-> 'a list -> 'b) -> 'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val fold : ('-> '-> 'a) -> '-> 'Mlpost.Tree_adv.t -> 'a
      val filter :
        ('-> bool) -> 'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val filter_option :
        ('-> 'b option) -> 'Mlpost.Tree_adv.t -> 'Mlpost.Tree_adv.t
      val wrap_corner_box :
        ('-> Mlpost.Box.t) ->
        (corner:(Mlpost.Box.position -> '-> Mlpost.Point.t) -> 'b) -> 'b
      module Overlays :
        sig
          type interval =
              Bet of int * int
            | Bef of int
            | Aft of int
            | Nev
            | Alw
          val in_interval : int -> Mlpost.Tree_adv.Overlays.interval -> bool
          val min_interval : int -> Mlpost.Tree_adv.Overlays.interval -> int
          val max_interval : int -> Mlpost.Tree_adv.Overlays.interval -> int
          val min_tree :
            ('-> Mlpost.Tree_adv.Overlays.interval) ->
            'Mlpost.Tree_adv.t -> int
          val max_tree :
            ('-> Mlpost.Tree_adv.Overlays.interval) ->
            'Mlpost.Tree_adv.t -> int
          type 'a spec = (Mlpost.Tree_adv.Overlays.interval * 'a) list
          val assoq : int -> 'Mlpost.Tree_adv.Overlays.spec -> 'a
          val max : ('-> Mlpost.Num.t) -> ('b * 'a) list -> Mlpost.Num.t
          val set_pos :
            (Mlpost.Point.t -> '-> 'b) ->
            Mlpost.Point.t ->
            'Mlpost.Tree_adv.Overlays.spec ->
            'Mlpost.Tree_adv.Overlays.spec
        end
      module Overlays_Boxlike :
        functor (X : Signature.Boxlike->
          sig
            type t = X.t Overlays.spec
            val width : t -> Signature.num
            val height : t -> Signature.num
            val set_pos : Signature.point -> t -> t
          end
    end
  module Diag :
    sig
      type node
      type node_style = Mlpost.Box.t -> Mlpost.Box.t
      val node :
        ?style:Mlpost.Diag.node_style ->
        ?fill:Mlpost.Color.t ->
        ?boxed:bool -> float -> float -> Mlpost.Box.t -> Mlpost.Diag.node
      type t
      val create : Mlpost.Diag.node list -> Mlpost.Diag.t
      type dir = Up | Down | Left | Right | Angle of float
      val arrow :
        Mlpost.Diag.t ->
        ?lab:string ->
        ?line_width:Mlpost.Num.t ->
        ?boxed:bool ->
        ?line_color:Mlpost.Color.t ->
        ?fill_color:Mlpost.Color.t ->
        ?pos:Mlpost.Command.position ->
        ?head:bool ->
        ?dashed:Mlpost.Dash.t ->
        ?outd:Mlpost.Diag.dir ->
        ?ind:Mlpost.Diag.dir -> Mlpost.Diag.node -> Mlpost.Diag.node -> unit
      val draw :
        ?scale:(float -> Mlpost.Num.t) ->
        ?style:Mlpost.Diag.node_style ->
        ?boxed:bool ->
        ?fill:Mlpost.Color.t ->
        ?stroke:Mlpost.Color.t ->
        ?pen:Mlpost.Pen.t -> Mlpost.Diag.t -> Mlpost.Command.t
    end
  module Plot :
    sig
      type skeleton
      val mk_skeleton :
        int -> int -> Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Plot.skeleton
      type labels = int -> Mlpost.Num.t -> Mlpost.Picture.t option
      type ticks = (Mlpost.Num.t * Mlpost.Pen.t) option
      type drawing = Stepwise | Normal
      val draw_grid :
        ?hdash:(int -> Mlpost.Dash.t) ->
        ?vdash:(int -> Mlpost.Dash.t) ->
        ?hpen:(int -> Mlpost.Pen.t) ->
        ?vpen:(int -> Mlpost.Pen.t) ->
        ?color:Mlpost.Color.t -> Mlpost.Plot.skeleton -> Mlpost.Command.t
      val draw_axes :
        ?hpen:Mlpost.Pen.t ->
        ?vpen:Mlpost.Pen.t ->
        ?hlabel:Mlpost.Plot.labels ->
        ?vlabel:Mlpost.Plot.labels ->
        ?ticks:Mlpost.Plot.ticks ->
        ?closed:bool ->
        ?hcaption:Mlpost.Picture.t ->
        ?vcaption:Mlpost.Picture.t ->
        Mlpost.Plot.skeleton -> Mlpost.Command.t
      val draw_simple_axes :
        ?hpen:Mlpost.Pen.t ->
        ?vpen:Mlpost.Pen.t ->
        string -> string -> Mlpost.Plot.skeleton -> Mlpost.Command.t
      val draw_func :
        ?pen:Mlpost.Pen.t ->
        ?drawing:Mlpost.Plot.drawing ->
        ?style:Mlpost.Path.joint ->
        ?dashed:Mlpost.Dash.t ->
        ?color:Mlpost.Color.t ->
        ?label:Mlpost.Picture.t * Mlpost.Command.position * int ->
        ?from_x:int ->
        ?to_x:int ->
        (int -> float) -> Mlpost.Plot.skeleton -> Mlpost.Command.t
    end
  module Real_plot :
    sig
      type 'a curve
      val curve : (float -> float) -> '-> 'Mlpost.Real_plot.curve
      val curve_opt :
        (float -> float option) -> '-> 'Mlpost.Real_plot.curve
      val curve_l :
        (float -> float option) list -> '-> 'Mlpost.Real_plot.curve
      val draw :
        ?logarithmic:bool ->
        ?curve_brush:('-> Mlpost.Brush.t) ->
        ?label:('-> string) ->
        ?ymin:float ->
        ?ymax:float ->
        xmin:float ->
        xmax:float ->
        pitch:float ->
        width:Mlpost.Num.t ->
        height:Mlpost.Num.t ->
        'Mlpost.Real_plot.curve list -> Mlpost.Command.t
    end
  module Hist :
    sig
      type 'a labels = Values | User of 'a list
      val simple :
        ?width:Mlpost.Num.t ->
        ?height:Mlpost.Num.t ->
        ?padding:Mlpost.Num.t ->
        ?fill:Mlpost.Color.t list ->
        ?perspective:bool ->
        ?hcaption:Mlpost.Picture.t ->
        ?vcaption:Mlpost.Picture.t ->
        ?histlabel:Mlpost.Command.vposition *
                   Mlpost.Picture.t Mlpost.Hist.labels ->
        ?vlabel:Mlpost.Plot.labels ->
        ?hlabel:Mlpost.Picture.t list -> float list -> Mlpost.Command.t
      val compare :
        ?width:Mlpost.Num.t ->
        ?height:Mlpost.Num.t ->
        ?padding:Mlpost.Num.t ->
        ?fill:Mlpost.Color.t list ->
        ?perspective:bool ->
        ?hcaption:Mlpost.Picture.t ->
        ?vcaption:Mlpost.Picture.t ->
        ?histlabel:Mlpost.Command.vposition *
                   Mlpost.Picture.t list Mlpost.Hist.labels ->
        ?vlabel:Mlpost.Plot.labels ->
        ?hlabel:Mlpost.Picture.t list -> float list list -> Mlpost.Command.t
      val stack :
        ?width:Mlpost.Num.t ->
        ?height:Mlpost.Num.t ->
        ?padding:Mlpost.Num.t ->
        ?fill:Mlpost.Color.t list ->
        ?perspective:bool ->
        ?hcaption:Mlpost.Picture.t ->
        ?vcaption:Mlpost.Picture.t ->
        ?histlabel:Mlpost.Command.vposition *
                   Mlpost.Picture.t list Mlpost.Hist.labels ->
        ?vlabel:Mlpost.Plot.labels ->
        ?hlabel:Mlpost.Picture.t list -> float list list -> Mlpost.Command.t
    end
  module Radar :
    sig
      val stack :
        ?radius:Mlpost.Num.t ->
        ?color:Mlpost.Color.t list ->
        ?pen:Mlpost.Pen.t ->
        ?style:Mlpost.Dash.t list ->
        ?ticks:float ->
        ?label:string list ->
        ?scale:float list -> float list list -> Mlpost.Picture.t
      val compare :
        ?radius:Mlpost.Num.t ->
        ?color:Mlpost.Color.t list ->
        ?fill:bool ->
        ?pen:Mlpost.Pen.t ->
        ?style:Mlpost.Dash.t list ->
        ?ticks:float ->
        ?label:string list ->
        ?scale:float list -> float list list -> Mlpost.Picture.t list
    end
  module Legend :
    sig
      val legend :
        ?ensstroke:Mlpost.Color.t ->
        ?colstroke:Mlpost.Color.t ->
        ?fill:Mlpost.Color.t ->
        (Mlpost.Color.t * string) list -> Mlpost.Picture.t
    end
  module Misc :
    sig
      val write_to_file : string -> (Pervasives.out_channel -> 'a) -> unit
      val write_to_formatted_file :
        string -> (Format.formatter -> 'a) -> unit
      val print_option :
        string ->
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a option -> unit
      val print_list :
        ('-> unit -> 'b) -> ('-> '-> unit) -> '-> 'c list -> unit
      val space : Format.formatter -> unit -> unit
      val comma : Format.formatter -> unit -> unit
      val fold_from_to : ('-> int -> 'a) -> '-> int -> int -> 'a
      val call_cmd :
        ?inv:bool -> ?outv:bool -> ?verbose:bool -> string -> int * string
    end
  module Metapost :
    sig
      val set_filename_prefix : string -> unit
      val generate_mp :
        string ->
        ?prelude:string -> ?eps:bool -> (int * Mlpost.Command.t) list -> unit
      val generate :
        string ->
        ?prelude:string ->
        ?pdf:bool ->
        ?eps:bool ->
        ?verbose:bool -> ?clean:bool -> (int * Mlpost.Command.t) list -> unit
      val emit : string -> Mlpost.Command.t -> unit
      val dump :
        ?prelude:string ->
        ?pdf:bool ->
        ?eps:bool -> ?verbose:bool -> ?clean:bool -> string -> unit
      val dump_mp : ?prelude:string -> string -> unit
      val dump_png :
        ?prelude:string -> ?verbose:bool -> ?clean:bool -> string -> unit
      val read_prelude_from_tex_file : string -> string
      val dump_tex : ?prelude:string -> string -> unit
      val slideshow :
        Mlpost.Command.t list -> int -> (int * Mlpost.Command.t) list
      val emit_slideshow : string -> Mlpost.Command.t list -> unit
      val dumpable : unit -> unit
      val depend : string -> unit
    end
  module Generate :
    sig
      val generate_tex :
        ?pdf:bool -> string -> string -> string -> (int * 'a) list -> unit
      val generate_tex_cairo :
        string -> string -> string -> string -> (int * 'a) list -> unit
    end
  module Concrete :
    sig
      val supported : bool
      module CPoint :
        sig
          type t = Cairo.point = { x : float; y : float; }
          val add :
            Mlpost.Concrete.CPoint.t ->
            Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
          val sub :
            Mlpost.Concrete.CPoint.t ->
            Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
          val opp : Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
          val mult :
            float -> Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
          val div :
            Mlpost.Concrete.CPoint.t -> float -> Mlpost.Concrete.CPoint.t
          module Infix :
            sig
              val ( +/ ) :
                Mlpost.Concrete.CPoint.t ->
                Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
              val ( -/ ) :
                Mlpost.Concrete.CPoint.t ->
                Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
              val ( */ ) :
                float -> Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t
              val ( // ) :
                Mlpost.Concrete.CPoint.t -> float -> Mlpost.Concrete.CPoint.t
            end
          val print : Format.formatter -> Mlpost.Concrete.CPoint.t -> unit
        end
      module CPath :
        sig
          type t
          type abscissa = float
          val length : Mlpost.Concrete.CPath.t -> float
          val is_closed : Mlpost.Concrete.CPath.t -> bool
          val is_a_point :
            Mlpost.Concrete.CPath.t -> Mlpost.Concrete.CPoint.t option
          val intersection :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.t ->
            (Mlpost.Concrete.CPath.abscissa * Mlpost.Concrete.CPath.abscissa)
            list
          val one_intersection :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.abscissa * Mlpost.Concrete.CPath.abscissa
          val reverse : Mlpost.Concrete.CPath.t -> Mlpost.Concrete.CPath.t
          val iter :
            (Mlpost.Concrete.CPoint.t ->
             Mlpost.Concrete.CPoint.t ->
             Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t -> unit) ->
            Mlpost.Concrete.CPath.t -> unit
          val fold_left :
            ('->
             Mlpost.Concrete.CPoint.t ->
             Mlpost.Concrete.CPoint.t ->
             Mlpost.Concrete.CPoint.t -> Mlpost.Concrete.CPoint.t -> 'a) ->
            '-> Mlpost.Concrete.CPath.t -> 'a
          val cut_before :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.t -> Mlpost.Concrete.CPath.t
          val cut_after :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.t -> Mlpost.Concrete.CPath.t
          val split :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.abscissa ->
            Mlpost.Concrete.CPath.t * Mlpost.Concrete.CPath.t
          val subpath :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.abscissa ->
            Mlpost.Concrete.CPath.abscissa -> Mlpost.Concrete.CPath.t
          val direction_of_abscissa :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.abscissa -> Mlpost.Concrete.CPoint.t
          val point_of_abscissa :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.abscissa -> Mlpost.Concrete.CPoint.t
          val bounding_box :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPoint.t * Mlpost.Concrete.CPoint.t
          val dist_min_point :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPoint.t ->
            float * Mlpost.Concrete.CPath.abscissa
          val dist_min_path :
            Mlpost.Concrete.CPath.t ->
            Mlpost.Concrete.CPath.t ->
            float *
            (Mlpost.Concrete.CPath.abscissa * Mlpost.Concrete.CPath.abscissa)
          val print : Format.formatter -> Mlpost.Concrete.CPath.t -> unit
        end
      module CTransform :
        sig
          type t =
            Cairo.matrix = {
            xx : float;
            yx : float;
            xy : float;
            yy : float;
            x0 : float;
            y0 : float;
          }
        end
      val float_of_num : Mlpost.Num.t -> float
      val compute_nums : unit -> (Mlpost.Num.t -> unit) * (unit -> unit)
      val cpoint_of_point : Mlpost.Point.t -> Mlpost.Concrete.CPoint.t
      val cpath_of_path : Mlpost.Path.t -> Mlpost.Concrete.CPath.t
      val ctransform_of_transform :
        Mlpost.Transform.t -> Mlpost.Concrete.CTransform.t
      val baselines : string -> float list
      val num_of_float : float -> Mlpost.Num.t
      val point_of_cpoint : Mlpost.Concrete.CPoint.t -> Mlpost.Point.t
      val path_of_cpath : Mlpost.Concrete.CPath.t -> Mlpost.Path.t
      val transform_of_ctransform :
        Mlpost.Concrete.CTransform.t -> Mlpost.Transform.t
      val set_verbosity : bool -> unit
      val set_prelude : string -> unit
      val set_prelude2 : string option -> unit
      val set_t1disasm : string option -> unit
    end
  module Cairost :
    sig
      val supported : bool
      val emit_pdf : ?msg_error:float -> string -> Mlpost.Command.t -> unit
      val emit_ps : string -> Mlpost.Command.t -> unit
      val emit_png : string -> Mlpost.Command.t -> unit
      val emit_svg : string -> Mlpost.Command.t -> unit
      val emit_pdfs : string -> Mlpost.Command.t list -> unit
      val dump_pdf : unit -> unit
      val dump_ps : unit -> unit
      val dump_png : unit -> unit
      val dump_svg : unit -> unit
      val dump_pdfs : string -> unit
      val generate_pdfs : string -> (int * Mlpost.Command.t) list -> unit
      type cairo_t = Cairo.t
      val emit_cairo :
        Mlpost.Cairost.cairo_t -> float * float -> Mlpost.Command.t -> unit
    end
  module Metapost_tool :
    sig val read_prelude_from_tex_file : string -> string end
end