Skip to content

Commit 6e2c809

Browse files
committed
Deprecate methods that convert from Diagonal and Bidiagonal to <:AbstractTriangular. Remove tests of those convert methods.
1 parent a57b50d commit 6e2c809

File tree

4 files changed

+67
-31
lines changed

4 files changed

+67
-31
lines changed

base/deprecated.jl

+58
Original file line numberDiff line numberDiff line change
@@ -785,4 +785,62 @@ const _oldstyle_array_vcat_ = false
785785

786786
@deprecate write(x) write(STDOUT::IO, x)
787787

788+
# Deprecate methods that convert Diagonal and Bidiagonal to <:AbstractTriangular.
789+
function convert(::Type{UpperTriangular}, A::Diagonal)
790+
depwarn(string("`convert(::Type{UpperTriangular}, A::Diagonal)` and other methods ",
791+
"that convert `Diagonal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
792+
"Consider calling the `UpperTriangular` constructor directly ",
793+
"(`UpperTriangular(A)`) instead."), :convert)
794+
UpperTriangular(A)
795+
end
796+
function convert(::Type{LowerTriangular}, A::Diagonal)
797+
depwarn(string("`convert(::Type{LowerTriangular}, A::Diagonal)` and other methods ",
798+
"that convert `Diagonal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
799+
"Consider calling the `LowerTriangular` constructor directly ",
800+
"(`LowerTriangular(A)`) instead."), :convert)
801+
LowerTriangular(A)
802+
end
803+
function convert(::Type{Base.LinAlg.UnitUpperTriangular}, A::Diagonal)
804+
depwarn(string("`convert(::Type{UnitUpperTriangular}, A::Diagonal)` and other methods ",
805+
"that convert `Diagonal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
806+
"Consider calling the `UnitUpperTriangular` constructor directly ",
807+
"(`Base.LinAlg.UnitUpperTriangular(A)`) instead."), :convert)
808+
if !all(A.diag .== one(eltype(A)))
809+
throw(ArgumentError("matrix cannot be represented as UnitUpperTriangular"))
810+
end
811+
Base.LinAlg.UnitUpperTriangular(full(A))
812+
end
813+
function convert(::Type{Base.LinAlg.UnitLowerTriangular}, A::Diagonal)
814+
depwarn(string("`convert(::Type{UnitLowerTriangular}, A::Diagonal)` and other methods ",
815+
"that convert `Diagonal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
816+
"Consider calling the `UnitLowerTriangular` constructor directly ",
817+
"(`Base.LinAlg.UnitLowerTriangular(A)`) instead."), :convert)
818+
if !all(A.diag .== one(eltype(A)))
819+
throw(ArgumentError("matrix cannot be represented as UnitLowerTriangular"))
820+
end
821+
Base.LinAlg.UnitLowerTriangular(full(A))
822+
end
823+
function convert(::Type{LowerTriangular}, A::Bidiagonal)
824+
depwarn(string("`convert(::Type{LowerTriangular}, A::Bidiagonal)` and other methods ",
825+
"that convert `Diagonal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
826+
"Consider calling the `LowerTriangular` constructor directly (`LowerTriangular(A)`) ",
827+
"instead."), :convert)
828+
if !A.isupper
829+
LowerTriangular(full(A))
830+
else
831+
throw(ArgumentError("Bidiagonal matrix must have lower off diagonal to be converted to LowerTriangular"))
832+
end
833+
end
834+
function convert(::Type{UpperTriangular}, A::Bidiagonal)
835+
depwarn(string("`convert(::Type{UpperTriangular}, A::Bidiagonal)` and other methods ",
836+
"that convert `Diagoinal`/`Bidiagonal` to `<:AbstractTriangular` are deprecated. ",
837+
"Consider calling the `UpperTriangular` constructor directly (`UpperTriangular(A)`) ",
838+
"instead."), :convert)
839+
if A.isupper
840+
UpperTriangular(full(A))
841+
else
842+
throw(ArgumentError("Bidiagonal matrix must have upper off diagonal to be converted to UpperTriangular"))
843+
end
844+
end
845+
788846
# End deprecations scheduled for 0.6

base/linalg/diagonal.jl

-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ Diagonal(V::AbstractVector) = Diagonal(collect(V))
2121
convert{T}(::Type{Diagonal{T}}, D::Diagonal{T}) = D
2222
convert{T}(::Type{Diagonal{T}}, D::Diagonal) = Diagonal{T}(convert(Vector{T}, D.diag))
2323
convert{T}(::Type{AbstractMatrix{T}}, D::Diagonal) = convert(Diagonal{T}, D)
24-
convert{T}(::Type{UpperTriangular}, A::Diagonal{T}) = UpperTriangular(A)
25-
convert{T}(::Type{LowerTriangular}, A::Diagonal{T}) = LowerTriangular(A)
2624
convert(::Type{Matrix}, D::Diagonal) = diagm(D.diag)
2725
convert(::Type{Array}, D::Diagonal) = convert(Matrix, D)
2826
full(D::Diagonal) = convert(Array, D)

base/linalg/special.jl

