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