sig
  type t = Lacaml__D.mat
  type unop =
      ?m:int ->
      ?n:int ->
      ?br:int ->
      ?bc:int ->
      ?b:Lacaml__D.mat ->
      ?ar:int -> ?ac:int -> Lacaml__D.mat -> Lacaml__D.mat
  type binop =
      ?m:int ->
      ?n:int ->
      ?cr:int ->
      ?cc:int ->
      ?c:Lacaml__D.mat ->
      ?ar:int ->
      ?ac:int ->
      Lacaml__D.mat -> ?br:int -> ?bc:int -> Lacaml__D.mat -> Lacaml__D.mat
  val hilbert : int -> Lacaml__D.mat
  val hankel : int -> Lacaml__D.mat
  val pascal : int -> Lacaml__D.mat
  val rosser : unit -> Lacaml__D.mat
  val toeplitz : Lacaml__D.vec -> Lacaml__D.mat
  val vandermonde : Lacaml__D.vec -> Lacaml__D.mat
  val wilkinson : int -> Lacaml__D.mat
  val random :
    ?rnd_state:Stdlib.Random.State.t ->
    ?from:float -> ?range:float -> int -> int -> Lacaml__D.mat
  val abs : Lacaml__D.Mat.unop
  val signum : Lacaml__D.Mat.unop
  val sqr : Lacaml__D.Mat.unop
  val sqrt : Lacaml__D.Mat.unop
  val cbrt : Lacaml__D.Mat.unop
  val exp : Lacaml__D.Mat.unop
  val exp2 : Lacaml__D.Mat.unop
  val expm1 : Lacaml__D.Mat.unop
  val log : Lacaml__D.Mat.unop
  val log10 : Lacaml__D.Mat.unop
  val log2 : Lacaml__D.Mat.unop
  val log1p : Lacaml__D.Mat.unop
  val sin : Lacaml__D.Mat.unop
  val cos : Lacaml__D.Mat.unop
  val tan : Lacaml__D.Mat.unop
  val asin : Lacaml__D.Mat.unop
  val acos : Lacaml__D.Mat.unop
  val atan : Lacaml__D.Mat.unop
  val sinh : Lacaml__D.Mat.unop
  val cosh : Lacaml__D.Mat.unop
  val tanh : Lacaml__D.Mat.unop
  val asinh : Lacaml__D.Mat.unop
  val acosh : Lacaml__D.Mat.unop
  val atanh : Lacaml__D.Mat.unop
  val floor : Lacaml__D.Mat.unop
  val ceil : Lacaml__D.Mat.unop
  val round : Lacaml__D.Mat.unop
  val trunc : Lacaml__D.Mat.unop
  val erf : Lacaml__D.Mat.unop
  val erfc : Lacaml__D.Mat.unop
  val logistic : Lacaml__D.Mat.unop
  val relu : Lacaml__D.Mat.unop
  val softplus : Lacaml__D.Mat.unop
  val softsign : Lacaml__D.Mat.unop
  val pow : Lacaml__D.Mat.binop
  val atan2 : Lacaml__D.Mat.binop
  val hypot : Lacaml__D.Mat.binop
  val min2 : Lacaml__D.Mat.binop
  val max2 : Lacaml__D.Mat.binop
  val cpab :
    ?m:int ->
    ?n:int ->
    ?cr:int ->
    ?cc:int ->
    Lacaml__D.mat ->
    ?ar:int ->
    ?ac:int -> Lacaml__D.mat -> ?br:int -> ?bc:int -> Lacaml__D.mat -> unit
  val cmab :
    ?m:int ->
    ?n:int ->
    ?cr:int ->
    ?cc:int ->
    Lacaml__D.mat ->
    ?ar:int ->
    ?ac:int -> Lacaml__D.mat -> ?br:int -> ?bc:int -> Lacaml__D.mat -> unit
  val log_sum_exp :
    ?m:int -> ?n:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> float
  val create : int -> int -> Lacaml__D.mat
  val make : int -> int -> float -> Lacaml__D.mat
  val make0 : int -> int -> Lacaml__D.mat
  val of_array : float array array -> Lacaml__D.mat
  val to_array : Lacaml__D.mat -> float array array
  val of_list : float list list -> Lacaml__D.mat
  val to_list : Lacaml__D.mat -> float list list
  val of_col_vecs : Lacaml__D.vec array -> Lacaml__D.mat
  val to_col_vecs : Lacaml__D.mat -> Lacaml__D.vec array
  val of_col_vecs_list : Lacaml__D.vec list -> Lacaml__D.mat
  val to_col_vecs_list : Lacaml__D.mat -> Lacaml__D.vec list
  val as_vec : Lacaml__D.mat -> Lacaml__D.vec
  val init_rows : int -> int -> (int -> int -> float) -> Lacaml__D.mat
  val init_cols : int -> int -> (int -> int -> float) -> Lacaml__D.mat
  val create_mvec : int -> Lacaml__D.mat
  val make_mvec : int -> float -> Lacaml__D.mat
  val mvec_of_array : float array -> Lacaml__D.mat
  val mvec_to_array : Lacaml__D.mat -> float array
  val from_col_vec : Lacaml__D.vec -> Lacaml__D.mat
  val from_row_vec : Lacaml__D.vec -> Lacaml__D.mat
  val empty : Lacaml__D.mat
  val identity : int -> Lacaml__D.mat
  val of_diag :
    ?n:int ->
    ?br:int ->
    ?bc:int ->
    ?b:Lacaml__D.mat ->
    ?ofsx:int -> ?incx:int -> Lacaml__D.vec -> Lacaml__D.mat
  val dim1 : Lacaml__D.mat -> int
  val dim2 : Lacaml__D.mat -> int
  val has_zero_dim : Lacaml__D.mat -> bool
  val col : Lacaml__D.mat -> int -> Lacaml__D.vec
  val copy_row : ?vec:Lacaml__D.vec -> Lacaml__D.mat -> int -> Lacaml__D.vec
  val swap :
    ?uplo:[ `L | `U ] ->
    ?m:int ->
    ?n:int ->
    ?ar:int ->
    ?ac:int -> Lacaml__D.mat -> ?br:int -> ?bc:int -> Lacaml__D.mat -> unit
  val transpose_copy : Lacaml__D.Mat.unop
  val detri :
    ?up:bool -> ?n:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> unit
  val packed :
    ?up:bool ->
    ?n:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> Lacaml__D.vec
  val unpacked : ?up:bool -> ?n:int -> Lacaml__D.vec -> Lacaml__D.mat
  val fill :
    ?m:int -> ?n:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> float -> unit
  val sum : ?m:int -> ?n:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> float
  val add_const : float -> Lacaml__D.Mat.unop
  val neg : Lacaml__D.Mat.unop
  val reci : Lacaml__D.Mat.unop
  val copy_diag :
    ?n:int ->
    ?ofsy:int ->
    ?incy:int ->
    ?y:Lacaml__D.vec -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> Lacaml__D.vec
  val trace : Lacaml__D.mat -> float
  val scal :
    ?m:int -> ?n:int -> float -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> unit
  val scal_cols :
    ?m:int ->
    ?n:int ->
    ?ar:int -> ?ac:int -> Lacaml__D.mat -> ?ofs:int -> Lacaml__D.vec -> unit
  val scal_rows :
    ?m:int ->
    ?n:int ->
    ?ofs:int -> Lacaml__D.vec -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> unit
  val syrk_trace :
    ?n:int -> ?k:int -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> float
  val syrk_diag :
    ?n:int ->
    ?k:int ->
    ?beta:float ->
    ?ofsy:int ->
    ?y:Lacaml__D.vec ->
    ?trans:Lacaml__common.trans2 ->
    ?alpha:float -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> Lacaml__D.vec
  val add : Lacaml__D.Mat.binop
  val sub : Lacaml__D.Mat.binop
  val mul : Lacaml__D.Mat.binop
  val div : Lacaml__D.Mat.binop
  val axpy :
    ?alpha:float ->
    ?m:int ->
    ?n:int ->
    ?xr:int ->
    ?xc:int -> Lacaml__D.mat -> ?yr:int -> ?yc:int -> Lacaml__D.mat -> unit
  val gemm_diag :
    ?n:int ->
    ?k:int ->
    ?beta:float ->
    ?ofsy:int ->
    ?y:Lacaml__D.vec ->
    ?transa:Lacaml__D.trans3 ->
    ?alpha:float ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__D.mat ->
    ?transb:Lacaml__D.trans3 ->
    ?br:int -> ?bc:int -> Lacaml__D.mat -> Lacaml__D.vec
  val gemm_trace :
    ?n:int ->
    ?k:int ->
    ?transa:Lacaml__D.trans3 ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__D.mat ->
    ?transb:Lacaml__D.trans3 -> ?br:int -> ?bc:int -> Lacaml__D.mat -> float
  val symm2_trace :
    ?n:int ->
    ?upa:bool ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__D.mat ->
    ?upb:bool -> ?br:int -> ?bc:int -> Lacaml__D.mat -> float
  val ssqr_diff :
    ?m:int ->
    ?n:int ->
    ?ar:int ->
    ?ac:int -> Lacaml__D.mat -> ?br:int -> ?bc:int -> Lacaml__D.mat -> float
  val map :
    (float -> float) ->
    ?m:int ->
    ?n:int ->
    ?br:int ->
    ?bc:int ->
    ?b:Lacaml__D.mat -> ?ar:int -> ?ac:int -> Lacaml__D.mat -> Lacaml__D.mat
  val fold_cols :
    ('-> Lacaml__D.vec -> 'a) ->
    ?n:int -> ?ac:int -> '-> Lacaml__D.mat -> 'a
end