Skip to content

Commit cf5824f

Browse files
authored
_ql -> ql_layout and add reversecholesky_layout (#63)
* _ql -> ql_layout and add reversecholesky_layout * Update reversecholesky.jl * Update reversecholesky.jl * ul_layout * v2.2
1 parent 34fbcad commit cf5824f

File tree

4 files changed

+26
-18
lines changed

4 files changed

+26
-18
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "MatrixFactorizations"
22
uuid = "a3b82374-2e81-5b9e-98ce-41277c0e4c87"
3-
version = "2.1.3"
3+
version = "2.2"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/ql.jl

+10-7
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ end
7272
@inline qlfactUnblocked!(A::StridedMatrix{T}) where T<:BlasFloat = QL(LAPACK.geqlf!(A)...)
7373

7474

75-
7675
# Generic fallbacks
7776

7877
"""
@@ -112,10 +111,10 @@ Stacktrace:
112111
[...]
113112
```
114113
"""
115-
@inline _ql!(layout, axes, A, ::Val{false}) = qlfactUnblocked!(A)
116-
@inline _ql!(layout, axes, A) = ql!(A, Val(false))
117-
@inline ql!(A::AbstractMatrix; kwds...) = _ql!(MemoryLayout(typeof(A)), axes(A), A; kwds...)
118-
@inline ql!(A::AbstractMatrix, val; kwds...) = _ql!(MemoryLayout(typeof(A)), axes(A), A, val; kwds...)
114+
@inline ql_layout!(layout, axes, A, ::Val{false}) = qlfactUnblocked!(A)
115+
@inline ql_layout!(layout, axes, A) = ql!(A, Val(false))
116+
@inline ql!(A::AbstractMatrix; kwds...) = ql_layout!(MemoryLayout(typeof(A)), axes(A), A; kwds...)
117+
@inline ql!(A::AbstractMatrix, val; kwds...) = ql_layout!(MemoryLayout(typeof(A)), axes(A), A, val; kwds...)
119118

120119
@inline _qleltype(::Type{T}) where T = typeof(zero(T)/sqrt(abs2(one(T))))
121120

@@ -177,9 +176,9 @@ julia> F.Q * F.L == A
177176
true
178177
```
179178
"""
180-
@inline ql(A::AbstractMatrix, args...; kwds...) = _ql(MemoryLayout(typeof(A)), axes(A), A, args...; kwds...)
179+
@inline ql(A::AbstractMatrix, args...; kwds...) = ql_layout(MemoryLayout(typeof(A)), axes(A), A, args...; kwds...)
181180

182-
function _ql(layout, axes, A, args...; kwds...)
181+
function ql_layout(layout, axes, A, args...; kwds...)
183182
require_one_based_indexing(A)
184183
AA = similar(A, _qleltype(eltype(A)), size(A))
185184
copyto!(AA, A)
@@ -191,6 +190,10 @@ end
191190
ql(reshape(v, (length(v), 1)), args...; kwds...)
192191
end
193192

193+
# for backward compatability
194+
const _ql! = ql_layout!
195+
const _ql = ql_layout
196+
194197
# Conversions
195198
QL{T}(A::QL) where {T} = QL(convert(AbstractMatrix{T}, A.factors), convert(AbstractVector{T}, A.τ))
196199
Factorization{T}(A::QL{T}) where {T} = A

src/reversecholesky.jl

+12-9
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Base.iterate(C::ReverseCholesky, ::Val{:U}) = (C.L, Val(:done))
3939
Base.iterate(C::ReverseCholesky, ::Val{:done}) = nothing
4040

4141
## Non BLAS/LAPACK element types (generic)
42-
function _reverse_chol!(A::AbstractMatrix, ::Type{UpperTriangular})
42+
function reversecholesky_layout!(_, A::AbstractMatrix, ::Type{UpperTriangular})
4343
require_one_based_indexing(A)
4444
n = checksquare(A)
4545
realdiag = eltype(A) <: Complex
@@ -52,7 +52,7 @@ function _reverse_chol!(A::AbstractMatrix, ::Type{UpperTriangular})
5252
Akk -= realdiag ? abs2(A[k,j]) : A[k,j]'A[k,j]
5353
end
5454
A[k,k] = Akk
55-
Akk, info = _reverse_chol!(Akk, UpperTriangular)
55+
Akk, info = reversecholesky_layout!(MemoryLayout(Akk), Akk, UpperTriangular)
5656
if info != 0
5757
return UpperTriangular(A), info
5858
end
@@ -72,7 +72,7 @@ function _reverse_chol!(A::AbstractMatrix, ::Type{UpperTriangular})
7272
return UpperTriangular(A), convert(BlasInt, 0)
7373
end
7474

75-
function _reverse_chol!(A::AbstractMatrix, ::Type{LowerTriangular})
75+
function reversecholesky_layout!(_, A::AbstractMatrix, ::Type{LowerTriangular})
7676
require_one_based_indexing(A)
7777
n = checksquare(A)
7878
realdiag = eltype(A) <: Complex
@@ -85,7 +85,7 @@ function _reverse_chol!(A::AbstractMatrix, ::Type{LowerTriangular})
8585
Akk -= realdiag ? abs2(A[i,k]) : A[i,k]'A[i,k]
8686
end
8787
A[k,k] = Akk
88-
Akk, info = _reverse_chol!(Akk, LowerTriangular)
88+
Akk, info = reversecholesky_layout!(MemoryLayout(Akk), Akk, LowerTriangular)
8989
if info != 0
9090
return LowerTriangular(A), info
9191
end
@@ -103,15 +103,15 @@ function _reverse_chol!(A::AbstractMatrix, ::Type{LowerTriangular})
103103
end
104104

105105
## Numbers
106-
_reverse_chol!(x::Number, uplo) = LinearAlgebra._chol!(x, uplo)
106+
reversecholesky_layout!(_, x::Number, uplo) = LinearAlgebra._chol!(x, uplo)
107107

108108
## for StridedMatrices, check that matrix is symmetric/Hermitian
109109

110110
# cholesky!. Destructive methods for computing Cholesky factorization of real symmetric
111111
# or Hermitian matrix
112112
## No pivoting (default)
113113
function reversecholesky!(A::RealHermSymComplexHerm, ::NoPivot = NoPivot(); check::Bool = true)
114-
C, info = _reverse_chol!(A.data, A.uplo == 'U' ? UpperTriangular : LowerTriangular)
114+
C, info = reversecholesky_layout!(MemoryLayout(A.data), A.data, A.uplo == 'U' ? UpperTriangular : LowerTriangular)
115115
check && checkpositivedefinite(info)
116116
return ReverseCholesky(C.data, A.uplo, info)
117117
end
@@ -174,8 +174,10 @@ and return a [`ReverseCholesky`](@ref) factorization. The matrix `A` can either
174174
The triangular ReverseCholesky factor can be obtained from the factorization `F` via `F.L` and `F.U`,
175175
where `A ≈ F.U * F.U' ≈ F.L' * F.L`.
176176
"""
177-
reversecholesky(A::AbstractMatrix, ::NoPivot=NoPivot(); check::Bool = true) =
178-
reversecholesky!(reversecholcopy(A); check)
177+
reversecholesky(A::AbstractMatrix, piv::NoPivot=NoPivot(); check::Bool = true) =
178+
reversecholesky_layout(MemoryLayout(A), axes(A), A, piv; check)
179+
180+
reversecholesky_layout(lay, ax, A, piv; kwds...) = reversecholesky!(reversecholcopy(A); kwds...)
179181

180182
function reversecholesky(A::AbstractMatrix{Float16}, ::NoPivot=NoPivot(); check::Bool = true)
181183
X = reversecholesky!(reversecholcopy(A); check = check)
@@ -185,11 +187,12 @@ end
185187

186188
## Number
187189
function reversecholesky(x::Number, uplo::Symbol=:U)
188-
C, info = _reverse_chol!(x, uplo)
190+
C, info = reversecholesky_layout!(MemoryLayout(x), x, uplo)
189191
xf = fill(C, 1, 1)
190192
ReverseCholesky(xf, uplo, info)
191193
end
192194

195+
_reverse_chol!(A, T) = reversecholesky_layout!(MemoryLayout(A), A, T)
193196

194197
function ReverseCholesky{T}(C::ReverseCholesky) where T
195198
Cnew = convert(AbstractMatrix{T}, C.factors)

src/ul.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,14 @@ julia> l == F.L && u == F.U && p == F.p
283283
true
284284
```
285285
"""
286-
function _ul(layout, A::AbstractMatrix{T}, pivot::Union{Val{false}, Val{true}}=Val(true);
286+
function ul_layout(layout, A::AbstractMatrix{T}, pivot::Union{Val{false}, Val{true}}=Val(true);
287287
check::Bool = true) where T
288288
S = ultype(T)
289289
ul!(copy_oftype(A, S), pivot; check = check)
290290
end
291291

292+
const _ul = ul_layout
293+
292294
ul(A::AbstractMatrix{T}, pivot::Union{Val{false}, Val{true}}=Val(true); check::Bool = true) where T =
293295
_ul(MemoryLayout(A), A, pivot; check=check)
294296

0 commit comments

Comments
 (0)