sig   type segment =       [ `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 ]   type path = Vg.Vgr.Private.Data.segment list   val of_path : Vg.P.t -> Vg.Vgr.Private.Data.path   type tr = Move of Gg.v2 | Rot of float | Scale of Gg.v2 | Matrix of Gg.m3   val tr_to_m3 : Vg.Vgr.Private.Data.tr -> Gg.M3.t   val inv_tr_to_m3 : Vg.Vgr.Private.Data.tr -> Gg.M3.t   type blender = [ `Atop | `Copy | `In | `Out | `Over | `Plus | `Xor ]   type primitive =       Const of Gg.color     | Axial of Gg.Color.stops * Gg.p2 * Gg.p2     | Radial of Gg.Color.stops * Gg.p2 * Gg.p2 * float     | Raster of Gg.box2 * Gg.raster   type glyph_run = {     font : Vg.font;     text : string option;     o : Gg.p2;     blocks : bool * (int * int) list;     advances : Gg.v2 list;     glyphs : Vg.glyph list;   }   type image =       Primitive of Vg.Vgr.Private.Data.primitive     | Cut of Vg.P.area * Vg.Vgr.Private.Data.path * Vg.Vgr.Private.Data.image     | Cut_glyphs of Vg.P.area * Vg.Vgr.Private.Data.glyph_run *         Vg.Vgr.Private.Data.image     | Blend of Vg.Vgr.Private.Data.blender * float option *         Vg.Vgr.Private.Data.image * Vg.Vgr.Private.Data.image     | Tr of Vg.Vgr.Private.Data.tr * Vg.Vgr.Private.Data.image   val of_image : Vg.I.t -> Vg.Vgr.Private.Data.image end