提交 5b5735d6 authored 作者: Frederic Bastien's avatar Frederic Bastien

Fix a bug found with James in CudaNdarray.__getitem__ with negitave index.

Fix a bug found with new test. We did not raise correctly error when we where out of bound. Added more tests case that cover those case.
上级 989b631a
......@@ -1098,12 +1098,12 @@ CudaNdarray_Subscript(PyObject * py_self, PyObject * key)
else if ((d_idx < 0) && (d_idx >= -d_dim))
{
//end-based indexing
offset += (d_dim - d_idx) * CudaNdarray_HOST_STRIDES(self)[0];
// d_idx is negative
offset += (d_dim + d_idx) * CudaNdarray_HOST_STRIDES(self)[0];
}
else
{
PyErr_SetString(PyExc_IndexError, "index out of bounds");
Py_DECREF(rval);
return NULL;
}
......
......@@ -257,32 +257,54 @@ def test_mapping_getitem_w_int():
print y
assert numpy.all(x == y)
def _cmpf(x,*y):
try:
x.__getitem__(y)
except IndexError:
pass
else:
raise Exception("Did not generate out or bound error")
dim =(2,)
a = theano._asarray(numpy.random.rand(*dim), dtype='float32')
_a = cuda_ndarray.CudaNdarray(a)
_cmp(numpy.asarray(_a[1]), a[1])
_cmp(numpy.asarray(_a[-1]), a[-1])
_cmp(numpy.asarray(_a[0]), a[0])
_cmp(numpy.asarray(_a[::1]), a[::1])
_cmp(numpy.asarray(_a[::-1]), a[::-1])
_cmp(numpy.asarray(_a[...]), a[...])
_cmpf(_a,2)
dim =()
a = theano._asarray(numpy.random.rand(*dim), dtype='float32')
_a = cuda_ndarray.CudaNdarray(a)
_cmp(numpy.asarray(_a[...]), a[...])
#TODO: test slice err
#TODO: test tuple err
dim =(5,4,3,2)
a = theano._asarray(numpy.random.rand(*dim), dtype='float32')
_a = cuda_ndarray.CudaNdarray(a)
_cmpf(_a,slice(-1),slice(-1),10,-10)
_cmpf(_a,slice(-1),slice(-1),-10,slice(-1))
_cmpf(_a,0,slice(0,-1,-20),-10)
_cmpf(_a,10)
_cmpf(_a,-10)
_cmp(numpy.asarray(_a[:,:,::-1, ::-1]), a[:,:,::-1,::-1])
_cmp(numpy.asarray(_a[:,:,::-10, ::-10]), a[:,:,::-10,::-10])
_cmp(numpy.asarray(_a[:,:,1,-1]), a[:,:,1,-1])
_cmp(numpy.asarray(_a[:,:,-1,:]), a[:,:,-1,:])
_cmp(numpy.asarray(_a[:,::-2,-1,:]), a[:,::-2,-1,:])
_cmp(numpy.asarray(_a[:,::-20,-1,:]), a[:,::-20,-1,:])
_cmp(numpy.asarray(_a[:,::-2,-1]), a[:,::-2,-1])
_cmp(numpy.asarray(_a[0,::-2,-1]), a[0,::-2,-1])
_cmp(numpy.asarray(_a[1]), a[1])
_cmp(numpy.asarray(_a[-1]), a[-1])
_cmp(numpy.asarray(_a[-1,-1,-1,-2]), a[-1,-1,-1,-2])
_cmp(numpy.asarray(_a[...]), a[...])
def test_gemm_vector_vector():
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论