提交 b089bfb0 authored 作者: goodfeli's avatar goodfeli

Merge pull request #278 from nouiz/scipy_test

Fixed test when scipy is not there.
......@@ -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)):
......
......@@ -9,7 +9,7 @@ import numpy
import theano
from numpy import (arange, array, common_type, complex64, complex128, float32,
float64, newaxis, shape, transpose, zeros)
from numpy.testing import assert_, assert_array_almost_equal
from numpy.testing import assert_array_almost_equal
#from numpy.testing import dec
#from numpy.testing.noseclasses import KnownFailureTest
......@@ -1003,7 +1003,7 @@ def matrixmultiply(a, b):
b = b[:,newaxis]
else:
b_is_vector = False
assert_(a.shape[1] == b.shape[0])
assert a.shape[1] == b.shape[0]
c = zeros((a.shape[0], b.shape[1]), common_type(a, b))
for i in xrange(a.shape[0]):
for j in xrange(b.shape[1]):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论