Skip to content

Commit 9675c38

Browse files
committed
Fix minimum band for UpperTriangular/Lowertriangular
1 parent aeeed7d commit 9675c38

File tree

2 files changed

+18
-31
lines changed

2 files changed

+18
-31
lines changed

src/triangular.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,9 @@ istril(A::Transpose, k::Integer=0) = istriu(A.parent, -k)
376376
istriu(A::Adjoint, k::Integer=0) = istril(A.parent, -k)
377377
istriu(A::Transpose, k::Integer=0) = istril(A.parent, -k)
378378

379-
istril(U::UpperTriangular, k::Integer=0) = istril(parent(U), max(0, k))
379+
istril(U::UpperTriangular, k::Integer=0) = istril(parent(U), max(-1, k))
380380
istril(U::UnitUpperTriangular, k::Integer=0) = k < 0 ? false : istril(parent(U), k)
381-
istriu(U::LowerTriangular, k::Integer=0) = istriu(parent(U), min(0, k))
381+
istriu(U::LowerTriangular, k::Integer=0) = istriu(parent(U), min(1, k))
382382
istriu(U::UnitLowerTriangular, k::Integer=0) = k > 0 ? false : istriu(parent(U), k)
383383

384384
function tril!(A::UpperTriangular{T}, k::Integer=0) where {T}

test/triangular.jl

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -196,33 +196,6 @@ end
196196
@test isdiag(LowerTriangular(diagm(0 => [1,2,3,4])))
197197
@test !isdiag(UpperTriangular(rand(4, 4)))
198198
@test !isdiag(LowerTriangular(rand(4, 4)))
199-
200-
for A in [rand(4,4), zeros(4,4), diagm(1=>1:3), diagm(-2=>2:3)]
201-
U = UpperTriangular(A)
202-
UA = Array(U)
203-
L = LowerTriangular(A)
204-
LA = Array(L)
205-
UU = UnitUpperTriangular(A)
206-
UUA = Array(UU)
207-
UL = UnitLowerTriangular(A)
208-
ULA = Array(UL)
209-
for k in -size(A,1):size(A,2)
210-
@test istril(U, k) == istril(UA, k)
211-
@test istriu(L, k) == istriu(LA, k)
212-
@test istril(UU, k) == istril(UUA, k)
213-
@test istriu(UL, k) == istriu(ULA, k)
214-
end
215-
end
216-
for (T, f) in ((UnitUpperTriangular, istril), (UnitLowerTriangular, istriu))
217-
A = Matrix{BigFloat}(undef, 2, 2)
218-
isupper = T === UnitUpperTriangular
219-
A[1+!isupper, 1+isupper] = 3
220-
UU = T(A)
221-
UUA = Array(UU)
222-
for k in -size(A,1):size(A,2)
223-
@test f(UU, k) == f(UUA, k)
224-
end
225-
end
226199
end
227200

228201
# Test throwing in fallbacks for non BlasFloat/BlasComplex in A_rdiv_Bx!
@@ -761,15 +734,16 @@ end
761734
end
762735

763736
@testset "istriu/istril forwards to parent" begin
764-
@testset "$(nameof(typeof(M)))" for M in [Tridiagonal(rand(n-1), rand(n), rand(n-1)),
737+
@testset "$(nameof(typeof(M)))" for M in Any[Tridiagonal(rand(n-1), rand(n), rand(n-1)),
765738
Tridiagonal(zeros(n-1), zeros(n), zeros(n-1)),
766739
Diagonal(randn(n)),
767740
Diagonal(zeros(n)),
741+
rand(n,n), zeros(n,n), diagm(1=>1:n-1), diagm(-2=>1:n-2),
768742
]
769743
@testset for TriT in (UpperTriangular, UnitUpperTriangular, LowerTriangular, UnitLowerTriangular)
770744
U = TriT(M)
771745
A = Array(U)
772-
for k in -n:n
746+
@testset for k in -n:n
773747
@test istriu(U, k) == istriu(A, k)
774748
@test istril(U, k) == istril(A, k)
775749
end
@@ -787,6 +761,19 @@ end
787761
end
788762
end
789763

764+
@testset "partly initialized in unit triangular" begin
765+
for (T, f) in ((UnitUpperTriangular, istril), (UnitLowerTriangular, istriu))
766+
A = Matrix{BigFloat}(undef, 2, 2)
767+
isupper = T === UnitUpperTriangular
768+
A[1+!isupper, 1+isupper] = 3
769+
UU = T(A)
770+
UUA = Array(UU)
771+
for k in -size(A,1):size(A,2)
772+
@test f(UU, k) == f(UUA, k)
773+
end
774+
end
775+
end
776+
790777
@testset "Union eltype" begin
791778
M = Matrix{Union{Int,Missing}}(missing,2,2)
792779
U = triu(M)

0 commit comments

Comments
 (0)