+2-18
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,6 @@
66
convert{T}(::Type{Bidiagonal}, A::Diagonal{T})=Bidiagonal(A.diag, zeros(T, size(A.diag,1)-1), true)
77
convert{T}(::Type{SymTridiagonal}, A::Diagonal{T})=SymTridiagonal(A.diag, zeros(T, size(A.diag,1)-1))
88
convert{T}(::Type{Tridiagonal}, A::Diagonal{T})=Tridiagonal(zeros(T, size(A.diag,1)-1), A.diag, zeros(T, size(A.diag,1)-1))
9-
convert(::Type{LowerTriangular}, A::Bidiagonal) = !A.isupper ? LowerTriangular(full(A)) : throw(ArgumentError("Bidiagonal matrix must have lower off diagonal to be converted to LowerTriangular"))
10-
convert(::Type{UpperTriangular}, A::Bidiagonal) = A.isupper ? UpperTriangular(full(A)) : throw(ArgumentError("Bidiagonal matrix must have upper off diagonal to be converted to UpperTriangular"))
11-
12-
function convert(::Type{UnitUpperTriangular}, A::Diagonal)
13-
if !all(A.diag .== one(eltype(A)))
14-
throw(ArgumentError("matrix cannot be represented as UnitUpperTriangular"))
15-
end
16-
UnitUpperTriangular(full(A))
17-
end
18-
19-
function convert(::Type{UnitLowerTriangular}, A::Diagonal)
20-
if !all(A.diag .== one(eltype(A)))
21-
throw(ArgumentError("matrix cannot be represented as UnitLowerTriangular"))
22-
end
23-
UnitLowerTriangular(full(A))
24-
end
259

2610
function convert(::Type{Diagonal}, A::Union{Bidiagonal, SymTridiagonal})
2711
if !all(A.ev .== 0)
@@ -147,8 +131,8 @@ for op in (:+, :-)
147131
(:LowerTriangular,:LowerTriangular),
148132
(:UnitLowerTriangular,:LowerTriangular))
149133
@eval begin
150-
($op)(A::($matrixtype1), B::($matrixtype2)) = ($op)(convert(($matrixtype3), A), B)
151-
($op)(A::($matrixtype2), B::($matrixtype1)) = ($op)(A, convert(($matrixtype3), B))
134+
($op)(A::($matrixtype1), B::($matrixtype2)) = ($op)(($matrixtype3)(A), B)
135+
($op)(A::($matrixtype2), B::($matrixtype1)) = ($op)(A, ($matrixtype3)(B))
152136
end
153137
end
154138
end

test/linalg/special.jl

+7-11
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,30 @@ srand(1)
99
debug && println("Test interconversion between special matrix types")
1010
let a=[1.0:n;]
1111
A=Diagonal(a)
12-
for newtype in [Diagonal, Bidiagonal, SymTridiagonal, Tridiagonal, LowerTriangular, UpperTriangular, Matrix]
12+
for newtype in [Diagonal, Bidiagonal, SymTridiagonal, Tridiagonal, Matrix]
1313
debug && println("newtype is $(newtype)")
1414
@test full(convert(newtype, A)) == full(A)
1515
end
16-
for newtype in [Base.LinAlg.UnitUpperTriangular, Base.LinAlg.UnitLowerTriangular]
17-
@test_throws ArgumentError convert(newtype, A)
18-
@test full(convert(newtype, Diagonal(ones(n)))) == eye(n)
19-
end
2016

2117
for isupper in (true, false)
2218
debug && println("isupper is $(isupper)")
2319
A=Bidiagonal(a, [1.0:n-1;], isupper)
24-
for newtype in [Bidiagonal, Tridiagonal, isupper ? UpperTriangular : LowerTriangular, Matrix]
20+
for newtype in [Bidiagonal, Tridiagonal, Matrix]
2521
debug && println("newtype is $(newtype)")
2622
@test full(convert(newtype, A)) == full(A)
2723
@test full(newtype(A)) == full(A)
2824
end
2925
@test_throws ArgumentError convert(SymTridiagonal, A)
26+
tritype = isupper ? UpperTriangular : LowerTriangular
27+
@test full(tritype(A)) == full(A)
28+
3029
A=Bidiagonal(a, zeros(n-1), isupper) #morally Diagonal
31-
for newtype in [Diagonal, Bidiagonal, SymTridiagonal, Tridiagonal, isupper ? UpperTriangular : LowerTriangular, Matrix]
30+
for newtype in [Diagonal, Bidiagonal, SymTridiagonal, Tridiagonal, Matrix]
3231
debug && println("newtype is $(newtype)")
3332
@test full(convert(newtype, A)) == full(A)
3433
@test full(newtype(A)) == full(A)
3534
end
35+
@test full(tritype(A)) == full(A)
3636
end
3737

3838
A = SymTridiagonal(a, [1.0:n-1;])
@@ -78,10 +78,6 @@ let a=[1.0:n;]
7878
for newtype in [Diagonal, Bidiagonal, Tridiagonal, SymTridiagonal]
7979
@test_throws ArgumentError convert(newtype,A)
8080
end
81-
A = Diagonal(a)
82-
for newtype in [UpperTriangular, LowerTriangular]
83-
@test full(convert(newtype,A)) == full(A)
84-
end
8581
end
8682

8783
# Binary ops among special types

0 commit comments

Comments
 (0)