sig
  type ('a, 'b) kind = ('a, 'b) Bigarray.kind
  type ('a, 'b) t
  val zeros :
    ('a, 'b) Owl_sparse_ndarray_generic.kind ->
    int array -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val binary :
    ?density:float ->
    ('a, 'b) Owl_sparse_ndarray_generic.kind ->
    int array -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val uniform :
    ?scale:float ->
    ?density:float ->
    ('a, 'b) Owl_sparse_ndarray_generic.kind ->
    int array -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val shape : ('a, 'b) Owl_sparse_ndarray_generic.t -> int array
  val num_dims : ('a, 'b) Owl_sparse_ndarray_generic.t -> int
  val nth_dim : ('a, 'b) Owl_sparse_ndarray_generic.t -> int -> int
  val numel : ('a, 'b) Owl_sparse_ndarray_generic.t -> int
  val nnz : ('a, 'b) Owl_sparse_ndarray_generic.t -> int
  val density : ('a, 'b) Owl_sparse_ndarray_generic.t -> float
  val same_shape :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val kind :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.kind
  val get : ('a, 'b) Owl_sparse_ndarray_generic.t -> int array -> 'a
  val set : ('a, 'b) Owl_sparse_ndarray_generic.t -> int array -> '-> unit
  val slice :
    int option array ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val clone :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val flatten :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val reshape :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    int array -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val transpose :
    ?axis:int array ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val swap :
    int ->
    int ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val iteri :
    ?axis:int option array ->
    (int array -> '-> unit) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val iter :
    ?axis:int option array ->
    ('-> unit) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val mapi :
    ?axis:int option array ->
    (int array -> '-> 'a) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val map :
    ?axis:int option array ->
    ('-> 'a) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val filteri :
    ?axis:int option array ->
    (int array -> '-> bool) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> int array array
  val filter :
    ?axis:int option array ->
    ('-> bool) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> int array array
  val foldi :
    ?axis:int option array ->
    (int array -> '-> '-> 'c) ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t -> 'c
  val fold :
    ?axis:int option array ->
    ('-> '-> 'c) -> '-> ('a, 'b) Owl_sparse_ndarray_generic.t -> 'c
  val iteri_nz :
    ?axis:int option array ->
    (int array -> '-> unit) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val iter_nz :
    ?axis:int option array ->
    ('-> unit) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val mapi_nz :
    ?axis:int option array ->
    (int array -> '-> 'a) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val map_nz :
    ?axis:int option array ->
    ('-> 'a) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val filteri_nz :
    ?axis:int option array ->
    (int array -> '-> bool) ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> int array array
  val filter_nz :
    ?axis:int option array ->
    ('-> bool) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> int array array
  val foldi_nz :
    ?axis:int option array ->
    (int array -> '-> '-> 'c) ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t -> 'c
  val fold_nz :
    ?axis:int option array ->
    ('-> '-> 'c) -> '-> ('a, 'b) Owl_sparse_ndarray_generic.t -> 'c
  val exists : ('-> bool) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val not_exists :
    ('-> bool) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val for_all : ('-> bool) -> ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val is_zero : ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val is_positive : ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val is_negative : ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val is_nonpositive : ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val is_nonnegative : ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val equal :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val not_equal :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val greater :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val less :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val greater_equal :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val less_equal :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t -> bool
  val to_array :
    ('a, 'b) Owl_sparse_ndarray_generic.t -> (int array * 'a) array
  val of_array :
    ('a, 'b) Owl_sparse_ndarray_generic.kind ->
    int array ->
    (int array * 'a) array -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val print : ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val pp_spnda : ('a, 'b) Owl_sparse_ndarray_generic.t -> unit
  val save : ('a, 'b) Owl_sparse_ndarray_generic.t -> string -> unit
  val load :
    ('a, 'b) Owl_sparse_ndarray_generic.kind ->
    string -> ('a, 'b) Owl_sparse_ndarray_generic.t
  val min : ('a, 'b) Owl_sparse_ndarray_generic.t -> 'a
  val max : ('a, 'b) Owl_sparse_ndarray_generic.t -> 'a
  val minmax : ('a, 'b) Owl_sparse_ndarray_generic.t -> 'a * 'a
  val abs :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val neg :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val sum : ('a, 'b) Owl_sparse_ndarray_generic.t -> 'a
  val average : ('a, 'b) Owl_sparse_ndarray_generic.t -> 'a
  val add :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val sub :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val mul :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val div :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val add_scalar :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t
  val sub_scalar :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t
  val mul_scalar :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t
  val div_scalar :
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    '-> ('a, 'b) Owl_sparse_ndarray_generic.t
  val scalar_add :
    '->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val scalar_sub :
    '->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val scalar_mul :
    '->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
  val scalar_div :
    '->
    ('a, 'b) Owl_sparse_ndarray_generic.t ->
    ('a, 'b) Owl_sparse_ndarray_generic.t
end