Source file owl_linalg_intf.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# 1 "src/owl/linalg/owl_linalg_intf.ml"
(*
 * OWL - OCaml Scientific and Engineering Computing
 * Copyright (c) 2016-2020 Liang Wang <liang.wang@cl.cam.ac.uk>
 *)

module type Common = sig
  include Owl_base_linalg_intf.Common

  (* NOTE: functions below have not been implemented in Base Linalg *)

  (** {5 Basic functions} *)

  val pinv : ?tol:float -> mat -> mat

  val rank : ?tol:float -> mat -> int

  val norm : ?p:float -> mat -> float

  val vecnorm : ?p:float -> mat -> float

  val cond : ?p:float -> mat -> float

  val rcond : mat -> float

  val is_posdef : mat -> bool

  (** {5 Factorisation} *)

  val lu : mat -> mat * mat * int32_mat

  val svdvals : mat -> mat

  val gsvd : mat -> mat -> mat * mat * mat * mat * mat * mat

  val gsvdvals : mat -> mat -> mat

  val schur : mat -> mat * mat * complex_mat

  val schur_tz : mat -> mat * mat

  val ordschur : select:int32_mat -> mat -> mat -> mat * mat * complex_mat

  val qz : mat -> mat -> mat * mat * mat * mat * complex_mat

  val ordqz
    :  select:int32_mat
    -> mat
    -> mat
    -> mat
    -> mat
    -> mat * mat * mat * mat * complex_mat

  val qzvals : mat -> mat -> complex_mat

  val hess : mat -> mat * mat

  (** {5 Eigenvalues & eigenvectors} *)

  val eig : ?permute:bool -> ?scale:bool -> mat -> complex_mat * complex_mat

  val eigvals : ?permute:bool -> ?scale:bool -> mat -> complex_mat

  (** {5 Linear system of equations} *)

  val null : mat -> mat

  val triangular_solve : upper:bool -> ?trans:bool -> mat -> mat -> mat

  val linreg : mat -> mat -> elt * elt

  (** {5 Low-level factorisation functions} *)

  val lufact : mat -> mat * int32_mat

  val qrfact : ?pivot:bool -> mat -> mat * mat * int32_mat

  val bkfact : ?upper:bool -> ?symmetric:bool -> ?rook:bool -> mat -> mat * int32_mat

  (** {5 Matrix functions} *)

  val mpow : mat -> float -> mat

  val expm : mat -> mat [@@warning "-32"]

  val expm : mat -> mat

  val sinm : mat -> mat

  val cosm : mat -> mat

  val tanm : mat -> mat

  val sincosm : mat -> mat * mat

  val sinhm : mat -> mat

  val coshm : mat -> mat

  val tanhm : mat -> mat

  val sinhcoshm : mat -> mat * mat

  (** {5 Helper functions} *)

  val select_ev : [ `LHP | `RHP | `UDI | `UDO ] -> mat -> int32_mat

  val peakflops : ?n:int -> unit -> float
end

module type Real = sig
  include Owl_base_linalg_intf.Real

  (* NOTE: functions below have not been implemented in Base Linalg *)

  val dare : mat -> mat -> mat -> mat -> mat
end