-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathMatrixAlgebraKit.jl
More file actions
139 lines (125 loc) · 5.13 KB
/
Copy pathMatrixAlgebraKit.jl
File metadata and controls
139 lines (125 loc) · 5.13 KB
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
module MatrixAlgebraKit
using LinearAlgebra: LinearAlgebra
using LinearAlgebra: norm # TODO: eleminate if we use VectorInterface.jl?
using LinearAlgebra: mul!, rmul!, lmul!, adjoint!, rdiv!, ldiv!
using LinearAlgebra: sylvester, lu!, diagm
using LinearAlgebra: isposdef, issymmetric
using LinearAlgebra: Diagonal, Hermitian, diag, diagind, isdiag
using LinearAlgebra: UpperTriangular, LowerTriangular, UniformScaling
using LinearAlgebra: BlasFloat, BlasReal, BlasComplex, BlasInt
export isisometric, isunitary, ishermitian, isantihermitian
export diagview, diagonal
export project_hermitian, project_antihermitian, project_isometric
export project_hermitian!, project_antihermitian!, project_isometric!
export qr_compact, qr_full, qr_null, lq_compact, lq_full, lq_null
export qr_compact!, qr_full!, qr_null!, lq_compact!, lq_full!, lq_null!
export svd_compact, svd_full, svd_vals, svd_trunc, svd_trunc_no_error
export svd_compact!, svd_full!, svd_vals!, svd_trunc!, svd_trunc_no_error!
export eigh_full, eigh_vals, eigh_trunc, eigh_trunc_no_error
export eigh_full!, eigh_vals!, eigh_trunc!, eigh_trunc_no_error!
export eig_full, eig_vals, eig_trunc, eig_trunc_no_error
export eig_full!, eig_vals!, eig_trunc!, eig_trunc_no_error!
export gen_eig_full, gen_eig_vals
export gen_eig_full!, gen_eig_vals!
export schur_full, schur_vals
export schur_full!, schur_vals!
export left_polar, right_polar
export left_polar!, right_polar!
export left_orth, right_orth, left_null, right_null
export left_orth!, right_orth!, left_null!, right_null!
export Householder, Native_HouseholderQR, Native_HouseholderLQ
export DivideAndConquer, SafeDivideAndConquer, QRIteration, Bisection, Jacobi, SVDViaPolar
export RobustRepresentations
export LAPACK_HouseholderQR, LAPACK_HouseholderLQ, LAPACK_Simple, LAPACK_Expert,
LAPACK_QRIteration, LAPACK_Bisection, LAPACK_MultipleRelativelyRobustRepresentations,
LAPACK_DivideAndConquer, LAPACK_Jacobi, LAPACK_SafeDivideAndConquer
export GLA_HouseholderQR, GLA_QRIteration, GS_QRIteration
export LQViaTransposedQR
export PolarViaSVD, PolarNewton
export DefaultAlgorithm
export DiagonalAlgorithm
export NativeBlocked
export CUSOLVER_Simple, CUSOLVER_HouseholderQR, CUSOLVER_QRIteration, CUSOLVER_SVDPolar,
CUSOLVER_Jacobi, CUSOLVER_Randomized, CUSOLVER_DivideAndConquer
export ROCSOLVER_HouseholderQR, ROCSOLVER_QRIteration, ROCSOLVER_Jacobi,
ROCSOLVER_DivideAndConquer, ROCSOLVER_Bisection
export notrunc, truncrank, trunctol, truncerror, truncfilter
@static if VERSION >= v"1.11.0-DEV.469"
eval(
Expr(
:public, :default_algorithm, :findtruncated, :findtruncated_svd,
:select_algorithm
)
)
eval(
Expr(
:public, :TruncationByOrder, :TruncationByFilter, :TruncationByValue,
:TruncationByError, :TruncationIntersection, :TruncationUnion, :truncate
)
)
eval(
Expr(
:public, :left_polar_pullback!, :right_polar_pullback!,
:qr_pullback!, :qr_null_pullback!, :lq_pullback!, :lq_null_pullback!,
:eig_pullback!, :eig_trunc_pullback!, :eig_vals_pullback!,
:eigh_pullback!, :eigh_trunc_pullback!, :eigh_vals_pullback!,
:svd_pullback!, :svd_trunc_pullback!, :svd_vals_pullback!
)
)
eval(
Expr(
:public, :remove_svd_gauge_dependence!,
:remove_eig_gauge_dependence!, :remove_eigh_gauge_dependence!,
:remove_qr_gauge_dependence!, :remove_qr_null_gauge_dependence!,
:remove_lq_gauge_dependence!, :remove_lq_null_gauge_dependence!,
:remove_left_null_gauge_dependence!, :remove_right_null_gauge_dependence!,
)
)
eval(Expr(:public, :is_left_isometric, :is_right_isometric))
end
include("common/defaults.jl")
include("common/householder.jl")
include("common/initialization.jl")
include("common/pullbacks.jl")
include("common/safemethods.jl")
include("common/view.jl")
include("common/regularinv.jl")
include("common/matrixproperties.jl")
include("yalapack.jl")
include("algorithms.jl")
include("interface/projections.jl")
include("interface/decompositions.jl")
include("interface/truncation.jl")
include("interface/qr.jl")
include("interface/lq.jl")
include("interface/svd.jl")
include("interface/eig.jl")
include("interface/eigh.jl")
include("interface/gen_eig.jl")
include("interface/schur.jl")
include("interface/polar.jl")
include("interface/orthnull.jl")
include("implementations/projections.jl")
include("implementations/truncation.jl")
include("implementations/qr.jl")
include("implementations/lq.jl")
include("implementations/svd.jl")
include("implementations/eig.jl")
include("implementations/eigh.jl")
include("implementations/gen_eig.jl")
include("implementations/schur.jl")
include("implementations/polar.jl")
include("implementations/orthnull.jl")
include("common/gauge.jl") # needs to be defined after the functions are
include("pullbacks/qr.jl")
include("pullbacks/lq.jl")
include("pullbacks/eig.jl")
include("pullbacks/eigh.jl")
include("pullbacks/svd.jl")
include("pullbacks/polar.jl")
include("pushforwards/polar.jl")
include("pushforwards/eig.jl")
include("pushforwards/eigh.jl")
include("pushforwards/svd.jl")
include("precompile.jl")
end