Skip to content

Commit c059d0e

Browse files
author
Katharine Hyatt
committed
Try to fix testinferred with algs
1 parent 5d7d06d commit c059d0e

File tree

1 file changed

+35
-27
lines changed

1 file changed

+35
-27
lines changed

test/testsuite/orthnull.jl

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@ using LinearAlgebra
33

44
include("../linearmap.jl")
55

6+
_left_orth_svd(x; kwargs...) = left_orth(x; alg = :svd; kwargs...)
7+
_left_orth_svd!(x, VC; kwargs...) = left_orth!(x, VC; alg = :svd, kwargs...)
8+
_left_orth_qr(x; kwargs...) = left_orth(x; alg = :qr, kwargs...)
9+
_left_orth_qr!(x, VC; kwargs...) = left_orth!(x, VC; alg = :qr, kwargs...)
10+
_left_orth_polar(x; kwargs...) = left_orth(x; alg = :polar, kwargs...)
11+
_left_orth_polar!(x, VC; kwargs...) = left_orth!(x, VC; alg = :polar, kwargs...)
12+
13+
_right_orth_svd(x; kwargs...) = right_orth(x; alg = :svd; kwargs...)
14+
_right_orth_svd!(x, CVᴴ; kwargs...) = right_orth!(x, CVᴴ; alg = :svd, kwargs...)
15+
_right_orth_lq(x; kwargs...) = right_orth(x; alg = :lq, kwargs...)
16+
_right_orth_lq!(x, CVᴴ; kwargs...) = right_orth!(x, CVᴴ; alg = :lq, kwargs...)
17+
_right_orth_polar(x; kwargs...) = right_orth(x; alg = :polar, kwargs...)
18+
_right_orth_polar!(x, CVᴴ; kwargs...) = right_orth!(x, CVᴴ; alg = :polar, kwargs...)
19+
620
function test_orthnull(T::Type, sz; kwargs...)
721
summary_str = testargs_summary(T, sz)
822
return @testset "orthnull $summary_str" begin
@@ -34,9 +48,7 @@ function test_left_orthnull(
3448
@test collect(V) * collect(V)' + collect(N) * collect(N)' I
3549

3650
M = LinearMap(A)
37-
# broken
38-
#VM, CM = @testinferred left_orth(M; alg = :svd)
39-
VM, CM = left_orth(M; alg = :svd)
51+
VM, CM = @testinferred _left_orth_svd(M)
4052
@test parent(VM) * parent(CM) A
4153

4254
if m > n && (T <: Number || T <: Diagonal{<:Number, <:Vector})
@@ -53,9 +65,7 @@ function test_left_orthnull(
5365
end
5466

5567
# passing a kind and some kwargs
56-
# broken
57-
# V, C = @testinferred left_orth(A; alg = :qr, positive = true)
58-
V, C = left_orth(A; alg = :qr, positive = true)
68+
V, C = @testinferred _left_orth_qr(A; positive = true)
5969
N = @testinferred left_null(A; alg = :qr, positive = true)
6070
@test V isa typeof(A) && size(V) == (m, minmn)
6171
@test C isa typeof(A) && size(C) == (minmn, n)
@@ -117,9 +127,13 @@ function test_left_orthnull(
117127

118128
for alg in (:qr, :polar, :svd) # explicit kind kwarg
119129
m < n && alg === :polar && continue
120-
# broken
121-
# V2, C2 = @testinferred left_orth!(copy!(Ac, A), (V, C); alg = alg)
122-
V2, C2 = left_orth!(copy!(Ac, A), (V, C); alg = alg)
130+
if alg == :svd
131+
V2, C2 = @testinferred _left_orth_svd!(copy!(Ac, A), (V, C))
132+
elseif alg == :qr
133+
V2, C2 = @testinferred _left_orth_qr!(copy!(Ac, A), (V, C))
134+
elseif alg == :polar
135+
V2, C2 = @testinferred _left_orth_polar!(copy!(Ac, A), (V, C))
136+
end
123137
@test V2 * C2 A
124138
@test isisometric(V2)
125139
if alg != :polar
@@ -132,19 +146,15 @@ function test_left_orthnull(
132146
# with kind and tol kwargs
133147
if alg == :svd
134148
if (T <: Number || T <: Diagonal{<:Number, <:Vector})
135-
# broken
136-
# V2, C2 = @testinferred left_orth!(copy!(Ac, A), (V, C); alg = alg, trunc = (; atol))
137-
V2, C2 = left_orth!(copy!(Ac, A), (V, C); alg = alg, trunc = (; atol))
149+
V2, C2 = @testinferred _left_orth_svd!(copy!(Ac, A), (V, C); trunc = (; atol))
138150
N2 = @testinferred left_null!(copy!(Ac, A), N; alg, trunc = (; atol))
139151
@test V2 * C2 A
140152
@test isisometric(V2)
141153
@test LinearAlgebra.norm(A' * N2) 0 atol = MatrixAlgebraKit.defaulttol(T)
142154
@test isisometric(N2)
143155
@test collect(V2) * collect(V2)' + collect(N2) * collect(N2)' I
144156

145-
# broken
146-
# V2, C2 = @testinferred left_orth!(copy!(Ac, A), (V, C); alg = alg, trunc = (; rtol))
147-
V2, C2 = left_orth!(copy!(Ac, A), (V, C); alg = alg, trunc = (; rtol))
157+
V2, C2 = @testinferred _left_orth_svd!(copy!(Ac, A), (V, C); trunc = (; rtol))
148158
N2 = @testinferred left_null!(copy!(Ac, A), N; alg, trunc = (; rtol))
149159
@test V2 * C2 A
150160
@test isisometric(V2)
@@ -186,9 +196,7 @@ function test_right_orthnull(
186196
@test collect(Vᴴ)' * collect(Vᴴ) + collect(Nᴴ)' * collect(Nᴴ) I
187197

188198
M = LinearMap(A)
189-
# broken
190-
#CM, VMᴴ = @testinferred right_orth(M; alg = :svd)
191-
CM, VMᴴ = right_orth(M; alg = :svd)
199+
CM, VMᴴ = @testinferred _right_orth_svd(M)
192200
@test parent(CM) * parent(VMᴴ) A
193201

194202
Ac = similar(A)
@@ -222,9 +230,13 @@ function test_right_orthnull(
222230

223231
for alg in (:lq, :polar, :svd)
224232
n < m && alg == :polar && continue
225-
# broken
226-
#C2, Vᴴ2 = @testinferred right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg)
227-
C2, Vᴴ2 = right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg)
233+
if alg == :lq
234+
C2, Vᴴ2 = @testinferred _right_orth_lq!(copy!(Ac, A), (C, Vᴴ))
235+
elseif alg == :polar
236+
C2, Vᴴ2 = @testinferred _right_orth_polar!(copy!(Ac, A), (C, Vᴴ))
237+
elseif alg == :svd
238+
C2, Vᴴ2 = @testinferred _right_orth_svd!(copy!(Ac, A), (C, Vᴴ))
239+
end
228240
@test C2 * Vᴴ2 A
229241
@test isisometric(Vᴴ2; side = :right)
230242
if alg != :polar
@@ -236,19 +248,15 @@ function test_right_orthnull(
236248

237249
if alg == :svd
238250
if (T <: Number || T <: Diagonal{<:Number, <:Vector})
239-
# broken
240-
#C2, Vᴴ2 = @testinferred right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg, trunc = (; atol))
241-
C2, Vᴴ2 = right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg, trunc = (; atol))
251+
C2, Vᴴ2 = @testinferred _right_orth_svd!(copy!(Ac, A), (C, Vᴴ); trunc = (; atol))
242252
Nᴴ2 = @testinferred right_null!(copy!(Ac, A), Nᴴ; alg = alg, trunc = (; atol))
243253
@test C2 * Vᴴ2 A
244254
@test isisometric(Vᴴ2; side = :right)
245255
@test LinearAlgebra.norm(A * adjoint(Nᴴ2)) 0 atol = MatrixAlgebraKit.defaulttol(T)
246256
@test isisometric(Nᴴ2; side = :right)
247257
@test collect(Vᴴ2)' * collect(Vᴴ2) + collect(Nᴴ2)' * collect(Nᴴ2) I
248258

249-
# broken
250-
#C2, Vᴴ2 = @testinferred right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg, trunc = (; rtol))
251-
C2, Vᴴ2 = right_orth!(copy!(Ac, A), (C, Vᴴ); alg = alg, trunc = (; rtol))
259+
C2, Vᴴ2 = @testinferred _right_orth_svd!(copy!(Ac, A), (C, Vᴴ); trunc = (; rtol))
252260
Nᴴ2 = @testinferred right_null!(copy!(Ac, A), Nᴴ; alg = alg, trunc = (; rtol))
253261
@test C2 * Vᴴ2 A
254262
@test isisometric(Vᴴ2; side = :right)

0 commit comments

Comments
 (0)