@@ -39,7 +39,7 @@ Base.iterate(C::ReverseCholesky, ::Val{:U}) = (C.L, Val(:done))
3939Base. 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 )
7373end
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})
103103end
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)
113113function 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)
117117end
@@ -174,8 +174,10 @@ and return a [`ReverseCholesky`](@ref) factorization. The matrix `A` can either
174174The triangular ReverseCholesky factor can be obtained from the factorization `F` via `F.L` and `F.U`,
175175where `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
180182function reversecholesky (A:: AbstractMatrix{Float16} , :: NoPivot = NoPivot (); check:: Bool = true )
181183 X = reversecholesky! (reversecholcopy (A); check = check)
@@ -185,11 +187,12 @@ end
185187
186188# # Number
187189function 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)
191193end
192194
195+ _reverse_chol! (A, T) = reversecholesky_layout! (MemoryLayout (A), A, T)
193196
194197function ReverseCholesky {T} (C:: ReverseCholesky ) where T
195198 Cnew = convert (AbstractMatrix{T}, C. factors)
0 commit comments