From 1fcdf3b26053a844f23dbf87ac78f21c7a965b35 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Mon, 26 Oct 2026 13:10:33 +0000 Subject: [PATCH] Solve a real `UmfpackLU` against a `ComplexF32` vector in `ldiv!` The complex-vector kernel built its real-part buffer with `real.(b)`, which is `Float32` for a `ComplexF32` right-hand side, and UMFPACK has no `Float32` solve. Co-Authored-By: Claude Opus 5.5 --- src/solvers/umfpack.jl | 3 ++- test/solvers/issues.jl | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/solvers/umfpack.jl b/src/solvers/umfpack.jl index 68ffb597..2b3de066 100644 --- a/src/solvers/umfpack.jl +++ b/src/solvers/umfpack.jl @@ -1163,7 +1163,8 @@ function _AqldivB_kernel!(x::StridedVector{Tb}, lu::UmfpackLU{Float64}, b::StridedVector{Tb}, transposeoptype, workspace) where Tb<:Complex r = similar(b, Float64) i = similar(b, Float64) - c = real.(b) + c = similar(b, Float64) + c .= real.(b) solve!(r, lu, c, transposeoptype; workspace) c .= imag.(b) solve!(i, lu, c, transposeoptype; workspace) diff --git a/test/solvers/issues.jl b/test/solvers/issues.jl index fd6b6879..3c17e19d 100644 --- a/test/solvers/issues.jl +++ b/test/solvers/issues.jl @@ -217,4 +217,9 @@ end @test_throws ArgumentError sparsevec(CHOLMOD.Sparse(Symmetric(sparse([2.0 1; 1 2])))) end +@testset "ldiv! of a real UmfpackLU with a ComplexF32 vector" begin + A = sparse([2.0 1; 1 3]) + @test ldiv!(lu(A), ComplexF32[1, 2]) ≈ ComplexF32.(Matrix(A) \ [1, 2]) +end + end # module