sig
  type cap = [ `Butt | `Round | `Square ]
  type join = [ `Bevel | `Miter | `Round ]
  type dashes = float * float list
  type outline = {
    width : float;
    cap : Vg.P.cap;
    join : Vg.P.join;
    miter_angle : float;
    dashes : Vg.P.dashes option;
  }
  val o : Vg.P.outline
  val pp_outline : Format.formatter -> Vg.P.outline -> unit
  type area = [ `Aeo | `Anz | `O of Vg.P.outline ]
  val pp_area : Format.formatter -> Vg.P.area -> unit
  type t = Vg.path
  val empty : Vg.path
  val sub : ?rel:bool -> Gg.p2 -> Vg.path -> Vg.path
  val line : ?rel:bool -> Gg.p2 -> Vg.path -> Vg.path
  val qcurve : ?rel:bool -> Gg.p2 -> Gg.p2 -> Vg.path -> Vg.path
  val ccurve : ?rel:bool -> Gg.p2 -> Gg.p2 -> Gg.p2 -> Vg.path -> Vg.path
  val earc :
    ?rel:bool ->
    ?large:bool ->
    ?cw:bool -> ?angle:float -> Gg.size2 -> Gg.p2 -> Vg.path -> Vg.path
  val close : Vg.path -> Vg.path
  val circle : ?rel:bool -> Gg.p2 -> float -> Vg.path -> Vg.path
  val ellipse :
    ?rel:bool -> ?angle:float -> Gg.p2 -> Gg.size2 -> Vg.path -> Vg.path
  val rect : ?rel:bool -> Gg.box2 -> Vg.path -> Vg.path
  val rrect : ?rel:bool -> Gg.box2 -> Gg.size2 -> Vg.path -> Vg.path
  val last_pt : Vg.path -> Gg.p2
  val append : Vg.path -> Vg.path -> Vg.path
  val tr : Gg.m3 -> Vg.path -> Vg.path
  type fold =
      [ `Ccurve of Gg.p2 * Gg.p2 * Gg.p2
      | `Close
      | `Earc of bool * bool * float * Gg.size2 * Gg.p2
      | `Line of Gg.p2
      | `Qcurve of Gg.p2 * Gg.p2
      | `Sub of Gg.p2 ]
  val fold : ?rev:bool -> ('-> Vg.P.fold -> 'a) -> '-> Vg.path -> 'a
  val is_empty : Vg.path -> bool
  val equal : Vg.path -> Vg.path -> bool
  val equal_f : (float -> float -> bool) -> Vg.path -> Vg.path -> bool
  val compare : Vg.path -> Vg.path -> int
  val compare_f : (float -> float -> int) -> Vg.path -> Vg.path -> int
  val to_string : Vg.path -> string
  val pp : Format.formatter -> Vg.path -> unit
  val pp_f :
    (Format.formatter -> float -> unit) ->
    Format.formatter -> Vg.path -> unit
end