sig
  module type CNTVEC =
    sig type n val value : (Slap_Z.Vec.CNTVEC.n, 'cnt) Slap_Z.vec end
  module type DSCVEC =
    sig
      type n
      val value : (Slap_Z.Vec.DSCVEC.n, Slap_misc.dsc) Slap_Z.vec
    end
  val cnt : ('n, Slap_misc.cnt) Slap_Z.vec -> ('n, 'cnt) Slap_Z.vec
  val empty : (Slap_size.z, 'cnt) Slap_Z.vec
  val create : 'Slap_size.t -> ('n, 'cnt) Slap_Z.vec
  val make : 'Slap_size.t -> Slap_Z.num_type -> ('n, 'cnt) Slap_Z.vec
  val make0 : 'Slap_size.t -> ('n, 'cnt) Slap_Z.vec
  val make1 : 'Slap_size.t -> ('n, 'cnt) Slap_Z.vec
  val init :
    'Slap_size.t -> (int -> Slap_Z.num_type) -> ('n, 'cnt) Slap_Z.vec
  val dim : ('n, 'cd) Slap_Z.vec -> 'Slap_size.t
  val get_dyn : ('n, 'cd) Slap_Z.vec -> int -> Slap_Z.num_type
  val set_dyn : ('n, 'cd) Slap_Z.vec -> int -> Slap_Z.num_type -> unit
  val unsafe_get : ('n, 'cd) Slap_Z.vec -> int -> Slap_Z.num_type
  val unsafe_set : ('n, 'cd) Slap_Z.vec -> int -> Slap_Z.num_type -> unit
  val replace_dyn :
    ('n, 'cd) Slap_Z.vec ->
    int -> (Slap_Z.num_type -> Slap_Z.num_type) -> unit
  val cons :
    ?y:('Slap_size.s, 'y_cd) Slap_Z.vec ->
    Slap_Z.num_type ->
    ('n, 'x_cd) Slap_Z.vec -> ('Slap_size.s, 'y_cd) Slap_Z.vec
  val hd : ('Slap_size.s, 'x_cd) Slap_Z.vec -> Slap_Z.num_type
  val hd_dyn : ('n, 'x_cd) Slap_Z.vec -> Slap_Z.num_type
  val last : ('Slap_size.s, 'x_cd) Slap_Z.vec -> Slap_Z.num_type
  val last_dyn : ('n, 'x_cd) Slap_Z.vec -> Slap_Z.num_type
  val tl :
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('Slap_size.s, 'x_cd) Slap_Z.vec -> ('n, 'x_cd) Slap_Z.vec
  val tl_dyn :
    ?y:('Slap_size.p, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('Slap_size.p, 'x_cd) Slap_Z.vec
  val inits :
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('Slap_size.s, 'x_cd) Slap_Z.vec -> ('n, 'x_cd) Slap_Z.vec
  val inits_dyn :
    ?y:('Slap_size.p, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('Slap_size.p, 'x_cd) Slap_Z.vec
  val copy :
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val fill : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type -> unit
  val append :
    ('m, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> (('m, 'n) Slap_size.add, 'cnt) Slap_Z.vec
  val shared_rev : ('n, 'cd) Slap_Z.vec -> ('n, 'cd) Slap_Z.vec
  val rev : ('n, 'cd) Slap_Z.vec -> ('n, 'cd) Slap_Z.vec
  val to_array : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type array
  val of_array_dyn :
    'Slap_size.t -> Slap_Z.num_type array -> ('n, 'cnt) Slap_Z.vec
  val of_array : Slap_Z.num_type array -> (module Slap_Z.Vec.CNTVEC)
  module Of_array :
    functor (X : sig val value : Slap_Z.num_type array end-> CNTVEC
  val unsafe_of_array :
    'Slap_size.t -> Slap_Z.num_type array -> ('n, 'cnt) Slap_Z.vec
  val to_list : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type list
  val of_list_dyn :
    'Slap_size.t -> Slap_Z.num_type list -> ('n, 'cnt) Slap_Z.vec
  val of_list : Slap_Z.num_type list -> (module Slap_Z.Vec.CNTVEC)
  module Of_list :
    functor (X : sig val value : Slap_Z.num_type list end-> CNTVEC
  val unsafe_of_list :
    'Slap_size.t -> Slap_Z.num_type list -> ('n, 'cnt) Slap_Z.vec
  val to_bigarray :
    ('n, 'cd) Slap_Z.vec ->
    (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout) Bigarray.Array1.t
  val of_bigarray_dyn :
    ?share:bool ->
    'Slap_size.t ->
    (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout) Bigarray.Array1.t ->
    ('n, 'cnt) Slap_Z.vec
  val of_bigarray :
    ?share:bool ->
    (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout) Bigarray.Array1.t ->
    (module Slap_Z.Vec.CNTVEC)
  module Of_bigarray :
    functor
      (X : sig
             val share : bool
             val value :
               (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout)
               Bigarray.Array1.t
           end->
      CNTVEC
  val unsafe_of_bigarray :
    ?share:bool ->
    'Slap_size.t ->
    (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout) Bigarray.Array1.t ->
    ('n, 'cnt) Slap_Z.vec
  val of_array_c :
    Slap_Z.num_type array ->
    (Slap_Z.num_type, Slap_Z.prec, 'cnt) Slap_vec.dyn
  val of_list_c :
    Slap_Z.num_type list -> (Slap_Z.num_type, Slap_Z.prec, 'cnt) Slap_vec.dyn
  val of_bigarray_c :
    ?share:bool ->
    (Slap_Z.num_type, Slap_Z.prec, Bigarray.fortran_layout) Bigarray.Array1.t ->
    (Slap_Z.num_type, Slap_Z.prec, 'cnt) Slap_vec.dyn
  val map :
    (Slap_Z.num_type -> Slap_Z.num_type) ->
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val mapi :
    (int -> Slap_Z.num_type -> Slap_Z.num_type) ->
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val fold_left :
    ('accum -> Slap_Z.num_type -> 'accum) ->
    'accum -> ('n, 'cd) Slap_Z.vec -> 'accum
  val fold_lefti :
    (int -> 'accum -> Slap_Z.num_type -> 'accum) ->
    'accum -> ('n, 'cd) Slap_Z.vec -> 'accum
  val fold_right :
    (Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'cd) Slap_Z.vec -> 'accum -> 'accum
  val fold_righti :
    (int -> Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'cd) Slap_Z.vec -> 'accum -> 'accum
  val replace_all :
    ('n, 'cd) Slap_Z.vec -> (Slap_Z.num_type -> Slap_Z.num_type) -> unit
  val replace_alli :
    ('n, 'cd) Slap_Z.vec ->
    (int -> Slap_Z.num_type -> Slap_Z.num_type) -> unit
  val iter : (Slap_Z.num_type -> unit) -> ('n, 'cd) Slap_Z.vec -> unit
  val iteri :
    (int -> Slap_Z.num_type -> unit) -> ('n, 'cd) Slap_Z.vec -> unit
  val map2 :
    (Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type) ->
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val mapi2 :
    (int -> Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type) ->
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val fold_left2 :
    ('accum -> Slap_Z.num_type -> Slap_Z.num_type -> 'accum) ->
    'accum -> ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> 'accum
  val fold_lefti2 :
    (int -> 'accum -> Slap_Z.num_type -> Slap_Z.num_type -> 'accum) ->
    'accum -> ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> 'accum
  val fold_right2 :
    (Slap_Z.num_type -> Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> 'accum -> 'accum
  val fold_righti2 :
    (int -> Slap_Z.num_type -> Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> 'accum -> 'accum
  val iter2 :
    (Slap_Z.num_type -> Slap_Z.num_type -> unit) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> unit
  val iteri2 :
    (int -> Slap_Z.num_type -> Slap_Z.num_type -> unit) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> unit
  val map3 :
    (Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type) ->
    ?w:('n, 'w_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec ->
    ('n, 'z_cd) Slap_Z.vec -> ('n, 'w_cd) Slap_Z.vec
  val mapi3 :
    (int ->
     Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type) ->
    ?w:('n, 'w_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec ->
    ('n, 'z_cd) Slap_Z.vec -> ('n, 'w_cd) Slap_Z.vec
  val fold_left3 :
    ('accum ->
     Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> 'accum) ->
    'accum ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> 'accum
  val fold_lefti3 :
    (int ->
     'accum ->
     Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> 'accum) ->
    'accum ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> 'accum
  val fold_right3 :
    (Slap_Z.num_type ->
     Slap_Z.num_type -> Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> 'accum -> 'accum
  val fold_righti3 :
    (int ->
     Slap_Z.num_type ->
     Slap_Z.num_type -> Slap_Z.num_type -> 'accum -> 'accum) ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> 'accum -> 'accum
  val iter3 :
    (Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> unit) ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> unit
  val iteri3 :
    (int -> Slap_Z.num_type -> Slap_Z.num_type -> Slap_Z.num_type -> unit) ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec -> unit
  val for_all : (Slap_Z.num_type -> bool) -> ('n, 'cd) Slap_Z.vec -> bool
  val exists : (Slap_Z.num_type -> bool) -> ('n, 'cd) Slap_Z.vec -> bool
  val for_all2 :
    (Slap_Z.num_type -> Slap_Z.num_type -> bool) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> bool
  val exists2 :
    (Slap_Z.num_type -> Slap_Z.num_type -> bool) ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> bool
  val max : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type
  val min : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type
  val sum : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type
  val prod : ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type
  val add_const :
    Slap_Z.num_type ->
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val sqr_nrm2 : ?stable:bool -> ('n, 'cd) Slap_Z.vec -> float
  val ssqr : ?c:Slap_Z.num_type -> ('n, 'cd) Slap_Z.vec -> Slap_Z.num_type
  val sort :
    ?cmp:(Slap_Z.num_type -> Slap_Z.num_type -> int) ->
    ?decr:bool ->
    ?p:('n, 'p_cd) Slap_common.int_vec -> ('n, 'x_cd) Slap_Z.vec -> unit
  val neg :
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val reci :
    ?y:('n, 'y_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec
  val add :
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val sub :
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val mul :
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val div :
    ?z:('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val zpxy :
    ('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val zmxy :
    ('n, 'z_cd) Slap_Z.vec ->
    ('n, 'x_cd) Slap_Z.vec ->
    ('n, 'y_cd) Slap_Z.vec -> ('n, 'z_cd) Slap_Z.vec
  val ssqr_diff :
    ('n, 'x_cd) Slap_Z.vec -> ('n, 'y_cd) Slap_Z.vec -> Slap_Z.num_type
  val subcntvec_dyn :
    'Slap_size.t ->
    ?ofsx:int -> ('n, Slap_misc.cnt) Slap_Z.vec -> ('m, 'cnt) Slap_Z.vec
  val subdscvec_dyn :
    'Slap_size.t ->
    ?ofsx:int ->
    ?incx:int -> ('n, 'cd) Slap_Z.vec -> ('m, Slap_misc.dsc) Slap_Z.vec
  val subvec_dyn :
    'Slap_size.t ->
    ?ofsx:int ->
    ?incx:int -> ('n, 'cd) Slap_Z.vec -> ('m, Slap_misc.dsc) Slap_Z.vec
  val random :
    ?rnd_state:Random.State.t ->
    ?re_from:float ->
    ?re_range:float ->
    ?im_from:float ->
    ?im_range:float -> 'Slap_size.t -> ('n, 'cnt) Slap_Z.vec
end