def test_dense_solve_single_rhs(self):
     solver = QRMUMPSSolver(self.A, verbose=False)
     solver.factorize()
     e = np.ones(self.n, dtype=np.complex64)
     rhs = self.A * e
     x = solver.solve(rhs)
     assert np.allclose(x, e, 1e-5)
 def test_dense_solve_single_rhs(self):
     solver = QRMUMPSSolver((self.m, self.n, self.arow, self.acol, self.aval), verbose=False)
     solver.factorize()
     e = np.ones(self.n, dtype=np.float64)
     rhs = np.dot(self.A, e)
     x = solver.solve(rhs)
     assert np.allclose(np.dot(self.A,x), rhs, 1e-5)
 def test_dense_solve_multiple_rhs(self):
     solver = QRMUMPSSolver((self.m, self.n, self.arow, self.acol, self.aval), verbose=False)
     solver.factorize()
     B = np.ones([self.n, 3], dtype=np.complex64)
     B[: ,1] = 2 * B[:,1]
     B[: ,2] = 3 * B[:,2]
     rhs = np.dot(self.A,B)
     x = solver.solve(rhs)
     assert np.allclose(x, B, 1e-5)
 def test_dense_solve_multiple_rhs(self):
     solver = QRMUMPSSolver(self.A, verbose=False)
     solver.factorize()
     B = np.ones([self.m, 3], dtype=np.float64)
     B[:, 1] = 2 * B[:, 1]
     B[:, 2] = 3 * B[:, 2]
     x = solver.solve(B)
     assert np.allclose(self.A * x[:, 0], B[:, 0], 1e-5)
     assert np.allclose(self.A * x[:, 1], B[:, 1], 1e-5)
     assert np.allclose(self.A * x[:, 2], B[:, 2], 1e-5)
 def test_dense_solve_multiple_rhs(self):
     solver = QRMUMPSSolver(self.A, verbose=False)
     solver.factorize()
     B = np.ones([self.n, 3], dtype=np.complex64)
     B[:, 1] = 2 * B[:, 1]
     B[:, 2] = 3 * B[:, 2]
     rhs = np.ones([self.m, 3], dtype=np.complex64)
     rhs[:, 0] = self.A * B[:, 0]
     rhs[:, 1] = self.A * B[:, 1]
     rhs[:, 2] = self.A * B[:, 2]
     x = solver.solve(rhs)
     assert np.allclose(x, B, 1e-5)
A = LLSparseMatrix(mm_filename=sys.argv[1], itype=types.INT32_T, dtype=types.COMPLEX128_T)
(n, m) = A.shape
print "A:"
print A

e = np.ones(n, dtype=np.complex128)
rhs = A * e

solver = QRMUMPSSolver(A, verbose=True)

solver.analyze()

solver.factorize()

x = solver.solve(rhs)
print "x should be 1-column vector:"
print x

print "=" * 80

rhs = np.ones([n, 3], dtype=np.complex128)
rhs[:, 1] = 2 * rhs[:, 1]
rhs[:, 2] = 3 * rhs[:, 2]

x = solver.solve(rhs)
print "x:"
print x

print x[:, 0]
print "A:"
print A

solver = QRMUMPSSolver((m, n, arow, acol, aval), verbose=False)

solver.analyze()

solver.factorize()

print "\n\nSolving Ax = b where b is a vector"
e = np.ones(n, dtype=np.float64)
b = np.dot(A, e)
print "b:"
print b

x = solver.solve(b)
np.testing.assert_almost_equal(x, e)
print "x: it should be a vector of ones"
print x


print "\n" + "=" * 80 + "\n"
print "Solving Ax = B where B is a matrix"

E = np.ones([n, 3], dtype=np.float64)
E[:, 1] = 2 * E[:, 1]
E[:, 2] = 3 * E[:, 2]
B = np.dot(A, E)
print "B:"
print B
for i in xrange(0,10):
    print "    "+"-"*76
    print "    i = %d"%i
    print "    "+"-"*76
    solver = QRMUMPSSolver((m, n, arow, acol, aval), verbose=False)

    solver.factorize('scotch')
    print solver.factorization_statistics

    e = (i+1)*np.ones(n, dtype=np.float64)
    rhs = np.dot(A, e)
    print "    rhs:"
    print rhs

    x = solver.solve(rhs)
    print "    x:"
    print x



print "-"*80
print "solving with multiple rhs"
print "-"*80

B = np.ones([n, 3], dtype=np.float64)
B[:, 1] = 2 * B[:, 1]
B[:, 2] = 3 * B[:, 2]
rhs = np.dot(A, B)
print "rhs:"
print rhs