    sig
      type float32_elt
      and float64_elt
      and int8_signed_elt
      and int8_unsigned_elt
      and int16_signed_elt
      and int16_unsigned_elt
      and int_elt
      and int32_elt
      and int64_elt
      and nativeint_elt
      and ('a, 'b) kind
      val float32 : (float, Bigarray.float32_elt) Bigarray.kind
      val float64 : (float, Bigarray.float64_elt) Bigarray.kind
      val int8_signed : (int, Bigarray.int8_signed_elt) Bigarray.kind
      val int8_unsigned : (int, Bigarray.int8_unsigned_elt) Bigarray.kind
      val int16_signed : (int, Bigarray.int16_signed_elt) Bigarray.kind
      val int16_unsigned : (int, Bigarray.int16_unsigned_elt) Bigarray.kind
      val int : (int, Bigarray.int_elt) Bigarray.kind
      val int32 : (int32, Bigarray.int32_elt) Bigarray.kind
      val int64 : (int64, Bigarray.int64_elt) Bigarray.kind
      val nativeint : (nativeint, Bigarray.nativeint_elt) Bigarray.kind
      val char : (char, Bigarray.int8_unsigned_elt) Bigarray.kind
      type c_layout
      and fortran_layout
      and 'a layout
      val c_layout : Bigarray.c_layout Bigarray.layout
      val fortran_layout : Bigarray.fortran_layout Bigarray.layout
      module Genarray :
        sig
          type ('a, 'b, 'c) t
          external create :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout -> int array -> ('a, 'b, 'c) Bigarray.Genarray.t
            = "bigarray_create"
          external num_dims : ('a, 'b, 'c) Bigarray.Genarray.t -> int
            = "bigarray_num_dims"
          external nth_dim : ('a, 'b, 'c) Bigarray.Genarray.t -> int -> int
            = "bigarray_dim"
          external get : ('a, 'b, 'c) Bigarray.Genarray.t -> int array -> 'a
            = "bigarray_get_generic"
          external set :
            ('a, 'b, 'c) Bigarray.Genarray.t -> int array -> 'a -> unit
            = "bigarray_set_generic"
          external sub_left :
            ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t ->
            int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t
            = "bigarray_sub"
          external sub_right :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t ->
            int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t
            = "bigarray_sub"
          external slice_left :
            ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t ->
            int array -> ('a, 'b, Bigarray.c_layout) Bigarray.Genarray.t
            = "bigarray_slice"
          external slice_right :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t ->
            int array -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Genarray.t
            = "bigarray_slice"
          external blit :
            ('a, 'b, 'c) Bigarray.Genarray.t ->
            ('a, 'b, 'c) Bigarray.Genarray.t -> unit = "bigarray_blit"
          external fill : ('a, 'b, 'c) Bigarray.Genarray.t -> 'a -> unit
            = "bigarray_fill"
          external map_file :
            Unix.file_descr ->
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            bool -> int array -> ('a, 'b, 'c) Bigarray.Genarray.t
            = "bigarray_map_file"
        end
      module Array1 :
        sig
          type ('a, 'b, 'c) t
          val create :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout -> int -> ('a, 'b, 'c) Bigarray.Array1.t
          val dim : ('a, 'b, 'c) Bigarray.Array1.t -> int
          external get : ('a, 'b, 'c) Bigarray.Array1.t -> int -> 'a
            = "%bigarray_ref_1"
          external set : ('a, 'b, 'c) Bigarray.Array1.t -> int -> 'a -> unit
            = "%bigarray_set_1"
          external sub :
            ('a, 'b, 'c) Bigarray.Array1.t ->
            int -> int -> ('a, 'b, 'c) Bigarray.Array1.t = "bigarray_sub"
          external blit :
            ('a, 'b, 'c) Bigarray.Array1.t ->
            ('a, 'b, 'c) Bigarray.Array1.t -> unit = "bigarray_blit"
          external fill : ('a, 'b, 'c) Bigarray.Array1.t -> 'a -> unit
            = "bigarray_fill"
          val of_array :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout -> 'a array -> ('a, 'b, 'c) Bigarray.Array1.t
          val map_file :
            Unix.file_descr ->
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout -> bool -> int -> ('a, 'b, 'c) Bigarray.Array1.t
        end
      module Array2 :
        sig
          type ('a, 'b, 'c) t
          val create :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout -> int -> int -> ('a, 'b, 'c) Bigarray.Array2.t
          val dim1 : ('a, 'b, 'c) Bigarray.Array2.t -> int
          val dim2 : ('a, 'b, 'c) Bigarray.Array2.t -> int
          external get : ('a, 'b, 'c) Bigarray.Array2.t -> int -> int -> 'a
            = "%bigarray_ref_2"
          external set :
            ('a, 'b, 'c) Bigarray.Array2.t -> int -> int -> 'a -> unit
            = "%bigarray_set_2"
          external sub_left :
            ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t ->
            int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t
            = "bigarray_sub"
          external sub_right :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Array2.t ->
            int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array2.t
            = "bigarray_sub"
          val slice_left :
            ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t ->
            int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array1.t
          val slice_right :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Array2.t ->
            int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array1.t
          external blit :
            ('a, 'b, 'c) Bigarray.Array2.t ->
            ('a, 'b, 'c) Bigarray.Array2.t -> unit = "bigarray_blit"
          external fill : ('a, 'b, 'c) Bigarray.Array2.t -> 'a -> unit
            = "bigarray_fill"
          val of_array :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            'a array array -> ('a, 'b, 'c) Bigarray.Array2.t
          val map_file :
            Unix.file_descr ->
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            bool -> int -> int -> ('a, 'b, 'c) Bigarray.Array2.t
        end
      module Array3 :
        sig
          type ('a, 'b, 'c) t
          val create :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            int -> int -> int -> ('a, 'b, 'c) Bigarray.Array3.t
          val dim1 : ('a, 'b, 'c) Bigarray.Array3.t -> int
          val dim2 : ('a, 'b, 'c) Bigarray.Array3.t -> int
          val dim3 : ('a, 'b, 'c) Bigarray.Array3.t -> int
          external get :
            ('a, 'b, 'c) Bigarray.Array3.t -> int -> int -> int -> 'a
            = "%bigarray_ref_3"
          external set :
            ('a, 'b, 'c) Bigarray.Array3.t -> int -> int -> int -> 'a -> unit
            = "%bigarray_set_3"
          external sub_left :
            ('a, 'b, Bigarray.c_layout) Bigarray.Array3.t ->
            int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array3.t
            = "bigarray_sub"
          external sub_right :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Array3.t ->
            int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array3.t
            = "bigarray_sub"
          val slice_left_1 :
            ('a, 'b, Bigarray.c_layout) Bigarray.Array3.t ->
            int -> int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array1.t
          val slice_right_1 :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Array3.t ->
            int -> int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array1.t
          val slice_left_2 :
            ('a, 'b, Bigarray.c_layout) Bigarray.Array3.t ->
            int -> ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t
          val slice_right_2 :
            ('a, 'b, Bigarray.fortran_layout) Bigarray.Array3.t ->
            int -> ('a, 'b, Bigarray.fortran_layout) Bigarray.Array2.t
          external blit :
            ('a, 'b, 'c) Bigarray.Array3.t ->
            ('a, 'b, 'c) Bigarray.Array3.t -> unit = "bigarray_blit"
          external fill : ('a, 'b, 'c) Bigarray.Array3.t -> 'a -> unit
            = "bigarray_fill"
          val of_array :
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            'a array array array -> ('a, 'b, 'c) Bigarray.Array3.t
          val map_file :
            Unix.file_descr ->
            ('a, 'b) Bigarray.kind ->
            'c Bigarray.layout ->
            bool -> int -> int -> int -> ('a, 'b, 'c) Bigarray.Array3.t
        end
      external genarray_of_array1 :
        ('a, 'b, 'c) Bigarray.Array1.t -> ('a, 'b, 'c) Bigarray.Genarray.t
        = "%identity"
      external genarray_of_array2 :
        ('a, 'b, 'c) Bigarray.Array2.t -> ('a, 'b, 'c) Bigarray.Genarray.t
        = "%identity"
      external genarray_of_array3 :
        ('a, 'b, 'c) Bigarray.Array3.t -> ('a, 'b, 'c) Bigarray.Genarray.t
        = "%identity"
      val array1_of_genarray :
        ('a, 'b, 'c) Bigarray.Genarray.t -> ('a, 'b, 'c) Bigarray.Array1.t
      val array2_of_genarray :
        ('a, 'b, 'c) Bigarray.Genarray.t -> ('a, 'b, 'c) Bigarray.Array2.t
      val array3_of_genarray :
        ('a, 'b, 'c) Bigarray.Genarray.t -> ('a, 'b, 'c) Bigarray.Array3.t
      val reshape :
        ('a, 'b, 'c) Bigarray.Genarray.t ->
        int array -> ('a, 'b, 'c) Bigarray.Genarray.t
      val reshape_1 :
        ('a, 'b, 'c) Bigarray.Genarray.t -> int -> ('a, 'b, 'c) Bigarray.Array1.t
      val reshape_2 :
        ('a, 'b, 'c) Bigarray.Genarray.t ->
        int -> int -> ('a, 'b, 'c) Bigarray.Array2.t
      val reshape_3 :
        ('a, 'b, 'c) Bigarray.Genarray.t ->
        int -> int -> int -> ('a, 'b, 'c) Bigarray.Array3.t
    end