61 lines
2.3 KiB
Julia
61 lines
2.3 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
|
|
|
using Base.SparseArrays.SPQR
|
|
using Base.SparseArrays.CHOLMOD
|
|
|
|
let
|
|
m, n = 100, 10
|
|
nn = 100
|
|
|
|
for eltyA in (Float64, Complex{Float64})
|
|
for eltyB in (Int, Float64, Complex{Float64})
|
|
if eltyA <: Real
|
|
A = sparse([1:n; rand(1:m, nn - n)], [1:n; rand(1:n, nn - n)], randn(nn), m, n)
|
|
else
|
|
A = sparse([1:n; rand(1:m, nn - n)], [1:n; rand(1:n, nn - n)], complex.(randn(nn), randn(nn)), m, n)
|
|
end
|
|
if eltyB == Int
|
|
B = rand(1:10, m, 2)
|
|
elseif eltyB <: Real
|
|
B = randn(m, 2)
|
|
else
|
|
B = complex.(randn(m, 2), randn(m, 2))
|
|
end
|
|
|
|
@inferred A\B
|
|
@test A\B[:,1] ≈ Array(A)\B[:,1]
|
|
@test A\B ≈ Array(A)\B
|
|
@test_throws DimensionMismatch A\B[1:m-1,:]
|
|
@test A[1:9,:]*(A[1:9,:]\ones(eltyB, 9)) ≈ ones(9) # Underdetermined system
|
|
|
|
if eltyA == eltyB # promotions not defined for unexported methods
|
|
@test qrfact(sparse(eye(eltyA, 5)))\ones(eltyA, 5) == ones(5)
|
|
@test_throws ArgumentError SPQR.factorize(SPQR.ORDERING_DEFAULT, SPQR.DEFAULT_TOL, CHOLMOD.Sparse(sparse(eye(eltyA, 5))))
|
|
@test_throws ArgumentError SPQR.Factorization(1, 1, convert(Ptr{SPQR.C_Factorization{eltyA}}, C_NULL))
|
|
F = qrfact(A)
|
|
@test size(F) == (m,n)
|
|
@test size(F, 1) == m
|
|
@test size(F, 2) == n
|
|
@test size(F, 3) == 1
|
|
@test_throws ArgumentError size(F, 0)
|
|
|
|
# low level wrappers
|
|
@test_throws DimensionMismatch SPQR.solve(SPQR.RX_EQUALS_B, F, CHOLMOD.Dense(B'))
|
|
@test_throws DimensionMismatch SPQR.solve(SPQR.RTX_EQUALS_B, F, CHOLMOD.Dense(B))
|
|
@test_throws DimensionMismatch SPQR.qmult(SPQR.QX, F, CHOLMOD.Dense(B'))
|
|
@test_throws DimensionMismatch SPQR.qmult(SPQR.XQ, F, CHOLMOD.Dense(B))
|
|
@test A\B ≈ SPQR.backslash(SPQR.ORDERING_DEFAULT, SPQR.DEFAULT_TOL, CHOLMOD.Sparse(A), CHOLMOD.Dense(B))
|
|
@test_throws DimensionMismatch SPQR.backslash(SPQR.ORDERING_DEFAULT, SPQR.DEFAULT_TOL, CHOLMOD.Sparse(A), CHOLMOD.Dense(B[1:m-1,:]))
|
|
end
|
|
end
|
|
end
|
|
|
|
# Issue 14134
|
|
F = qrfact(sprandn(10,5,0.5))
|
|
b = IOBuffer()
|
|
serialize(b, F)
|
|
seekstart(b)
|
|
@test_throws ArgumentError deserialize(b)\ones(10)
|
|
|
|
end
|