@@ -281,10 +281,13 @@ end
281
281
__qr (layout, lengths, A; kwds... ) = Base. invoke (qr, Tuple{AbstractMatrix{eltype (A)}}, A; kwds... )
282
282
_qr (layout, axes, A; kwds... ) = __qr (layout, map (length, axes), A; kwds... )
283
283
_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)" )
284
285
_lu (layout, axes, A; kwds... ) = Base. invoke (lu, Tuple{AbstractMatrix{eltype (A)}}, A; kwds... )
285
286
_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)" )
287
287
_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... )
288
291
_factorize (layout, axes, A) = qr (A) # Default to QR
289
292
290
293
_inv_eye (_, :: Type{T} , axs:: NTuple{2,Base.OneTo{Int}} ) where T = Matrix {T} (I, map (length,axs)... )
307
310
308
311
macro _layoutfactorizations (Typ)
309
312
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)
310
315
LinearAlgebra. qr (A:: $Typ , args... ; kwds... ) = ArrayLayouts. _qr (ArrayLayouts. MemoryLayout (A), axes (A), A, args... ; kwds... )
311
316
LinearAlgebra. qr! (A:: $Typ , args... ; kwds... ) = ArrayLayouts. _qr! (ArrayLayouts. MemoryLayout (A), axes (A), A, args... ; kwds... )
312
317
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)
321
326
esc (quote
322
327
ArrayLayouts. @_layoutfactorizations $ Typ
323
328
ArrayLayouts. @_layoutfactorizations SubArray{<: Any ,2 ,<: $Typ }
329
+ ArrayLayouts. @_layoutfactorizations LinearAlgebra. RealHermSymComplexHerm{<: Real ,<: $Typ }
330
+ ArrayLayouts. @_layoutfactorizations LinearAlgebra. RealHermSymComplexHerm{<: Real ,<: SubArray{<:Real,2,<:$Typ} }
324
331
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