Skip to content

Commit 696ba04

Browse files
committed
update packages
1 parent 6394a2f commit 696ba04

File tree

3 files changed

+82
-36
lines changed

3 files changed

+82
-36
lines changed

Project.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ SemiseparableMatrices = "f8ebbe35-cbfb-4060-bf7f-b10e4670cf57"
1818
[compat]
1919
ArrayLayouts = "0.2.1"
2020
BandedMatrices = "0.15.1"
21-
BlockArrays = "0.11"
22-
BlockBandedMatrices = "0.7.1"
21+
BlockArrays = "0.12"
22+
BlockBandedMatrices = "0.8"
2323
FillArrays = "0.8.6"
24-
InfiniteArrays = "0.6.1, 0.7"
24+
InfiniteArrays = "0.7"
2525
LazyArrays = "0.16.1"
2626
LazyBandedMatrices = "0.2"
2727
MatrixFactorizations = "0.3.1"
28+
SemiseparableMatrices = "0.0.1"
2829
julia = "1.3"
2930

3031
[extras]

src/infqr.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ end
113113
_qr(::AbstractBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
114114
_qr(::AbstractAlmostBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
115115

116+
partialqr!(F::QR, n) = partialqr!(F.factors, n)
117+
partialqr!(F::AdaptiveQRFactors, n) = partialqr!(F.data, n)
118+
116119
#########
117120
# lmul!
118121
#########

test/test_infqr.jl

Lines changed: 75 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
2828
end
2929

3030
@testset "AdaptiveQRFactors" begin
31-
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
31+
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
3232
F = qr(A);
3333
@test F.factors[1,1] -sqrt(2)
3434
@test F.factors[100,100] qrunblocked(A[1:101,1:100]).factors[100,100]
@@ -41,7 +41,7 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
4141
end
4242

4343
@testset "col/rowsupport" begin
44-
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
44+
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
4545
F = qr(A);
4646
@test MemoryLayout(typeof(F.factors)) isa AdaptiveLayout{BandedColumns{DenseColumnMajor}}
4747
@test bandwidths(F.factors) == (1,2)
@@ -62,7 +62,7 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
6262
end
6363

6464
@testset "Qmul" begin
65-
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
65+
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ∞, 1, 1)
6666
Q,R = qr(A);
6767
b = Vcat([1.,2,3],Zeros(∞))
6868
@test lmul!(Q, Base.copymutable(b)).datasize[1] == 4
@@ -93,7 +93,7 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
9393
@test qr(A[1:3000,1:3000]).Q'b[1:3000] (F.Q'b)[1:3000]
9494
@time J = A \ Vcat([besselj(1,z)], Zeros(∞))
9595
@test J[1:2000] [besselj(k,z) for k=0:1999]
96-
96+
9797
z = 10_000; # the bigger z the longer before we see convergence
9898
A = BandedMatrix(0 => -2*(0:∞)/z, 1 => Ones(∞), -1 => Ones(∞))
9999
@time J = A \ Vcat([besselj(1,z)], Zeros(∞))
@@ -136,33 +136,75 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
136136
end
137137

