diff --git a/Project.toml b/Project.toml index 287f9950..479074d2 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "MatrixAlgebraKit" uuid = "6c742aac-3347-4629-af66-fc926824e5e4" authors = ["Jutho and contributors"] -version = "0.2.3" +version = "0.2.4" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/implementations/svd.jl b/src/implementations/svd.jl index 17c621aa..a7d4c9e5 100644 --- a/src/implementations/svd.jl +++ b/src/implementations/svd.jl @@ -74,6 +74,12 @@ function svd_full!(A::AbstractMatrix, USVᴴ, alg::LAPACK_SVDAlgorithm) fill!(S, zero(eltype(S))) m, n = size(A) minmn = min(m, n) + if minmn == 0 + one!(U) + zero!(S) + one!(Vᴴ) + return USVᴴ + end if alg isa LAPACK_QRIteration isempty(alg.kwargs) || throw(ArgumentError("LAPACK_QRIteration does not accept any keyword arguments")) diff --git a/test/svd.jl b/test/svd.jl index 40de0897..375dc8ea 100644 --- a/test/svd.jl +++ b/test/svd.jl @@ -8,7 +8,7 @@ using MatrixAlgebraKit: TruncatedAlgorithm, TruncationKeepAbove, diagview @testset "svd_compact! for T = $T" for T in (Float32, Float64, ComplexF32, ComplexF64) rng = StableRNG(123) m = 54 - @testset "size ($m, $n)" for n in (37, m, 63) + @testset "size ($m, $n)" for n in (37, m, 63, 0) k = min(m, n) if LinearAlgebra.LAPACK.version() < v"3.12.0" algs = (LAPACK_DivideAndConquer(), LAPACK_QRIteration(), LAPACK_Bisection(), @@ -57,7 +57,7 @@ end @testset "svd_full! for T = $T" for T in (Float32, Float64, ComplexF32, ComplexF64) rng = StableRNG(123) m = 54 - @testset "size ($m, $n)" for n in (37, m, 63) + @testset "size ($m, $n)" for n in (37, m, 63, 0) @testset "algorithm $alg" for alg in (LAPACK_DivideAndConquer(), LAPACK_QRIteration()) A = randn(rng, T, m, n)