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