sig
  type ('a, 'b) t
  type ('a, 'b) kind = ('a, 'b) Bigarray.kind
  val zeros :
    ?density:float ->
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val ones :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val eye :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val binary :
    ?density:float ->
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val uniform :
    ?density:float ->
    ?scale:float ->
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val sequential :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val shape : ('a, 'b) Owl_sparse_matrix_generic.t -> int * int
  val row_num : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val col_num : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val row_num_nz : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val col_num_nz : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val numel : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val nnz : ('a, 'b) Owl_sparse_matrix_generic.t -> int
  val nnz_rows : ('a, 'b) Owl_sparse_matrix_generic.t -> int array
  val nnz_cols : ('a, 'b) Owl_sparse_matrix_generic.t -> int array
  val density : ('a, 'b) Owl_sparse_matrix_generic.t -> float
  val kind :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.kind
  val get : ('a, 'b) Owl_sparse_matrix_generic.t -> int -> int -> 'a
  val set : ('a, 'b) Owl_sparse_matrix_generic.t -> int -> int -> '-> unit
  val insert :
    ('a, 'b) Owl_sparse_matrix_generic.t -> int -> int -> '-> unit
  val reset : ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val fill : ('a, 'b) Owl_sparse_matrix_generic.t -> '-> unit
  val clone :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val transpose :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val diag :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val row :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val col :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val rows :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int array -> ('a, 'b) Owl_sparse_matrix_generic.t
  val cols :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int array -> ('a, 'b) Owl_sparse_matrix_generic.t
  val prune : ('a, 'b) Owl_sparse_matrix_generic.t -> '-> float -> unit
  val iteri :
    (int -> int -> '-> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter : ('-> unit) -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val mapi :
    (int -> int -> '-> 'a) ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val map :
    ('-> 'a) ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val foldi :
    (int -> int -> '-> '-> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val fold :
    ('-> '-> 'c) -> '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val filteri :
    (int -> int -> '-> bool) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> (int * int) array
  val filter :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> (int * int) array
  val iteri_rows :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter_rows :
    (('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iteri_cols :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter_cols :
    (('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val mapi_rows :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val map_rows :
    (('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val mapi_cols :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val map_cols :
    (('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val fold_rows :
    ('-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val fold_cols :
    ('-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val iteri_nz :
    (int -> int -> '-> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter_nz : ('-> unit) -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val mapi_nz :
    (int -> int -> '-> 'a) ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val map_nz :
    ('-> 'a) ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val foldi_nz :
    (int -> int -> '-> '-> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val fold_nz :
    ('-> '-> 'c) -> '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val filteri_nz :
    (int -> int -> '-> bool) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> (int * int) array
  val filter_nz :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> (int * int) array
  val iteri_rows_nz :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter_rows_nz :
    (('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iteri_cols_nz :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val iter_cols_nz :
    (('a, 'b) Owl_sparse_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val mapi_rows_nz :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val map_rows_nz :
    (('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val mapi_cols_nz :
    (int -> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val map_cols_nz :
    (('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> 'c array
  val fold_rows_nz :
    ('-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val fold_cols_nz :
    ('-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t -> 'c
  val exists : ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val not_exists :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val for_all : ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val exists_nz :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val not_exists_nz :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val for_all_nz :
    ('-> bool) -> ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val is_zero : ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val is_positive : ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val is_negative : ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val is_nonpositive : ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val is_nonnegative : ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val equal :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val not_equal :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val greater :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val less :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val greater_equal :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val less_equal :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t -> bool
  val permutation_matrix :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t
  val draw_rows :
    ?replacement:bool ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t * int array
  val draw_cols :
    ?replacement:bool ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    int -> ('a, 'b) Owl_sparse_matrix_generic.t * int array
  val shuffle_rows :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val shuffle_cols :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val shuffle :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val to_array :
    ('a, 'b) Owl_sparse_matrix_generic.t -> (int array * 'a) array
  val of_array :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    int ->
    int -> (int array * 'a) array -> ('a, 'b) Owl_sparse_matrix_generic.t
  val to_dense :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val of_dense :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val print : ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val pp_spmat : ('a, 'b) Owl_sparse_matrix_generic.t -> unit
  val save : ('a, 'b) Owl_sparse_matrix_generic.t -> string -> unit
  val load :
    ('a, 'b) Owl_sparse_matrix_generic.kind ->
    string -> ('a, 'b) Owl_sparse_matrix_generic.t
  val min : (float, 'a) Owl_sparse_matrix_generic.t -> float
  val max : (float, 'a) Owl_sparse_matrix_generic.t -> float
  val minmax : (float, 'a) Owl_sparse_matrix_generic.t -> float * float
  val trace : ('a, 'b) Owl_sparse_matrix_generic.t -> 'a
  val sum : ('a, 'b) Owl_sparse_matrix_generic.t -> 'a
  val average : ('a, 'b) Owl_sparse_matrix_generic.t -> 'a
  val sum_rows :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val sum_cols :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val average_rows :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val average_cols :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val abs :
    (float, 'a) Owl_sparse_matrix_generic.t ->
    (float, 'a) Owl_sparse_matrix_generic.t
  val neg :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val l1norm : (float, 'b) Owl_sparse_matrix_generic.t -> float
  val l2norm : (float, 'b) Owl_sparse_matrix_generic.t -> float
  val add :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val sub :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val mul :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val div :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val dot :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val add_scalar :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t
  val sub_scalar :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t
  val mul_scalar :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t
  val div_scalar :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t
  val scalar_add :
    '->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val scalar_sub :
    '->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val scalar_mul :
    '->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val scalar_div :
    '->
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    ('a, 'b) Owl_sparse_matrix_generic.t
  val power_scalar :
    ('a, 'b) Owl_sparse_matrix_generic.t ->
    '-> ('a, 'b) Owl_sparse_matrix_generic.t
end