sig
  type (!'a, !'b, !'c) t
  external create :
    ('a, 'b) Bigarray.kind ->
    'Bigarray.layout -> int array -> ('a, 'b, 'c) Bigarray.Genarray.t
    = "caml_ba_create"
  val init :
    ('a, 'b) Bigarray.kind ->
    'Bigarray.layout ->
    int array -> (int array -> 'a) -> ('a, 'b, 'c) Bigarray.Genarray.t
  external num_dims : ('a, 'b, 'c) Bigarray.Genarray.t -> int
    = "caml_ba_num_dims"
  val dims : ('a, 'b, 'c) Bigarray.Genarray.t -> int array
  external nth_dim : ('a, 'b, 'c) Bigarray.Genarray.t -> int -> int
    = "caml_ba_dim"
  external kind : ('a, 'b, 'c) Bigarray.Genarray.t -> ('a, 'b) Bigarray.kind
    = "caml_ba_kind"
  external layout : ('a, 'b, 'c) Bigarray.Genarray.t -> 'Bigarray.layout
    = "caml_ba_layout"
  external change_layout :
    ('a, 'b, 'c) Bigarray.Genarray.t ->
    'Bigarray.layout -> ('a, 'b, 'd) Bigarray.Genarray.t
    = "caml_ba_change_layout"
  val size_in_bytes : ('a, 'b, 'c) Bigarray.Genarray.t -> int
  external get : ('a, 'b, 'c) Bigarray.Genarray.t -> int array -> 'a
    = "caml_ba_get_generic"
  external set : ('a, 'b, 'c) Bigarray.Genarray.t -> int array -> '-> unit
    = "caml_ba_set_generic"
  external sub_left :
    ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t ->
    int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t
    = "caml_ba_sub"
  external sub_right :
    ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t ->
    int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t
    = "caml_ba_sub"
  external slice_left :
    ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t ->
    int array -> ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t
    = "caml_ba_slice"
  external slice_right :
    ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t ->
    int array -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t
    = "caml_ba_slice"
  external blit :
    ('a, 'b, 'c) Bigarray.Genarray.t ->
    ('a, 'b, 'c) Bigarray.Genarray.t -> unit = "caml_ba_blit"
  external fill : ('a, 'b, 'c) Bigarray.Genarray.t -> '-> unit
    = "caml_ba_fill"
end