sig
  type t = Lacaml__C.mat
  val random :
    ?rnd_state:Stdlib.Random.State.t ->
    ?re_from:float ->
    ?re_range:float ->
    ?im_from:float -> ?im_range:float -> int -> int -> Lacaml__C.mat
  type unop =
      ?m:int ->
      ?n:int ->
      ?br:int ->
      ?bc:int ->
      ?b:Lacaml__C.mat ->
      ?ar:int -> ?ac:int -> Lacaml__C.mat -> Lacaml__C.mat
  type binop =
      ?m:int ->
      ?n:int ->
      ?cr:int ->
      ?cc:int ->
      ?c:Lacaml__C.mat ->
      ?ar:int ->
      ?ac:int ->
      Lacaml__C.mat -> ?br:int -> ?bc:int -> Lacaml__C.mat -> Lacaml__C.mat
  val create : int -> int -> Lacaml__C.mat
  val make : int -> int -> Stdlib.Complex.t -> Lacaml__C.mat
  val make0 : int -> int -> Lacaml__C.mat
  val of_array : Stdlib.Complex.t array array -> Lacaml__C.mat
  val to_array : Lacaml__C.mat -> Stdlib.Complex.t array array
  val of_list : Stdlib.Complex.t list list -> Lacaml__C.mat
  val to_list : Lacaml__C.mat -> Stdlib.Complex.t list list
  val of_col_vecs : Lacaml__C.vec array -> Lacaml__C.mat
  val to_col_vecs : Lacaml__C.mat -> Lacaml__C.vec array
  val of_col_vecs_list : Lacaml__C.vec list -> Lacaml__C.mat
  val to_col_vecs_list : Lacaml__C.mat -> Lacaml__C.vec list
  val as_vec : Lacaml__C.mat -> Lacaml__C.vec
  val init_rows :
    int -> int -> (int -> int -> Stdlib.Complex.t) -> Lacaml__C.mat
  val init_cols :
    int -> int -> (int -> int -> Stdlib.Complex.t) -> Lacaml__C.mat
  val create_mvec : int -> Lacaml__C.mat
  val make_mvec : int -> Stdlib.Complex.t -> Lacaml__C.mat
  val mvec_of_array : Stdlib.Complex.t array -> Lacaml__C.mat
  val mvec_to_array : Lacaml__C.mat -> Stdlib.Complex.t array
  val from_col_vec : Lacaml__C.vec -> Lacaml__C.mat
  val from_row_vec : Lacaml__C.vec -> Lacaml__C.mat
  val empty : Lacaml__C.mat
  val identity : int -> Lacaml__C.mat
  val of_diag :
    ?n:int ->
    ?br:int ->
    ?bc:int ->
    ?b:Lacaml__C.mat ->
    ?ofsx:int -> ?incx:int -> Lacaml__C.vec -> Lacaml__C.mat
  val dim1 : Lacaml__C.mat -> int
  val dim2 : Lacaml__C.mat -> int
  val has_zero_dim : Lacaml__C.mat -> bool
  val col : Lacaml__C.mat -> int -> Lacaml__C.vec
  val copy_row : ?vec:Lacaml__C.vec -> Lacaml__C.mat -> int -> Lacaml__C.vec
  val swap :
    ?uplo:[ `L | `U ] ->
    ?m:int ->
    ?n:int ->
    ?ar:int ->
    ?ac:int -> Lacaml__C.mat -> ?br:int -> ?bc:int -> Lacaml__C.mat -> unit
  val transpose_copy : Lacaml__C.Mat.unop
  val detri :
    ?up:bool -> ?n:int -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> unit
  val packed :
    ?up:bool ->
    ?n:int -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Lacaml__C.vec
  val unpacked : ?up:bool -> ?n:int -> Lacaml__C.vec -> Lacaml__C.mat
  val fill :
    ?m:int ->
    ?n:int -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Stdlib.Complex.t -> unit
  val sum :
    ?m:int ->
    ?n:int -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Stdlib.Complex.t
  val add_const : Stdlib.Complex.t -> Lacaml__C.Mat.unop
  val neg : Lacaml__C.Mat.unop
  val reci : Lacaml__C.Mat.unop
  val copy_diag :
    ?n:int ->
    ?ofsy:int ->
    ?incy:int ->
    ?y:Lacaml__C.vec -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Lacaml__C.vec
  val trace : Lacaml__C.mat -> Stdlib.Complex.t
  val scal :
    ?m:int ->
    ?n:int -> Stdlib.Complex.t -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> unit
  val scal_cols :
    ?m:int ->
    ?n:int ->
    ?ar:int -> ?ac:int -> Lacaml__C.mat -> ?ofs:int -> Lacaml__C.vec -> unit
  val scal_rows :
    ?m:int ->
    ?n:int ->
    ?ofs:int -> Lacaml__C.vec -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> unit
  val syrk_trace :
    ?n:int ->
    ?k:int -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Stdlib.Complex.t
  val syrk_diag :
    ?n:int ->
    ?k:int ->
    ?beta:Stdlib.Complex.t ->
    ?ofsy:int ->
    ?y:Lacaml__C.vec ->
    ?trans:Lacaml__common.trans2 ->
    ?alpha:Stdlib.Complex.t ->
    ?ar:int -> ?ac:int -> Lacaml__C.mat -> Lacaml__C.vec
  val add : Lacaml__C.Mat.binop
  val sub : Lacaml__C.Mat.binop
  val mul : Lacaml__C.Mat.binop
  val div : Lacaml__C.Mat.binop
  val axpy :
    ?alpha:Stdlib.Complex.t ->
    ?m:int ->
    ?n:int ->
    ?xr:int ->
    ?xc:int -> Lacaml__C.mat -> ?yr:int -> ?yc:int -> Lacaml__C.mat -> unit
  val gemm_diag :
    ?n:int ->
    ?k:int ->
    ?beta:Stdlib.Complex.t ->
    ?ofsy:int ->
    ?y:Lacaml__C.vec ->
    ?transa:Lacaml__C.trans3 ->
    ?alpha:Stdlib.Complex.t ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__C.mat ->
    ?transb:Lacaml__C.trans3 ->
    ?br:int -> ?bc:int -> Lacaml__C.mat -> Lacaml__C.vec
  val gemm_trace :
    ?n:int ->
    ?k:int ->
    ?transa:Lacaml__C.trans3 ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__C.mat ->
    ?transb:Lacaml__C.trans3 ->
    ?br:int -> ?bc:int -> Lacaml__C.mat -> Stdlib.Complex.t
  val symm2_trace :
    ?n:int ->
    ?upa:bool ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__C.mat ->
    ?upb:bool -> ?br:int -> ?bc:int -> Lacaml__C.mat -> Stdlib.Complex.t
  val ssqr_diff :
    ?m:int ->
    ?n:int ->
    ?ar:int ->
    ?ac:int ->
    Lacaml__C.mat -> ?br:int -> ?bc:int -> Lacaml__C.mat -> Stdlib.Complex.t
  val map :
    (Stdlib.Complex.t -> Stdlib.Complex.t) ->
    ?m:int ->
    ?n:int ->
    ?br:int ->
    ?bc:int ->
    ?b:Lacaml__C.mat -> ?ar:int -> ?ac:int -> Lacaml__C.mat -> Lacaml__C.mat
  val fold_cols :
    ('-> Lacaml__C.vec -> 'a) ->
    ?n:int -> ?ac:int -> '-> Lacaml__C.mat -> 'a
end