Exemple #1
0
def psd_solve_with_chol(node):
    if node.op == solve:
        A, b = node.inputs  # result is solution Ax=b
        if is_psd(A):
            L = cholesky(A)  # assume lower triangular factor
            x = solve_cholesky(L, b)
            return [x]
Exemple #2
0
 def test_mat_mat_lower(self):
     if not imported_scipy:
         raise SkipTest("Scipy needed for the SolveCholesky op.")
     f = function([self.L, self.B], solve_cholesky(self.L, self.B))
 
     reference = scipy.linalg.cho_solve((self.L_mat, True), self.B_mat)
     result = f(self.L_mat, self.B_mat)
     numpy.testing.assert_array_almost_equal(result, reference)
Exemple #3
0
def inv_cholesky_as_solve_cholesky(node):
    if not imported_scipy:
        return False
    if isinstance(node.op, (Dot, Dot22)):
        l, r = node.inputs
        if l.owner and isinstance(l.owner.op, MatrixInverseCholesky):
            return [solve_cholesky(l.owner.inputs[0], r)]
        if r.owner and isinstance(r.owner.op, MatrixInverseCholesky):
            return [SolveCholesky(lower=False)(r.owner.inputs[0].T, l.T).T]