提交 b93835f7 authored 作者: Frederic Bastien's avatar Frederic Bastien

Fixed test when scipy is not there.

上级 63a59ac1
......@@ -15,8 +15,10 @@ from theano.gof.opt import Optimizer
try:
import scipy.linalg
imported_scipy = True
except ImportError:
pass # some ops (e.g. Cholesky) won't work
# some ops (e.g. Cholesky, Solve, A_Xinv_b) won't work
imported_scipy = False
class Hint(Op):
"""
......@@ -195,6 +197,8 @@ def is_positive(v):
@register_stabilize
@local_optimizer([])
def inv_as_solve(node):
if not imported_scipy:
return False
if node.op == dot:
l,r = node.inputs
if l.owner and l.owner.op == matrix_inverse:
......@@ -342,6 +346,8 @@ class Cholesky(Op):
return 'Cholesky{%s,%s}' % (lu, destr)
def make_node(self, x):
assert imported_scipy, (
"Scipy not available. Scipy is needed for the Cholesky op")
x = as_tensor_variable(x)
return Apply(self, [x], [x.type()])
......@@ -544,6 +550,8 @@ class Solve(Op):
def __repr__(self):
return 'Solve{%s}'%str(self.props())
def make_node(self, A, b):
assert imported_scipy, (
"Scipy not available. Scipy is needed for the Solve op")
A = as_tensor_variable(A)
b = as_tensor_variable(b)
otype = tensor.tensor(
......@@ -731,6 +739,8 @@ def spectral_radius_bound(X, log2_exponent):
class A_Xinv_b(Op):
"""Product of form a inv(X) b"""
def make_node(self, a, X, b):
assert imported_scipy, (
"Scipy not available. Scipy is needed for the A_Xinv_b op")
a = as_tensor_variable(a)
b = as_tensor_variable(b)
X = as_tensor_variable(X)
......
......@@ -24,7 +24,8 @@ from theano.sandbox.linalg.ops import (cholesky,
#PSD_hint,
trace,
matrix_dot,
spectral_radius_bound
spectral_radius_bound,
imported_scipy,
)
from nose.plugins.skip import SkipTest
......@@ -47,6 +48,9 @@ def check_upper_triangular(pd, ch_f):
def test_cholesky():
if not imported_scipy:
raise SkipTest("Scipy needed for the Cholesky op.")
rng = numpy.random.RandomState(utt.fetch_seed())
r = rng.randn(5, 5).astype(config.floatX)
pd = numpy.dot(r, r.T)
......@@ -66,6 +70,8 @@ def test_cholesky():
def test_cholesky_grad():
if not imported_scipy:
raise SkipTest("Scipy needed for the Cholesky op.")
rng = numpy.random.RandomState(utt.fetch_seed())
r = rng.randn(5, 5).astype(config.floatX)
pd = numpy.dot(r, r.T)
......@@ -78,6 +84,9 @@ def test_cholesky_grad():
def test_cholesky_and_cholesky_grad_shape():
if not imported_scipy:
raise SkipTest("Scipy needed for the Cholesky op.")
rng = numpy.random.RandomState(utt.fetch_seed())
x = tensor.matrix()
for l in (cholesky(x), Cholesky(lower=True)(x), Cholesky(lower=False)(x)):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论