From 13442cd1ae1a78706c62056be5d592a3717bad30 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Wed, 23 May 2018 13:26:04 +0200 Subject: [PATCH] RFC: check the info code on getproperty now that we have replaced e.g. chol(A) with cholesky(A).U we don't check for positive definiteness anymore. This adds a check for that. --- stdlib/LinearAlgebra/src/cholesky.jl | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/stdlib/LinearAlgebra/src/cholesky.jl b/stdlib/LinearAlgebra/src/cholesky.jl index d2d96dfa76747..bf09b06ffbee8 100644 --- a/stdlib/LinearAlgebra/src/cholesky.jl +++ b/stdlib/LinearAlgebra/src/cholesky.jl @@ -317,12 +317,13 @@ size(C::Union{Cholesky, CholeskyPivoted}, d::Integer) = size(C.factors, d) function getproperty(C::Cholesky, d::Symbol) Cfactors = getfield(C, :factors) Cuplo = getfield(C, :uplo) + info = getfield(C, :info) if d == :U - return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) + return @assertposdef UpperTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) info elseif d == :L - return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) + return @assertposdef LowerTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) info elseif d == :UL - return Symbol(Cuplo) == :U ? UpperTriangular(Cfactors) : LowerTriangular(Cfactors) + return @assertposdef (Symbol(Cuplo) == :U ? UpperTriangular(Cfactors) : LowerTriangular(Cfactors)) info else return getfield(C, d) end @@ -334,12 +335,16 @@ function getproperty(C::CholeskyPivoted{T}, d::Symbol) where T<:BlasFloat Cfactors = getfield(C, :factors) Cuplo = getfield(C, :uplo) if d == :U + chkfullrank(C) return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :L + chkfullrank(C) return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :p + chkfullrank(C) return getfield(C, :piv) elseif d == :P + chkfullrank(C) n = size(C, 1) P = zeros(T, n, n) for i = 1:n