Skip to content

Commit 8d72cad

Browse files
QR: handle xtype/dtype other than input Tv
1 parent 1b4933c commit 8d72cad

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

src/solvers/cholmod.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,15 @@ Dense(A::StridedVecOrMatInclAdjAndTrans{T}) where
901901

902902
Dense(A::Sparse) = sparse_to_dense(A)
903903

904+
function Dense(ptr::Ptr{cholmod_dense})
905+
if ptr == C_NULL
906+
throw(ArgumentError("dense matrix construction failed for " *
907+
"unknown reasons. Please submit a bug report."))
908+
end
909+
s = unsafe_load(ptr)
910+
return Dense{jlxtype(s.xtype, s.dtype)}(ptr)
911+
end
912+
904913
function Base.convert(::Type{Dense{Tnew}}, A::Dense{T}) where {Tnew, T}
905914
GC.@preserve A begin
906915
Ap = unsafe_load(pointer(A))

src/solvers/spqr.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,9 @@ function LinearAlgebra.qr(A::SparseMatrixCSC{Tv, Ti}; tol=_default_tol(A), order
204204
C_NULL, C_NULL, C_NULL, C_NULL,
205205
R, E, H, HPinv, HTau)
206206

207-
R_ = SparseMatrixCSC(Sparse(R[]))
208-
return QRSparse(SparseMatrixCSC(Sparse(H[])),
209-
vec(Array(CHOLMOD.Dense{Tv}(HTau[]))),
207+
R_ = SparseMatrixCSC(Tv.(Sparse(R[])))
208+
return QRSparse(SparseMatrixCSC(Tv.(Sparse(H[]))),
209+
vec(Array{Tv}(CHOLMOD.Dense(HTau[]))),
210210
SparseMatrixCSC(min(size(A)...),
211211
size(R_, 2),
212212
getcolptr(R_),

0 commit comments

Comments
 (0)