Example #1
0
    def test_shape_compatibility(self):
        use_solver(useUmfpack=True)
        A = csc_matrix([[1., 0], [0, 2]])
        bs = [
            [1, 6],
            array([1, 6]),
            [[1], [6]],
            array([[1], [6]]),
            csc_matrix([[1], [6]]),
            csr_matrix([[1], [6]]),
            dok_matrix([[1], [6]]),
            bsr_matrix([[1], [6]]),
            array([[1., 2., 3.], [6., 8., 10.]]),
            csc_matrix([[1., 2., 3.], [6., 8., 10.]]),
            csr_matrix([[1., 2., 3.], [6., 8., 10.]]),
            dok_matrix([[1., 2., 3.], [6., 8., 10.]]),
            bsr_matrix([[1., 2., 3.], [6., 8., 10.]]),
        ]

        for b in bs:
            x = np.linalg.solve(A.toarray(), toarray(b))
            for spmattype in [csc_matrix, csr_matrix, dok_matrix, lil_matrix]:
                x1 = spsolve(spmattype(A), b, use_umfpack=True)
                x2 = spsolve(spmattype(A), b, use_umfpack=False)

                # check solution
                if x.ndim == 2 and x.shape[1] == 1:
                    # interprets also these as "vectors"
                    x = x.ravel()

                assert_array_almost_equal(toarray(x1),
                                          x,
                                          err_msg=repr((b, spmattype, 1)))
                assert_array_almost_equal(toarray(x2),
                                          x,
                                          err_msg=repr((b, spmattype, 2)))

                # dense vs. sparse output  ("vectors" are always dense)
                if isspmatrix(b) and x.ndim > 1:
                    assert_(isspmatrix(x1), repr((b, spmattype, 1)))
                    assert_(isspmatrix(x2), repr((b, spmattype, 2)))
                else:
                    assert_(isinstance(x1, np.ndarray), repr(
                        (b, spmattype, 1)))
                    assert_(isinstance(x2, np.ndarray), repr(
                        (b, spmattype, 2)))

                # check output shape
                if x.ndim == 1:
                    # "vector"
                    assert_equal(x1.shape, (A.shape[1], ))
                    assert_equal(x2.shape, (A.shape[1], ))
                else:
                    # "matrix"
                    assert_equal(x1.shape, x.shape)
                    assert_equal(x2.shape, x.shape)

        A = csc_matrix((3, 3))
        b = csc_matrix((1, 3))
        assert_raises(ValueError, spsolve, A, b)
Example #2
0
 def test_dtype_cast(self):
     A_real = scipy.sparse.csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
     A_complex = scipy.sparse.csr_matrix([[1, 2, 0], [0, 0, 3],
                                          [4, 0, 5 + 1j]])
     b_real = np.array([1, 1, 1])
     b_complex = np.array([1, 1, 1]) + 1j * np.array([1, 1, 1])
     x = spsolve(A_real, b_real)
     assert_(np.issubdtype(x.dtype, np.floating))
     x = spsolve(A_real, b_complex)
     assert_(np.issubdtype(x.dtype, np.complexfloating))
     x = spsolve(A_complex, b_real)
     assert_(np.issubdtype(x.dtype, np.complexfloating))
     x = spsolve(A_complex, b_complex)
     assert_(np.issubdtype(x.dtype, np.complexfloating))
Example #3
0
 def test_singular(self):
     A = csc_matrix((5, 5), dtype='d')
     b = array([1, 2, 3, 4, 5], dtype='d')
     with suppress_warnings() as sup:
         sup.filter(MatrixRankWarning, "Matrix is exactly singular")
         x = spsolve(A, b)
     assert_(not np.isfinite(x).any())
Example #4
0
 def test_sparsity_preservation(self):
     ident = csc_matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
     b = csc_matrix([[0, 1], [1, 0], [0, 0]])
     x = spsolve(ident, b)
     assert_equal(ident.nnz, 3)
     assert_equal(b.nnz, 2)
     assert_equal(x.nnz, 2)
     assert_allclose(x.A, b.A, atol=1e-12, rtol=1e-12)
Example #5
0
 def test_bmatrix_smoketest(self):
     Adense = array([[0., 1., 1.], [1., 0., 1.], [0., 0., 1.]])
     As = csc_matrix(Adense)
     random.seed(1234)
     x = random.randn(3, 4)
     Bdense = As.dot(x)
     Bs = csc_matrix(Bdense)
     x2 = spsolve(As, Bs)
     assert_array_almost_equal(x, x2.toarray())
Example #6
0
    def test_bvector_smoketest(self):
        Adense = array([[0., 1., 1.], [1., 0., 1.], [0., 0., 1.]])
        As = csc_matrix(Adense)
        random.seed(1234)
        x = random.randn(3)
        b = As @ x
        x2 = spsolve(As, b)

        assert_array_almost_equal(x, x2)
Example #7
0
    def test_example_comparison(self):
        row = array([0, 0, 1, 2, 2, 2])
        col = array([0, 2, 2, 0, 1, 2])
        data = array([1, 2, 3, -4, 5, 6])
        sM = csr_matrix((data, (row, col)), shape=(3, 3), dtype=float)
        M = sM.toarray()

        row = array([0, 0, 1, 1, 0, 0])
        col = array([0, 2, 1, 1, 0, 0])
        data = array([1, 1, 1, 1, 1, 1])
        sN = csr_matrix((data, (row, col)), shape=(3, 3), dtype=float)
        N = sN.toarray()

        sX = spsolve(sM, sN)
        X = scipy.linalg.solve(M, N)

        assert_array_almost_equal(X, sX.toarray())
Example #8
0
    def test_twodiags(self):
        A = spdiags([[1, 2, 3, 4, 5], [6, 5, 8, 9, 10]], [0, 1], 5, 5)
        b = array([1, 2, 3, 4, 5])

        # condition number of A
        cond_A = norm(A.toarray(), 2) * norm(inv(A.toarray()), 2)

        for t in ['f', 'd', 'F', 'D']:
            eps = finfo(t).eps  # floating point epsilon
            b = b.astype(t)

            for format in ['csc', 'csr']:
                Asp = A.astype(t).asformat(format)

                x = spsolve(Asp, b)

                assert_(norm(b - Asp @ x) < 10 * cond_A * eps)
Example #9
0
    def test_singular_gh_3312(self):
        # "Bad" test case that leads SuperLU to call LAPACK with invalid
        # arguments. Check that it fails moderately gracefully.
        ij = np.array([(17, 0), (17, 6), (17, 12), (10, 13)], dtype=np.int32)
        v = np.array([0.284213, 0.94933781, 0.15767017, 0.38797296])
        A = csc_matrix((v, ij.T), shape=(20, 20))
        b = np.arange(20)

        try:
            # should either raise a runtime error or return value
            # appropriate for singular input (which yields the warning)
            with suppress_warnings() as sup:
                sup.filter(MatrixRankWarning, "Matrix is exactly singular")
                x = spsolve(A, b)
            assert not np.isfinite(x).any()
        except RuntimeError:
            pass
Example #10
0
 def test_bug_8278(self):
     check_free_memory(8000)
     use_solver(useUmfpack=True)
     A, b = setup_bug_8278()
     x = spsolve(A, b)
     assert_array_almost_equal(A @ x, b)
Example #11
0
    def test_ndarray_support(self):
        A = array([[1., 2.], [2., 0.]])
        x = array([[1., 1.], [0.5, -0.5]])
        b = array([[2., 0.], [2., 2.]])

        assert_array_almost_equal(x, spsolve(A, b))