sig
  type ('a, 'b) stat
  module Stat :
    sig
      type ('a, 'b) t = ('a, 'b) Vz.stat
      val add : ('a, 'b) Vz.stat -> '-> ('a, 'b) Vz.stat
      val add_flip : '-> ('a, 'b) Vz.stat -> ('a, 'b) Vz.stat
      val value : ('a, 'b) Vz.stat -> 'b
      val count : ('a, float) Vz.stat
      val min : ('-> float) -> ('a, float) Vz.stat
      val max : ('-> float) -> ('a, float) Vz.stat
      val range : ('-> float) -> ('a, float * float) Vz.stat
      val range_d :
        ?cmp:('-> '-> int) -> ('-> 'b) -> ('a, 'b list) Vz.stat
      val sum : ?nan:bool -> ('-> float) -> ('a, float) Vz.stat
      val mean : ?nan:bool -> ('-> float) -> ('a, float) Vz.stat
      val mean_var :
        ?nan:bool ->
        ?pop:bool -> ('-> float) -> ('a, float * float) Vz.stat
      val fold : ('-> '-> 'b) -> '-> ('a, 'b) Vz.stat
      val list : ('a, 'b) Vz.stat list -> ('a, 'b list) Vz.Stat.t
      val t2 : ('a, 'b) Vz.stat -> ('a, 'c) Vz.stat -> ('a, 'b * 'c) Vz.stat
      val t3 :
        ('a, 'b) Vz.stat ->
        ('a, 'c) Vz.stat -> ('a, 'd) Vz.stat -> ('a, 'b * 'c * 'd) Vz.stat
      val t4 :
        ('a, 'b) Vz.stat ->
        ('a, 'c) Vz.stat ->
        ('a, 'd) Vz.stat ->
        ('a, 'e) Vz.stat -> ('a, 'b * 'c * 'd * 'e) Vz.stat
      val t5 :
        ('a, 'b) Vz.stat ->
        ('a, 'c) Vz.stat ->
        ('a, 'd) Vz.stat ->
        ('a, 'e) Vz.stat ->
        ('a, 'f) Vz.stat -> ('a, 'b * 'c * 'd * 'e * 'f) Vz.stat
    end
  module Nice :
    sig
      val step : int -> float -> float -> float
      val step_floor : step:float -> float -> float
      val step_ceil : step:float -> float -> float
      val step_round : step:float -> float -> float
      val step_fold :
        step:float ->
        ('-> int -> float -> 'a) -> '-> float -> float -> 'a
      val step_outset : step:float -> float -> float -> float * float
      val step_inset : step:float -> float -> float -> float * float
    end
  type ('a, 'b) scale
  module Scale :
    sig
      type 'a set = [ `Discrete of 'a list | `Intervals of 'a list ]
      type ('a, 'b) t = ('a, 'b) Vz.scale
      val clamp : ('a, 'b) Vz.scale -> bool
      val nice : ('a, 'b) Vz.scale -> bool
      val dom : ('a, 'b) Vz.scale -> 'Vz.Scale.set
      val dom_raw : ('a, 'b) Vz.scale -> 'Vz.Scale.set
      val range : ('a, 'b) Vz.scale -> 'Vz.Scale.set
      val map : ('a, 'b) Vz.scale -> '-> 'b
      val partial_map : ('a, 'b) Vz.scale -> '-> 'b option
      val fold_ticks :
        ?bounds:bool ->
        int -> ('-> int -> float -> 'a) -> '-> (float, 'b) Vz.scale -> 'a
      val linear :
        ?clamp:bool ->
        ?nice:bool ->
        float * float -> float * float -> (float, float) Vz.scale
      val ordinal :
        ?cmp:('-> '-> int) -> 'a list -> 'b list -> ('a, 'b) Vz.scale
      val range_pts :
        ?rpad:float -> min:float -> max:float -> int -> float list
      val range_bands :
        ?rpad:float ->
        ?pad:float -> min:float -> max:float -> int -> float list
    end
  module Mark :
    sig
      type halign = [ `Center | `Left | `Right ]
      type valign = [ `Bottom | `Center | `Top ]
      val htick :
        ?path:Vg.path ->
        ?halign:Vz.Mark.halign ->
        ?valign:Vz.Mark.valign -> ?pos:Gg.v2 -> float -> Vg.path
      val vtick :
        ?path:Vg.path ->
        ?halign:Vz.Mark.halign ->
        ?valign:Vz.Mark.valign -> ?pos:Gg.v2 -> float -> Vg.path
      val dot :
        ?path:Vg.path ->
        ?halign:Vz.Mark.halign ->
        ?valign:Vz.Mark.valign -> ?pos:Gg.v2 -> float -> Vg.path
      val square :
        ?path:Vg.path ->
        ?halign:Vz.Mark.halign ->
        ?valign:Vz.Mark.valign -> ?pos:Gg.v2 -> float -> Vg.path
    end
  module Colors :
    sig
      val seq :
        ?a:float ->
        ?w:float ->
        ?s:float ->
        ?b:float -> ?c:float -> h:float -> unit -> float -> Gg.color
      val seq_d :
        ?a:float ->
        ?w:float ->
        ?s:float -> ?b:float -> ?c:float -> h:float -> int -> Gg.color array
      val div :
        ?a:float ->
        ?w:float ->
        ?s:float ->
        ?b:float ->
        ?c:float ->
        ?m:float -> h0:float -> h1:float -> unit -> float -> Gg.color
      val div_d :
        ?a:float ->
        ?w:float ->
        ?s:float ->
        ?b:float ->
        ?c:float -> ?m:float -> h0:float -> h1:float -> int -> Gg.color array
      type qual_fixed =
          [ `Brewer_accent_8
          | `Brewer_dark2_8
          | `Brewer_paired_12
          | `Brewer_pastel1_9
          | `Brewer_pastel2_8
          | `Brewer_set1_9
          | `Brewer_set2_8
          | `Brewer_set3_12
          | `Wijffelaars_17 ]
      val qual_fixed_size : Vz.Colors.qual_fixed -> int
      val qual_fixed :
        ?a:float -> ?size:int -> Vz.Colors.qual_fixed -> Gg.color array
      val qual_d :
        ?a:float ->
        ?eps:float ->
        ?r:float -> ?s:float -> ?b:float -> ?c:float -> int -> Gg.color array
    end
end