@@ -281,10 +281,13 @@ end
281281__qr (layout, lengths, A; kwds... ) = Base. invoke (qr, Tuple{AbstractMatrix{eltype (A)}}, A; kwds... )
282282_qr (layout, axes, A; kwds... ) = __qr (layout, map (length, axes), A; kwds... )
283283_qr (layout, axes, A, pivot:: P ; kwds... ) where P = Base. invoke (qr, Tuple{AbstractMatrix{eltype (A)},P}, A, pivot; kwds... )
284+ _qr! (layout, axes, A, args... ; kwds... ) = error (" Overload _qr!(::$(typeof (layout)) , axes, A)" )
284285_lu (layout, axes, A; kwds... ) = Base. invoke (lu, Tuple{AbstractMatrix{eltype (A)}}, A; kwds... )
285286_lu (layout, axes, A, pivot:: P ; kwds... ) where P = Base. invoke (lu, Tuple{AbstractMatrix{eltype (A)},P}, A, pivot; kwds... )
286- _qr! (layout, axes, A, args... ; kwds... ) = error (" Overload _qr!(::$(typeof (layout)) , axes, A)" )
287287_lu! (layout, axes, A, args... ; kwds... ) = error (" Overload _lu!(::$(typeof (layout)) , axes, A)" )
288+ _cholesky (layout, axes, A, :: Val{false} = Val (false ); check:: Bool = true ) = cholesky! (cholcopy (A); check = check)
289+ _cholesky (layout, axes, A, :: Val{true} ; tol = 0.0 , check:: Bool = true ) = cholesky! (cholcopy (A), Val (true ); tol = tol, check = check)
290+ _cholesky! (layout, axes, A, v:: Val{tf} ; kwds... ) where tf = Base. invoke (cholesky!, Tuple{LinearAlgebra. RealHermSymComplexHerm,Val{tf}}, A, v; kwds... )
288291_factorize (layout, axes, A) = qr (A) # Default to QR
289292
290293_inv_eye (_, :: Type{T} , axs:: NTuple{2,Base.OneTo{Int}} ) where T = Matrix {T} (I, map (length,axs)... )
307310
308311macro _layoutfactorizations (Typ)
309312 esc (quote
313+ LinearAlgebra. cholesky (A:: $Typ , args... ; kwds... ) = ArrayLayouts. _cholesky (ArrayLayouts. MemoryLayout (A), axes (A), A, args... ; kwds... )
314+ LinearAlgebra. cholesky! (A:: $Typ , v:: Val{false} = Val (false ); check:: Bool = true ) = ArrayLayouts. _cholesky! (ArrayLayouts. MemoryLayout (A), axes (A), A, v; check= check)
310315 LinearAlgebra. qr (A:: $Typ , args... ; kwds... ) = ArrayLayouts. _qr (ArrayLayouts. MemoryLayout (A), axes (A), A, args... ; kwds... )
311316 LinearAlgebra. qr! (A:: $Typ , args... ; kwds... ) = ArrayLayouts. _qr! (ArrayLayouts. MemoryLayout (A), axes (A), A, args... ; kwds... )
312317 LinearAlgebra. lu (A:: $Typ , pivot:: Union{Val{false}, Val{true}} ; kwds... ) = ArrayLayouts. _lu (ArrayLayouts. MemoryLayout (A), axes (A), A, pivot; kwds... )
@@ -321,5 +326,17 @@ macro layoutfactorizations(Typ)
321326 esc (quote
322327 ArrayLayouts. @_layoutfactorizations $ Typ
323328 ArrayLayouts. @_layoutfactorizations SubArray{<: Any ,2 ,<: $Typ }
329+ ArrayLayouts. @_layoutfactorizations LinearAlgebra. RealHermSymComplexHerm{<: Real ,<: $Typ }
330+ ArrayLayouts. @_layoutfactorizations LinearAlgebra. RealHermSymComplexHerm{<: Real ,<: SubArray{<:Real,2,<:$Typ} }
324331 end )
325- end
332+ end
333+
334+ function ldiv! (C:: Cholesky{<:Any,<:AbstractMatrix} , B:: LayoutArray )
335+ if C. uplo == ' L'
336+ return ldiv! (adjoint (LowerTriangular (C. factors)), ldiv! (LowerTriangular (C. factors), B))
337+ else
338+ return ldiv! (UpperTriangular (C. factors), ldiv! (adjoint (UpperTriangular (C. factors)), B))
339+ end
340+ end
341+
342+
0 commit comments