sig
  type ('a, 'b) t = ('a, 'b, Bigarray.c_layout) Bigarray.Array2.t
  type ('a, 'b) kind = ('a, 'b) Bigarray.kind
  val empty :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val create :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> '-> ('a, 'b) Owl_dense_matrix_generic.t
  val init :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> (int -> 'a) -> ('a, 'b) Owl_dense_matrix_generic.t
  val init_nd :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> (int -> int -> 'a) -> ('a, 'b) Owl_dense_matrix_generic.t
  val zeros :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val ones :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val eye :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val sequential :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    ?a:'-> ?step:'-> int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val uniform :
    ?scale:float ->
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val gaussian :
    ?sigma:float ->
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val semidef :
    (float, 'b) Owl_dense_matrix_generic.kind ->
    int -> (float, 'b) Owl_dense_matrix_generic.t
  val linspace :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    '-> '-> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val logspace :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    ?base:float -> '-> '-> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val meshgrid :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    '->
    '->
    '->
    '->
    int ->
    int ->
    ('a, 'b) Owl_dense_matrix_generic.t * ('a, 'b) Owl_dense_matrix_generic.t
  val meshup :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t * ('a, 'b) Owl_dense_matrix_generic.t
  val bernoulli :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    ?p:float ->
    ?seed:int -> int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val diagm :
    ?k:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val triu :
    ?k:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val tril :
    ?k:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val symmetric :
    ?upper:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val bidiagonal :
    ?upper:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val toeplitz :
    ?c:('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val hankel :
    ?r:('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val hadamard :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val shape : ('a, 'b) Owl_dense_matrix_generic.t -> int * int
  val row_num : ('a, 'b) Owl_dense_matrix_generic.t -> int
  val col_num : ('a, 'b) Owl_dense_matrix_generic.t -> int
  val numel : ('a, 'b) Owl_dense_matrix_generic.t -> int
  val nnz : ('a, 'b) Owl_dense_matrix_generic.t -> int
  val density : ('a, 'b) Owl_dense_matrix_generic.t -> float
  val size_in_bytes : ('a, 'b) Owl_dense_matrix_generic.t -> int
  val same_shape :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val kind :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.kind
  val get : ('a, 'b) Owl_dense_matrix_generic.t -> int -> int -> 'a
  val set : ('a, 'b) Owl_dense_matrix_generic.t -> int -> int -> '-> unit
  val row :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val col :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val rows :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int array -> ('a, 'b) Owl_dense_matrix_generic.t
  val cols :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int array -> ('a, 'b) Owl_dense_matrix_generic.t
  val resize :
    ?head:bool ->
    int ->
    int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val reshape :
    int ->
    int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val flatten :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val slice :
    int list list ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val reverse :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val reset : ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val fill : ('a, 'b) Owl_dense_matrix_generic.t -> '-> unit
  val clone :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val copy_to :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val copy_row_to :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int -> unit
  val copy_col_to :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int -> unit
  val concat_vertical :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val concat_horizontal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val concatenate :
    ?axis:int ->
    ('a, 'b) Owl_dense_matrix_generic.t array ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val transpose :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val ctranspose :
    (Complex.t, 'a) Owl_dense_matrix_generic.t ->
    (Complex.t, 'a) Owl_dense_matrix_generic.t
  val diag :
    ?k:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val replace_row :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val replace_col :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val swap_rows : ('a, 'b) Owl_dense_matrix_generic.t -> int -> int -> unit
  val swap_cols : ('a, 'b) Owl_dense_matrix_generic.t -> int -> int -> unit
  val tile :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int array -> ('a, 'b) Owl_dense_matrix_generic.t
  val repeat :
    ?axis:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val pad :
    ?v:'->
    int list list ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val dropout :
    ?rate:float ->
    ?seed:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val iteri :
    (int -> int -> '-> unit) -> ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iter : ('-> unit) -> ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val mapi :
    (int -> int -> '-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val map :
    ('-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val map2i :
    (int -> int -> '-> '-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val map2 :
    ('-> '-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val foldi :
    (int -> int -> '-> '-> 'c) ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c
  val fold :
    ('-> '-> 'c) -> '-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c
  val filteri :
    (int -> int -> '-> bool) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> (int * int) array
  val filter :
    ('-> bool) -> ('a, 'b) Owl_dense_matrix_generic.t -> (int * int) array
  val iteri_rows :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iter_rows :
    (('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iter2i_rows :
    (int ->
     ('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iter2_rows :
    (('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iteri_cols :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val iter_cols :
    (('a, 'b) Owl_dense_matrix_generic.t -> unit) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val filteri_rows :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> bool) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int array
  val filter_rows :
    (('a, 'b) Owl_dense_matrix_generic.t -> bool) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int array
  val filteri_cols :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> bool) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int array
  val filter_cols :
    (('a, 'b) Owl_dense_matrix_generic.t -> bool) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> int array
  val fold_rows :
    ('-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c
  val fold_cols :
    ('-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t -> 'c
  val mapi_rows :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> 'c array
  val map_rows :
    (('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> 'c array
  val mapi_cols :
    (int -> ('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> 'c array
  val map_cols :
    (('a, 'b) Owl_dense_matrix_generic.t -> 'c) ->
    ('a, 'b) Owl_dense_matrix_generic.t -> 'c array
  val mapi_by_row :
    int ->
    (int ->
     ('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val map_by_row :
    int ->
    (('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val mapi_by_col :
    int ->
    (int ->
     ('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val map_by_col :
    int ->
    (('a, 'b) Owl_dense_matrix_generic.t ->
     ('a, 'b) Owl_dense_matrix_generic.t) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val mapi_at_row :
    (int -> int -> '-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val map_at_row :
    ('-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val mapi_at_col :
    (int -> int -> '-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val map_at_col :
    ('-> 'a) ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t
  val exists : ('-> bool) -> ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val not_exists :
    ('-> bool) -> ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val for_all : ('-> bool) -> ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_zero : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_positive : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_negative : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_nonpositive : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_nonnegative : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val is_normal : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val not_nan : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val not_inf : ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val not_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val greater :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val less :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val greater_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val less_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val elt_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val elt_not_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val elt_less :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val elt_greater :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val elt_less_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val elt_greater_equal :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val equal_scalar : ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val not_equal_scalar : ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val less_scalar : ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val greater_scalar : ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val less_equal_scalar : ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val greater_equal_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val elt_equal_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val elt_not_equal_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val elt_less_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val elt_greater_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val elt_less_equal_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val elt_greater_equal_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val approx_equal :
    ?eps:float ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> bool
  val approx_equal_scalar :
    ?eps:float -> ('a, 'b) Owl_dense_matrix_generic.t -> '-> bool
  val approx_elt_equal :
    ?eps:float ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val approx_elt_equal_scalar :
    ?eps:float ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val draw_rows :
    ?replacement:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t * int array
  val draw_cols :
    ?replacement:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int -> ('a, 'b) Owl_dense_matrix_generic.t * int array
  val draw_rows2 :
    ?replacement:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int ->
    ('a, 'b) Owl_dense_matrix_generic.t *
    ('a, 'b) Owl_dense_matrix_generic.t * int array
  val draw_cols2 :
    ?replacement:bool ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    int ->
    ('a, 'b) Owl_dense_matrix_generic.t *
    ('a, 'b) Owl_dense_matrix_generic.t * int array
  val shuffle_rows :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val shuffle_cols :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val shuffle :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val to_array : ('a, 'b) Owl_dense_matrix_generic.t -> 'a array
  val of_array :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    'a array -> int -> int -> ('a, 'b) Owl_dense_matrix_generic.t
  val to_arrays : ('a, 'b) Owl_dense_matrix_generic.t -> 'a array array
  val of_arrays :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    'a array array -> ('a, 'b) Owl_dense_matrix_generic.t
  val to_ndarray :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_ndarray_generic.t
  val of_ndarray :
    ('a, 'b) Owl_dense_ndarray_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val to_rows :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t array
  val of_rows :
    ('a, 'b) Owl_dense_matrix_generic.t array ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val to_cols :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t array
  val of_cols :
    ('a, 'b) Owl_dense_matrix_generic.t array ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val print : ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val pp_dsmat : ('a, 'b) Owl_dense_matrix_generic.t -> unit
  val save : ('a, 'b) Owl_dense_matrix_generic.t -> string -> unit
  val load :
    ('a, 'b) Owl_dense_matrix_generic.kind ->
    string -> ('a, 'b) Owl_dense_matrix_generic.t
  val save_txt : ('a, 'b) Owl_dense_matrix_generic.t -> string -> unit
  val load_txt :
    (float, 'a) Owl_dense_matrix_generic.kind ->
    string -> (float, 'a) Owl_dense_matrix_generic.t
  val re_c2s :
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t
  val re_z2d :
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t
  val im_c2s :
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t
  val im_z2d :
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t
  val min : (float, 'a) Owl_dense_matrix_generic.t -> float
  val max : (float, 'a) Owl_dense_matrix_generic.t -> float
  val minmax : (float, 'a) Owl_dense_matrix_generic.t -> float * float
  val min_i : (float, 'a) Owl_dense_matrix_generic.t -> float * int * int
  val max_i : (float, 'a) Owl_dense_matrix_generic.t -> float * int * int
  val minmax_i :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float * int * int) * (float * int * int)
  val inv :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val trace : ('a, 'b) Owl_dense_matrix_generic.t -> 'a
  val sum : ('a, 'b) Owl_dense_matrix_generic.t -> 'a
  val prod : ('a, 'b) Owl_dense_matrix_generic.t -> 'a
  val average : ('a, 'b) Owl_dense_matrix_generic.t -> 'a
  val sum_rows :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val sum_cols :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val average_rows :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val average_cols :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val min_rows :
    (float, 'b) Owl_dense_matrix_generic.t -> (float * int * int) array
  val min_cols :
    (float, 'b) Owl_dense_matrix_generic.t -> (float * int * int) array
  val max_rows :
    (float, 'b) Owl_dense_matrix_generic.t -> (float * int * int) array
  val max_cols :
    (float, 'b) Owl_dense_matrix_generic.t -> (float * int * int) array
  val abs :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val abs_c2s :
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t
  val abs_z2d :
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t
  val abs2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val abs2_c2s :
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t
  val abs2_z2d :
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t
  val conj :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val neg :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val reci :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val signum :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val sqr :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val sqrt :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val cbrt :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val exp :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val exp2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val exp10 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val expm1 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val log :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val log10 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val log2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val log1p :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val sin :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val cos :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val tan :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val asin :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val acos :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val atan :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val sinh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val cosh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val tanh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val asinh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val acosh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val atanh :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val floor :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val ceil :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val round :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val trunc :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val modf :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t * ('a, 'b) Owl_dense_matrix_generic.t
  val erf :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val erfc :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val logistic :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val relu :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val elu :
    ?alpha:float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val leaky_relu :
    ?alpha:float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val softplus :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val softsign :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val softmax :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val sigmoid :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val log_sum_exp : (float, 'a) Owl_dense_matrix_generic.t -> float
  val l1norm : ('a, 'b) Owl_dense_matrix_generic.t -> float
  val l2norm : ('a, 'b) Owl_dense_matrix_generic.t -> float
  val l2norm_sqr : ('a, 'b) Owl_dense_matrix_generic.t -> float
  val max_pool :
    ?padding:Owl_dense_ndarray_generic.padding ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    int array -> int array -> (float, 'a) Owl_dense_matrix_generic.t
  val avg_pool :
    ?padding:Owl_dense_ndarray_generic.padding ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    int array -> int array -> (float, 'a) Owl_dense_matrix_generic.t
  val cumsum :
    ?axis:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val cumprod :
    ?axis:int ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val add :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val sub :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val mul :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val div :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val add_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val sub_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val mul_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val div_scalar :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val scalar_add :
    '->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val scalar_sub :
    '->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val scalar_mul :
    '->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val scalar_div :
    '->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val dot :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t
  val add_diag :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    '-> ('a, 'b) Owl_dense_matrix_generic.t
  val pow :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val scalar_pow :
    float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val pow_scalar :
    (float, 'a) Owl_dense_matrix_generic.t ->
    float -> (float, 'a) Owl_dense_matrix_generic.t
  val atan2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val scalar_atan2 :
    float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val atan2_scalar :
    (float, 'a) Owl_dense_matrix_generic.t ->
    float -> (float, 'a) Owl_dense_matrix_generic.t
  val hypot :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val min2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val max2 :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val fmod :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val fmod_scalar :
    (float, 'a) Owl_dense_matrix_generic.t ->
    float -> (float, 'a) Owl_dense_matrix_generic.t
  val scalar_fmod :
    float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val ssqr : ('a, 'b) Owl_dense_matrix_generic.t -> '-> 'a
  val ssqr_diff :
    ('a, 'b) Owl_dense_matrix_generic.t ->
    ('a, 'b) Owl_dense_matrix_generic.t -> 'a
  val cross_entropy :
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t -> float
  val clip_by_l2norm :
    float ->
    (float, 'a) Owl_dense_matrix_generic.t ->
    (float, 'a) Owl_dense_matrix_generic.t
  val cast_s2d :
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t
  val cast_d2s :
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t ->
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t
  val cast_c2z :
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t
  val cast_z2c :
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t
  val cast_s2c :
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t
  val cast_d2z :
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t
  val cast_s2z :
    (float, Bigarray.float32_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex64_elt) Owl_dense_matrix_generic.t
  val cast_d2c :
    (float, Bigarray.float64_elt) Owl_dense_matrix_generic.t ->
    (Complex.t, Bigarray.complex32_elt) Owl_dense_matrix_generic.t
end