def run_gpu_solve(self, A_val, x_val): b_val = numpy.dot(A_val, x_val) b_val_trans = numpy.dot(A_val.T, x_val) A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") b_trans = theano.tensor.matrix("b", dtype="float32") solver = gpu_solve(A, b) solver_trans = gpu_solve(A, b_trans, trans='T') fn = theano.function([A, b, b_trans], [solver, solver_trans], mode=mode_with_gpu) res = fn(A_val, b_val, b_val_trans) x_res = numpy.array(res[0]) x_res_trans = numpy.array(res[1]) utt.assert_allclose(x_res, x_val) utt.assert_allclose(x_res_trans, x_val)
def run_gpu_solve(self, A_val, x_val): b_val = numpy.dot(A_val, x_val) b_val_trans = numpy.dot(A_val.T, x_val) A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") b_trans = theano.tensor.matrix("b", dtype="float32") solver = gpu_solve(A, b) solver_trans = gpu_solve(A, b_trans, trans='T') fn = theano.function([A, b, b_trans], [solver, solver_trans], mode=mode_with_gpu) res = fn(A_val, b_val, b_val_trans) x_res = numpy.array(res[0]) x_res_trans = numpy.array(res[1]) utt.assert_allclose(x_res, x_val) utt.assert_allclose(x_res_trans, x_val)
def run_gpu_solve(self, A_val, x_val, A_struct=None): b_val = np.dot(A_val, x_val) b_val_trans = np.dot(A_val.T, x_val) A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") b_trans = theano.tensor.matrix("b", dtype="float32") if A_struct is None: solver = gpu_solve(A, b) solver_trans = gpu_solve(A, b_trans, trans="T") else: solver = gpu_solve(A, b, A_struct) solver_trans = gpu_solve(A, b_trans, A_struct, trans="T") fn = theano.function([A, b, b_trans], [solver, solver_trans], mode=mode_with_gpu) res = fn(A_val, b_val, b_val_trans) x_res = np.array(res[0]) x_res_trans = np.array(res[1]) utt.assert_allclose(x_val, x_res) utt.assert_allclose(x_val, x_res_trans)
def test_linalgerr_solve(self): numpy.random.seed(1) A_val = numpy.random.uniform(-0.4, 0.4, (5, 5)).astype("float32") x_val = numpy.random.uniform(-0.4, 0.4, (A_val.shape[1], 4)).astype("float32") # make A singular A_val[:, 2] = 0 A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") solver = gpu_solve(A, b, trans='T') fn = theano.function([A, b], [solver], mode=mode_with_gpu) self.assertRaises(LinAlgError, fn, A_val, x_val)
def test_linalgerr_solve(self): np.random.seed(1) A_val = np.random.uniform(-0.4, 0.4, (5, 5)).astype("float32") x_val = np.random.uniform(-0.4, 0.4, (A_val.shape[1], 4)).astype("float32") # make A singular A_val[:, 2] = 0 A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") solver = gpu_solve(A, b, trans='T') fn = theano.function([A, b], [solver], mode=mode_with_gpu) self.assertRaises(LinAlgError, fn, A_val, x_val)
def test_linalgerrsym_solve(self): np.random.seed(1) A_val = np.random.uniform(-0.4, 0.4, (5, 5)).astype("float32") x_val = np.random.uniform(-0.4, 0.4, (A_val.shape[1], 4)).astype("float32") A_val = np.dot(A_val.T, A_val) # make A singular A_val[:, 2] = A_val[:, 1] + A_val[:, 3] A = theano.tensor.matrix("A", dtype="float32") b = theano.tensor.matrix("b", dtype="float32") solver = gpu_solve(A, b, "symmetric") fn = theano.function([A, b], [solver], mode=mode_with_gpu) with pytest.raises(LinAlgError): fn(A_val, x_val)