sig
  type mat_d = Owl_dense_matrix_d.mat
  type mat_z = Owl_dense_matrix_z.mat
  type ('a, 'b) t = ('a, 'b) Owl_dense_matrix_generic.t
  val inv : Owl_linalg.mat_d -> Owl_linalg.mat_d
  val det : Owl_linalg.mat_d -> float
  val qr : Owl_linalg.mat_d -> Owl_linalg.mat_d * Owl_linalg.mat_d
  val qr_sqsolve : Owl_linalg.mat_d -> Owl_linalg.mat_d -> Owl_linalg.mat_d
  val qr_lssolve :
    Owl_linalg.mat_d ->
    Owl_linalg.mat_d -> Owl_linalg.mat_d * Owl_linalg.mat_d
  val svd :
    Owl_linalg.mat_d ->
    Owl_linalg.mat_d * Owl_linalg.mat_d * Owl_linalg.mat_d
  val cholesky : Owl_linalg.mat_d -> Owl_linalg.mat_d
  val is_posdef : Owl_linalg.mat_d -> bool
  val symmtd :
    Owl_linalg.mat_d ->
    Owl_linalg.mat_d * Owl_linalg.mat_d * Owl_linalg.mat_d
  val bidiag :
    Owl_linalg.mat_d ->
    Owl_linalg.mat_d * Owl_linalg.mat_d * Owl_linalg.mat_d * Owl_linalg.mat_d
  val tridiag_solve :
    Owl_linalg.mat_d -> Owl_linalg.mat_d -> Owl_linalg.mat_d
  val symm_tridiag_solve :
    Owl_linalg.mat_d -> Owl_linalg.mat_d -> Owl_linalg.mat_d
  val eigen_symm : Owl_linalg.mat_d -> Owl_linalg.mat_d
  val eigen_symmv : Owl_linalg.mat_d -> Owl_linalg.mat_d * Owl_linalg.mat_d
  val eigen_nonsymm : Owl_linalg.mat_d -> Owl_linalg.mat_z
  val eigen_nonsymmv :
    Owl_linalg.mat_d -> Owl_linalg.mat_z * Owl_linalg.mat_z
  val eigen_herm : Owl_linalg.mat_z -> Owl_linalg.mat_d
  val eigen_hermv : Owl_linalg.mat_z -> Owl_linalg.mat_d * Owl_linalg.mat_z
end