sig
  type ('a, 'b) ba_scalar_type =
      Int8 : (int, Bigarray.int8_signed_elt) Gg.Ba.ba_scalar_type
    | Int16 : (int, Bigarray.int16_signed_elt) Gg.Ba.ba_scalar_type
    | Int32 : (int32, Bigarray.int32_elt) Gg.Ba.ba_scalar_type
    | Int64 : (int64, Bigarray.int64_elt) Gg.Ba.ba_scalar_type
    | UInt8 : (int, Bigarray.int8_unsigned_elt) Gg.Ba.ba_scalar_type
    | UInt16 : (int, Bigarray.int16_unsigned_elt) Gg.Ba.ba_scalar_type
    | UInt32 : (int32, Bigarray.int32_elt) Gg.Ba.ba_scalar_type
    | UInt64 : (int64, Bigarray.int64_elt) Gg.Ba.ba_scalar_type
    | Float16 : (int, Bigarray.int16_unsigned_elt) Gg.Ba.ba_scalar_type
    | Float32 : (float, Bigarray.float32_elt) Gg.Ba.ba_scalar_type
    | Float64 : (float, Bigarray.float64_elt) Gg.Ba.ba_scalar_type
  val ba_kind_of_ba_scalar_type :
    ('a, 'b) Gg.Ba.ba_scalar_type -> ('a, 'b) Bigarray.kind
  type scalar_type =
      [ `Float16
      | `Float32
      | `Float64
      | `Int16
      | `Int32
      | `Int64
      | `Int8
      | `UInt16
      | `UInt32
      | `UInt64
      | `UInt8 ]
  val scalar_type_of_ba_scalar_type :
    ('a, 'b) Gg.Ba.ba_scalar_type -> Gg.Ba.scalar_type
  val scalar_type_byte_count : Gg.Ba.scalar_type -> int
  val pp_scalar_type : Format.formatter -> Gg.Ba.scalar_type -> unit
  module Buffer :
    sig
      type t = Gg.buffer
      val create : Gg.Ba.scalar_type -> int -> Gg.buffer
      val scalar_type : Gg.buffer -> Gg.Ba.scalar_type
      val length : Gg.buffer -> int
      val byte_length : Gg.buffer -> int
      val of_bigarray :
        ?data:[ `Float | `Unsigned ] -> ('a, 'b) Gg.bigarray -> Gg.buffer
      val pp : Format.formatter -> Gg.buffer -> unit
    end
  val create : ('a, 'b) Gg.Ba.ba_scalar_type -> int -> ('a, 'b) Gg.bigarray
  val length : ('a, 'b) Gg.bigarray -> int
  val sub : ('a, 'b) Gg.bigarray -> int -> int -> ('a, 'b) Gg.bigarray
  val blit :
    ('a, 'b) Gg.bigarray -> int -> ('a, 'b) Gg.bigarray -> int -> int -> unit
  val fill : ('a, 'b) Gg.bigarray -> '-> unit
  val of_array :
    ('a, 'b) Gg.Ba.ba_scalar_type -> 'a array -> ('a, 'b) Gg.bigarray
  val of_list :
    ('a, 'b) Gg.Ba.ba_scalar_type -> 'a list -> ('a, 'b) Gg.bigarray
  val of_bytes :
    ?be:bool ->
    ('a, 'b) Gg.Ba.ba_scalar_type -> string -> ('a, 'b) Gg.bigarray
  val pp :
    ?count:int ->
    ?stride:int ->
    ?first:int ->
    ?dim:int ->
    pp_scalar:(Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b) Gg.bigarray -> unit
  val unsafe_get : ('a, 'b) Gg.bigarray -> int -> 'a
  val get_v2 : (float, 'b) Gg.bigarray -> int -> Gg.v2
  val get_v3 : (float, 'b) Gg.bigarray -> int -> Gg.v3
  val get_v4 : (float, 'b) Gg.bigarray -> int -> Gg.v4
  val get_2d : ('a, 'b) Gg.bigarray -> int -> 'a * 'a
  val get_3d : ('a, 'b) Gg.bigarray -> int -> 'a * 'a * 'a
  val get_4d : ('a, 'b) Gg.bigarray -> int -> 'a * 'a * 'a * 'a
  val geti_2d : (int32, 'b) Gg.bigarray -> int -> int * int
  val geti_3d : (int32, 'b) Gg.bigarray -> int -> int * int * int
  val unsafe_set : ('a, 'b) Gg.bigarray -> int -> '-> unit
  val set_v2 : (float, 'b) Gg.bigarray -> int -> Gg.v2 -> unit
  val set_v3 : (float, 'b) Gg.bigarray -> int -> Gg.v3 -> unit
  val set_v4 : (float, 'b) Gg.bigarray -> int -> Gg.v4 -> unit
  val set_2d : ('a, 'b) Gg.bigarray -> int -> '-> '-> unit
  val set_3d : ('a, 'b) Gg.bigarray -> int -> '-> '-> '-> unit
  val set_4d : ('a, 'b) Gg.bigarray -> int -> '-> '-> '-> '-> unit
  val seti_2d : (int32, 'b) Gg.bigarray -> int -> int -> int -> unit
  val seti_3d : (int32, 'b) Gg.bigarray -> int -> int -> int -> int -> unit
end