138138
@testset "almost-banded" begin
139-
A = Vcat(Ones(1,∞), BandedMatrix(0 => -Ones(∞), 1 => 1:∞))
140-
@test MemoryLayout(typeof(A)) isa VcatAlmostBandedLayout
141-
V = view(A,1:10,1:10)
142-
@test MemoryLayout(typeof(V)) isa VcatAlmostBandedLayout
143-
@test A[1:10,1:10] isa AlmostBandedMatrix
144-
@test AlmostBandedMatrix(V) == Matrix(V) == A[1:10,1:10]
145-
146-
C = cache(A);
147-
@test C[1000,1000] 999.0
148-
F = adaptiveqr(A);
149-
partialqr!(F.factors.data,2);
150-
@test F.factors.data.data[1:3,1:5] qr(A[1:3,1:5]).factors
151-
partialqr!(F.factors.data,3);
152-
@test F.factors.data.data[1:4,1:6] qr(A[1:4,1:6]).factors
153-
154-
F = adaptiveqr(A);
155-
partialqr!(F.factors.data,10);
156-
@test F.factors[1:11,1:10] qr(A[1:11,1:10]).factors
157-
@test F.τ[1:10] qr(A[1:11,1:10]).τ
158-
partialqr!(F.factors.data,20);
159-
@test F.factors[1:21,1:20] qr(A[1:21,1:20]).factors
160-
161-
@test adaptiveqr(A).R[1:10,1:10] qr(A[1:11,1:10]).R
162-
163-
@test qr(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
164-
@test factorize(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
165-
166-
@test (adaptiveqr(A) \ [ℯ; zeros(∞)])[1:1000] (qr(A) \ [ℯ; zeros(∞)])[1:1000] (A \ [ℯ; zeros(∞)])[1:1000] [1/factorial(1.0k) for k=0:999]
167-
end
139+
@testset "one-band" begin
140+
A = Vcat(Ones(1,∞), BandedMatrix(0 => -Ones(∞), 1 => 1:∞))
141+
@test MemoryLayout(typeof(A)) isa VcatAlmostBandedLayout
142+
V = view(A,1:10,1:10)
143+
@test MemoryLayout(typeof(V)) isa VcatAlmostBandedLayout
144+
@test A[1:10,1:10] isa AlmostBandedMatrix
145+
@test AlmostBandedMatrix(V) == Matrix(V) == A[1:10,1:10]
146+
147+
C = cache(A);
148+
@test C[1000,1000] 999.0
149+
F = adaptiveqr(A);
150+
partialqr!(F.factors.data,2);
151+
@test F.factors.data.data[1:3,1:5] qr(A[1:3,1:5]).factors
152+
partialqr!(F.factors.data,3);
153+
@test F.factors.data.data[1:4,1:6] qr(A[1:4,1:6]).factors
154+
155+
F = adaptiveqr(A);
156+
partialqr!(F.factors.data,10);
157+
@test F.factors[1:11,1:10] qr(A[1:11,1:10]).factors
158+
@test F.τ[1:10] qr(A[1:11,1:10]).τ
159+
partialqr!(F.factors.data,20);
160+
@test F.factors[1:21,1:20] qr(A[1:21,1:20]).factors
161+
162+
@test adaptiveqr(A).R[1:10,1:10] qr(A[1:11,1:10]).R
163+
164+
@test qr(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
165+
@test factorize(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
166+
167+
@test (adaptiveqr(A) \ [ℯ; zeros(∞)])[1:1000] (qr(A) \ [ℯ; zeros(∞)])[1:1000] (A \ [ℯ; zeros(∞)])[1:1000] [1/factorial(1.0k) for k=0:999]
168+
end
169+
170+
@testset "two-bands" begin
171+
B = BandedMatrix(0 => -Ones(∞), 2 => (1:∞).* (2:∞))
172+
A = Vcat(Vcat(Ones(1,∞), ((-1).^(0:∞))'), B)
173+
@test MemoryLayout(typeof(A)) isa VcatAlmostBandedLayout
174+
175+
@test qr(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
176+
@test factorize(A) isa MatrixFactorizations.QR{Float64,<:InfiniteLinearAlgebra.AdaptiveQRFactors}
177+
u = qr(A) \ [1; zeros(∞)]
178+
x = 0.1
179+
@test (exp(1 - x)*(-1 + exp(2 + 2x)))/(-1 + exp(4)) dot(u[1:1000], x.^(0:999))
180+
u = qr(A) \ Vcat([ℯ,1/ℯ], zeros(∞))
181+
@test u[1:1000] [1/factorial(1.0k) for k=0:999]
182+
u = qr(A) \ Vcat(ℯ,1/ℯ, zeros(∞))
183+
@test u[1:1000] [1/factorial(1.0k) for k=0:999]
184+
185+
A = Vcat(Ones(1,∞), ((-1.0).^(0:∞))', B)
186+
@test MemoryLayout(typeof(A)) isa VcatAlmostBandedLayout
187+
u = A \ Vcat(ℯ,1/ℯ, zeros(∞))
188+
@test u[1:1000] [1/factorial(1.0k) for k=0:999]
189+
190+
A = Vcat(Ones(1,∞), ((-1).^(0:∞))', B)
191+
u = A \ Vcat(ℯ,1/ℯ, zeros(∞))
192+
@test u[1:1000] [1/factorial(1.0k) for k=0:999]
193+
end
194+
195+
@testset "more bands" begin
196+
L = Vcat(Ones(1,∞), ((-1).^(0:∞))',
197+
BandedMatrix(-1 => Ones(∞), 1 => Ones(∞), 2 => 4:2:∞, 3 => Ones(∞), 5 => Ones(∞)))
198+
F = qr(L).factors.data;
199+
resizedata!(F.data,13,19)
200+
@test F.data.data[2,8] == -1
201+
F = qr(L);
202+
partialqr!(F,10);
203+
@test F.factors[1:10,1:10] qr(L[1:13,1:10]).factors[1:10,1:10]
204+
@test qr(L).factors[1:10,1:10] qr(L[1:13,1:10]).factors[1:10,1:10]
205+
206+
u = L \ [1; 2; zeros(∞)]
207+
@test L[1:1000,1:1000]*u[1:1000] [1; 2; zeros(998)]
208+
end
209+
end
168210
end

0 commit comments

Comments
 (0)