sig
  type 'a t = 'a array
  type 'a enumerable = 'a t
  type 'a mappable = 'a t
  external length : 'a array -> int = "%array_length"
  external get : 'a array -> int -> 'a = "%array_safe_get"
  external set : 'a array -> int -> '-> unit = "%array_safe_set"
  external make : int -> '-> 'a array = "caml_make_vect"
  external create_float : int -> float array = "caml_make_float_vect"
  val make_float : int -> float array
  val of_seq : 'Seq.t -> 'a array
  val to_seq : 'a array -> 'Seq.t
  val to_seqi : 'a array -> (int * 'a) Seq.t
  external create : int -> '-> 'a array = "caml_make_vect"
  val init : int -> (int -> 'a) -> 'a array
  val make_matrix : int -> int -> '-> 'a array array
  val create_matrix : int -> int -> '-> 'a array array
  val append : 'a array -> 'a array -> 'a array
  val concat : 'a array list -> 'a array
  val sub : 'a array -> int -> int -> 'a array
  val copy : 'a array -> 'a array
  val fill : 'a array -> int -> int -> '-> unit
  val blit : 'a array -> int -> 'a array -> int -> int -> unit
  val to_list : 'a array -> 'a list
  val split : ('a * 'b) array -> 'a array * 'b array
  val combine : 'a array -> 'b array -> ('a * 'b) array
  val of_list : 'a list -> 'a array
  val max : 'a array -> 'a
  val min : 'a array -> 'a
  val min_max : 'a array -> 'a * 'a
  val sum : int array -> int
  val fsum : float array -> float
  val kahan_sum : float array -> float
  val avg : int array -> float
  val favg : float array -> float
  val left : 'a array -> int -> 'a array
  val right : 'a array -> int -> 'a array
  val head : 'a array -> int -> 'a array
  val tail : 'a array -> int -> 'a array
  val iter : ('-> unit) -> 'a array -> unit
  val map : ('-> 'b) -> 'a array -> 'b array
  val iteri : (int -> '-> unit) -> 'a array -> unit
  val mapi : (int -> '-> 'b) -> 'a array -> 'b array
  val fold_left : ('-> '-> 'a) -> '-> 'b array -> 'a
  val fold_left_map :
    ('-> '-> 'a * 'c) -> '-> 'b array -> 'a * 'c array
  val fold_while :
    ('acc -> '-> bool) ->
    ('acc -> '-> 'acc) -> 'acc -> 'a array -> 'acc * int
  val fold : ('-> '-> 'a) -> '-> 'b array -> 'a
  val fold_right : ('-> '-> 'a) -> 'b array -> '-> 'a
  val modify : ('-> 'a) -> 'a array -> unit
  val modifyi : (int -> '-> 'a) -> 'a array -> unit
  val fold_lefti : ('-> int -> '-> 'a) -> '-> 'b array -> 'a
  val fold_righti : (int -> '-> '-> 'a) -> 'b array -> '-> 'a
  val reduce : ('-> '-> 'a) -> 'a array -> 'a
  val singleton : '-> 'a array
  val sort : ('-> '-> int) -> 'a array -> unit
  val stable_sort : ('-> '-> int) -> 'a array -> unit
  val fast_sort : ('-> '-> int) -> 'a array -> unit
  val decorate_stable_sort : ('-> 'b) -> 'a array -> 'a array
  val decorate_fast_sort : ('-> 'b) -> 'a array -> 'a array
  val bsearch :
    'BatOrd.ord ->
    'a array ->
    '->
    [ `All_bigger | `All_lower | `At of int | `Empty | `Just_after of int ]
  val pivot_split : 'BatOrd.ord -> 'a array -> '-> int * int
  val iter2 : ('-> '-> unit) -> 'a array -> 'b array -> unit
  val iter2i : (int -> '-> '-> unit) -> 'a array -> 'b array -> unit
  val for_all2 : ('-> '-> bool) -> 'a array -> 'b array -> bool
  val exists2 : ('-> '-> bool) -> 'a array -> 'b array -> bool
  val map2 : ('-> '-> 'c) -> 'a array -> 'b array -> 'c array
  val cartesian_product : 'a array -> 'b array -> ('a * 'b) array
  val for_all : ('-> bool) -> 'a array -> bool
  val exists : ('-> bool) -> 'a array -> bool
  val find_opt : ('-> bool) -> 'a array -> 'a option
  val find_map : ('-> 'b option) -> 'a array -> 'b option
  val mem : '-> 'a array -> bool
  val memq : '-> 'a array -> bool
  val filter : ('-> bool) -> 'a array -> 'a array
  val filteri : (int -> '-> bool) -> 'a array -> 'a array
  val filter_map : ('-> 'b option) -> 'a array -> 'b array
  val count_matching : ('-> bool) -> 'a array -> int
  val find_all : ('-> bool) -> 'a array -> 'a array
  val partition : ('-> bool) -> 'a array -> 'a array * 'a array
  val rev : 'a array -> 'a array
  val rev_in_place : 'a array -> unit
  val enum : 'a array -> 'BatEnum.t
  val of_enum : 'BatEnum.t -> 'a array
  val backwards : 'a array -> 'BatEnum.t
  val of_backwards : 'BatEnum.t -> 'a array
  val range : 'a array -> int BatEnum.t
  val insert : 'a array -> '-> int -> 'a array
  val remove_at : int -> 'a array -> 'a array
  val print :
    ?first:string ->
    ?last:string ->
    ?sep:string -> ('a, 'b) BatIO.printer -> ('a t, 'b) BatIO.printer
  val compare : 'BatOrd.comp -> 'a array BatOrd.comp
  val ord : 'BatOrd.ord -> 'a array BatOrd.ord
  val shuffle : ?state:Random.State.t -> 'a array -> unit
  val equal : 'BatOrd.eq -> 'a array BatOrd.eq
  module Exceptionless :
    sig
      val find : ('-> bool) -> 'a t -> 'a option
      val findi : ('-> bool) -> 'a t -> int option
    end
  module Incubator :
    sig
      module Eq :
        functor (T : BatOrd.Eq->
          sig type t = T.t array val eq : T.t array BatOrd.eq end
      module Ord :
        functor (T : BatOrd.Ord->
          sig type t = T.t array val ord : T.t array BatOrd.ord end
    end
  val is_sorted_by : ('-> 'b) -> 'a array -> bool
  external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
  external unsafe_set : 'a array -> int -> '-> unit = "%array_unsafe_set"
  module Floatarray :
    sig
      external create : int -> floatarray = "caml_floatarray_create"
      external length : floatarray -> int = "%floatarray_length"
      external get : floatarray -> int -> float = "%floatarray_safe_get"
      external set : floatarray -> int -> float -> unit
        = "%floatarray_safe_set"
      external unsafe_get : floatarray -> int -> float
        = "%floatarray_unsafe_get"
      external unsafe_set : floatarray -> int -> float -> unit
        = "%floatarray_unsafe_set"
    end
  val find : ('-> bool) -> 'BatArray.t -> 'a option
  val findi : ('-> bool) -> 'BatArray.t -> int option
  module Labels :
    sig
      val init : int -> f:(int -> 'a) -> 'a array
      val create : int -> init:'-> 'a array
      val make_matrix : dimx:int -> dimy:int -> '-> 'a array array
      val create_matrix : dimx:int -> dimy:int -> '-> 'a array array
      val sub : 'a array -> pos:int -> len:int -> 'a array
      val fill : 'a array -> pos:int -> len:int -> '-> unit
      val blit :
        src:'a array ->
        src_pos:int -> dst:'a array -> dst_pos:int -> len:int -> unit
      val iter : f:('-> unit) -> 'a array -> unit
      val iteri : f:(int -> '-> unit) -> 'a array -> unit
      val modify : f:('-> 'a) -> 'a array -> unit
      val modifyi : f:(int -> '-> 'a) -> 'a array -> unit
      val fold_left : f:('-> '-> 'a) -> init:'-> 'b array -> 'a
      val fold : f:('-> '-> 'a) -> init:'-> 'b array -> 'a
      val fold_right : f:('-> '-> 'a) -> 'b array -> init:'-> 'a
      val fold_while :
        p:('acc -> '-> bool) ->
        f:('acc -> '-> 'acc) -> init:'acc -> 'a array -> 'acc * int
      val sort : cmp:('-> '-> int) -> 'a array -> unit
      val stable_sort : cmp:('-> '-> int) -> 'a array -> unit
      val fast_sort : cmp:('-> '-> int) -> 'a array -> unit
      val iter2 :
        f:('-> '-> unit) -> 'BatArray.t -> 'BatArray.t -> unit
      val exists : f:('-> bool) -> 'BatArray.t -> bool
      val for_all : f:('-> bool) -> 'BatArray.t -> bool
      val iter2i :
        f:(int -> '-> '-> unit) -> 'BatArray.t -> 'BatArray.t -> unit
      val find_opt : f:('-> bool) -> 'BatArray.t -> 'a option
      val find_map : f:('-> 'b option) -> 'a array -> 'b option
      val map : f:('-> 'b) -> 'BatArray.t -> 'BatArray.t
      val mapi : f:(int -> '-> 'b) -> 'BatArray.t -> 'BatArray.t
      val filter : f:('-> bool) -> 'BatArray.t -> 'BatArray.t
      val filter_map : f:('-> 'b option) -> 'BatArray.t -> 'BatArray.t
      val count_matching : f:('-> bool) -> 'BatArray.t -> int
      module LExceptionless = BatArray.Labels.LExceptionless
      val find : f:('-> bool) -> 'BatArray.t -> 'a option
      val findi : f:('-> bool) -> 'BatArray.t -> int option
    end
  module Cap :
    sig
      type ('a, 'b) t = ('a, 'b) BatArray.Cap.t
        constraint 'b = [< `Read | `Write ]
      external length : ('a, [< `Read | `Write ]) t -> int = "%array_length"
      external get : ('a, [< `Read | `Write > `Read ]) t -> int -> 'a
        = "%array_safe_get"
      external set :
        ('a, [< `Read | `Write > `Write ]) t -> int -> '-> unit
        = "%array_safe_set"
      external make : int -> '-> ('a, [< `Read | `Write ]) t
        = "caml_make_vect"
      external create : int -> '-> ('a, [< `Read | `Write ]) t
        = "caml_make_vect"
      external make_float : int -> (float, [< `Read | `Write ]) t
        = "caml_make_float_vect"
      external of_array : 'a array -> ('a, [< `Read | `Write ]) t
        = "%identity"
      external to_array : ('a, [ `Read | `Write ]) t -> 'a array
        = "%identity"
      external read_only :
        ('a, [< `Read | `Write > `Read ]) t -> ('a, [ `Read ]) t
        = "%identity"
      external write_only :
        ('a, [< `Read | `Write > `Write ]) t -> ('a, [ `Write ]) t
        = "%identity"
      val init : int -> (int -> 'a) -> ('a, [< `Read | `Write ]) t
      val make_matrix :
        int ->
        int -> '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
      val create_matrix :
        int ->
        int -> '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
      val iter : ('-> unit) -> ('a, [< `Read | `Write > `Read ]) t -> unit
      val map :
        ('-> 'b) ->
        ('a, [< `Read | `Write > `Read ]) t -> ('b, [< `Read | `Write ]) t
      val iteri :
        (int -> '-> unit) -> ('a, [< `Read | `Write > `Read ]) t -> unit
      val mapi :
        (int -> '-> 'b) ->
        ('a, [< `Read | `Write > `Read ]) t -> ('b, [< `Read | `Write ]) t
      val modify : ('-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
      val modifyi : (int -> '-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
      val fold_left :
        ('-> '-> 'a) -> '-> ('b, [< `Read | `Write > `Read ]) t -> 'a
      val fold :
        ('-> '-> 'a) -> '-> ('b, [< `Read | `Write > `Read ]) t -> 'a
      val fold_right :
        ('-> '-> 'a) -> ('b, [< `Read | `Write > `Read ]) t -> '-> 'a
      val fold_while :
        ('acc -> '-> bool) ->
        ('acc -> '-> 'acc) ->
        'acc -> ('a, [< `Read | `Write > `Read ]) t -> 'acc * int
      val iter2 :
        ('-> '-> unit) ->
        ('a, [< `Read | `Write > `Read ]) t ->
        ('b, [< `Read | `Write > `Read ]) t -> unit
      val iter2i :
        (int -> '-> '-> unit) ->
        ('a, [< `Read | `Write > `Read ]) t ->
        ('b, [< `Read | `Write > `Read ]) t -> unit
      val for_all :
        ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
      val exists :
        ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
      val find_opt :
        ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> 'a option
      val find_map :
        ('-> 'b option) -> ('a, [< `Read | `Write > `Read ]) t -> 'b option
      val mem : '-> ('a, [< `Read | `Write > `Read ]) t -> bool
      val memq : '-> ('a, [< `Read | `Write > `Read ]) t -> bool
      val filter :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) t -> ('a, [< `Read | `Write ]) t
      val filter_map :
        ('-> 'b option) ->
        ('a, [< `Read | `Write > `Read ]) t -> ('b, [< `Read | `Write ]) t
      val count_matching :
        ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> int
      val find_all :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) t -> ('a, [< `Read | `Write ]) t
      val partition :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) t ->
        ('a, [< `Read | `Write ]) t * ('a, [< `Read | `Write ]) t
      val rev :
        ('a, [< `Read | `Write > `Read ]) t -> ('a, [< `Read | `Write ]) t
      val rev_in_place : ('a, [ `Read | `Write ]) t -> unit
      val append :
        ('a, [< `Read | `Write > `Read ]) t ->
        ('a, [< `Read | `Write > `Read ]) t -> ('a, [< `Read | `Write ]) t
      val concat :
        ('a, [< `Read | `Write > `Read ]) t list ->
        ('a, [< `Read | `Write ]) t
      val sub :
        ('a, [< `Read | `Write > `Read ]) t ->
        int -> int -> ('a, [< `Read | `Write ]) t
      val copy : ('a, [< `Read | `Write > `Read ]) t -> 'a array
      val fill :
        ('a, [< `Read | `Write > `Write ]) t -> int -> int -> '-> unit
      val blit :
        ('a, [< `Read | `Write > `Read ]) t ->
        int -> ('a, [< `Read | `Write > `Write ]) t -> int -> int -> unit
      val enum : ('a, [< `Read | `Write > `Read ]) t -> 'BatEnum.t
      val of_enum : 'BatEnum.t -> ('a, [< `Read | `Write ]) t
      val backwards : ('a, [< `Read | `Write > `Read ]) t -> 'BatEnum.t
      val of_backwards : 'BatEnum.t -> ('a, [< `Read | `Write ]) t
      val to_list : ('a, [< `Read | `Write > `Read ]) t -> 'a list
      val split :
        ('a * 'b, [< `Read | `Write > `Read ]) t ->
        ('a, [< `Read | `Write ]) t * ('b, [< `Read | `Write ]) t
      val combine :
        ('a, [< `Read | `Write > `Read ]) t ->
        ('b, [< `Read | `Write > `Read ]) t ->
        ('a * 'b, [< `Read | `Write > `Read ]) t
      val pivot_split :
        'BatOrd.ord ->
        ('a, [< `Read | `Write > `Read ]) t -> '-> int * int
      val of_list : 'a list -> ('a, [< `Read | `Write ]) t
      val sort : ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
      val stable_sort :
        ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
      val fast_sort : ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
      val print :
        ?first:string ->
        ?last:string ->
        ?sep:string ->
        ('BatIO.output -> '-> unit) ->
        'BatIO.output -> ('b, [< `Read | `Write > `Read ]) t -> unit
      val compare :
        'BatOrd.comp -> ('a, [< `Read | `Write > `Read ]) t BatOrd.comp
      val ord :
        'BatOrd.ord -> ('a, [< `Read | `Write > `Read ]) t BatOrd.ord
      val equal :
        'BatOrd.eq -> ('a, [< `Read | `Write > `Read ]) t BatOrd.eq
      module Exceptionless = BatArray.Cap.Exceptionless
      module Labels = BatArray.Cap.Labels
      external unsafe_get : ('a, [< `Read | `Write > `Read ]) t -> int -> 'a
        = "%array_unsafe_get"
      external unsafe_set :
        ('a, [< `Read | `Write > `Write ]) t -> int -> '-> unit
        = "%array_unsafe_set"
      val find :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a option
      val findi :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int option
    end
end