Skip to content

Commit 91a5544

Browse files
committed
Make it easier to dispatch to SVD solver methods defined
in GenericLinearAlgebra by prefixing the computational methods with underscores. Also make eigen and svd test includable without loading packages first
1 parent cb57b9d commit 91a5544

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

src/svd.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ function svdDemmelKahan!(B::Bidiagonal{T}, n1, n2, U = nothing, Vt = nothing) wh
102102
return B
103103
end
104104

105-
function LinearAlgebra.svdvals!(B::Bidiagonal{T}, tol = eps(T); debug = false) where T<:Real
105+
function _svdvals!(B::Bidiagonal{T}; tol = eps(T), debug = false) where T<:Real
106106

107107
n = size(B, 1)
108108
n1 = 1
@@ -174,7 +174,7 @@ function LinearAlgebra.svdvals!(B::Bidiagonal{T}, tol = eps(T); debug = false) w
174174
else
175175
# Just transpose the matrix. Since we are only interested in the
176176
# values here it doesn't matter.
177-
return svdvals!(Bidiagonal(d, e, :U), tol; debug = debug)
177+
return svdvals!(Bidiagonal(d, e, :U); tol = tol, debug = debug)
178178
end
179179
end
180180

@@ -255,4 +255,7 @@ function bidiagonalize!(A::AbstractMatrix)
255255
end
256256
end
257257

258-
LinearAlgebra.svdvals!(A::StridedMatrix) = svdvals!(bidiagonalize!(A)[1])
258+
_svdvals!(A::StridedMatrix; tol = eps(T), debug = false) = svdvals!(bidiagonalize!(A)[1], tol = tol, debug = debug)
259+
260+
LinearAlgebra.svdvals!(B::Bidiagonal{T}; tol = eps(T), debug = false) where T<:Real = _svdvals!(B, tol = tol, debug = debug)
261+
LinearAlgebra.svdvals!(A::StridedMatrix; tol = eps(real(eltype(A))), debug = false) = _svdvals!(A, tol = tol, debug = debug)

test/eigengeneral.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using GenericLinearAlgebra
1+
using Test, GenericLinearAlgebra, LinearAlgebra
22

33
@testset "The General eigenvalue problem" begin
44

test/svd.jl

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
using Test
2-
using GenericLinearAlgebra
3-
using Quaternions
1+
using Test, GenericLinearAlgebra, LinearAlgebra, Quaternions
42

53
@testset "Singular value decomposition" begin
6-
@testset "Problem dimension ($m,$n)" for (m,n) in ((6,5), (6,6), (5,6))
4+
@testset "Problem dimension ($m,$n)" for
5+
(m,n) in ((6,5) , (6,6) , (5,6),
6+
(60, 50) , (60, 60) , (50, 60),
7+
(200, 150), (200, 200), (150, 200))
78

89
vals = reverse(collect(1:min(m,n)))
910
U = qr(Quaternion{Float64}[Quaternion(randn(4)...) for i = 1:m, j = 1:min(m,n)]).Q
@@ -20,14 +21,14 @@ using Quaternions
2021
# This matrix used to hang (for n = 70). Thanks to Ivan Slapničar for reporting.
2122
n = 70
2223
J = Bidiagonal(0.5 * ones(n), ones(n-1), :U)
23-
@test LinearAlgebra.svdvals!(copy(J)) svdvals(J)
24-
@test LinearAlgebra.svdvals!(copy(J))[end] / svdvals(J)[end] - 1 < n*eps()
24+
@test GenericLinearAlgebra._svdvals!(copy(J)) svdvals(J)
25+
@test GenericLinearAlgebra._svdvals!(copy(J))[end] / svdvals(J)[end] - 1 < n*eps()
2526
end
2627

2728
@testset "Extending Base methods. Problem dimension" for
28-
(m, n) in ((10,9), # tall
29-
(10,10),# square
30-
(9,10)) # wide
29+
(m, n) in ((10, 9), # tall
30+
(10, 10), # square
31+
(9 , 10)) # wide
3132

3233
A = randn(m,n)
3334
@test svdvals(A) Vector{Float64}(svdvals(big.(A)))

0 commit comments

Comments
 (0)