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