提交 c55d0ab9 authored 作者: Frederic's avatar Frederic

Fix crash tensor.roll(Var, iscalar) reported by Jeremiah Lowin.

上级 a696539d
......@@ -5632,8 +5632,8 @@ def roll(x, shift, axis=None):
end_list = ([allslice] * axis + [end_slice] +
[allslice] * (x.ndim - axis - 1))
return join(axis,
Subtensor(front_list)(x),
Subtensor(end_list)(x))
x.__getitem__(tuple(front_list)),
x.__getitem__(tuple(end_list)))
@constructor
......
......@@ -3625,16 +3625,17 @@ class T_Join_and_Split(unittest.TestCase):
def test_roll(self):
for get_shift in [lambda a:a, lambda x:theano.shared(x)]:
# Test simple 1D example
a = self.shared(numpy.array([1, 2, 3, 4, 5, 6], dtype=self.floatX))
b = roll(a, 2)
b = roll(a, get_shift(2))
want = numpy.array([5, 6, 1, 2, 3, 4])
out = theano.function([], b)()
assert (out == want).all()
# Test simple 1D example with explicit 0 axis
b = roll(a, -1, 0)
b = roll(a, get_shift(-1), 0)
want = numpy.array([2, 3, 4, 5, 6, 1])
out = theano.function([], b)()
......@@ -3642,7 +3643,7 @@ class T_Join_and_Split(unittest.TestCase):
# Test 2D example - ensure that behavior matches numpy.roll behavior
a = self.shared(numpy.arange(21).reshape((3, 7)).astype(self.floatX))
b = roll(a, -2, 1)
b = roll(a, get_shift(-2), 1)
want = numpy.roll(a.get_value(borrow=True), -2, 1)
out = theano.function([], b)()
......@@ -3651,14 +3652,14 @@ class T_Join_and_Split(unittest.TestCase):
# Test rolling on axis 0
want = numpy.roll(a.get_value(borrow=True), -2, 0)
b = roll(a, -2, 0)
b = roll(a, get_shift(-2), 0)
out = theano.function([], b)()
assert (out == want).all()
# Test rolling on default axis with ndim > 1
want = numpy.roll(a.get_value(borrow=True), 2)
b = roll(a, 2)
b = roll(a, get_shift(2))
out = theano.function([], b)()
assert (out == want).all()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论