{"ptr_int_size", CudaNdarray_ptr_int_size, METH_VARARGS, "Return a tuple with the size of gpu pointer, cpu pointer and int in bytes."},
{"filter", filter, METH_VARARGS, "filter(obj, broadcastable, strict, storage) returns a CudaNdarray initialized to obj if it matches the constraints of broadcastable. strict=True prevents any numeric casting. If storage is a CudaNdarray it may be overwritten and used as the return value."},
{"outstanding_mallocs", outstanding_mallocs, METH_VARARGS, "how many more mallocs have been called than free's"},
{"from_gpu_pointer", CudaNdarray_from_gpu_pointer, METH_VARARGS, "Used to create a CudaNdarray from already allocated memory on the gpu.(example by pycuda)"},
{NULL, NULL, NULL, NULL} /* Sentinel */
};
...
...
@@ -2367,7 +2462,7 @@ CudaNdarray_new_nd(int nd)
return (PyObject *) rval;
}
int CudaNdarray_set_device_data(CudaNdarray * self, float * data, CudaNdarray * base)
int CudaNdarray_set_device_data(CudaNdarray * self, float * data, PyObject * base)
//N.B. XDECREF and XINCREF are no-ops for NULL pointers
if (self->base != (PyObject*)base)
if (self->base != base)
{
Py_XDECREF(self->base);
self->base = (PyObject*)base;
self->base = base;
Py_XINCREF(self->base);
}
self->data_allocated = 0;
...
...
@@ -2982,18 +3077,20 @@ CudaNdarray_dimshuffle(CudaNdarray * self, unsigned int len, const int * pattern
}
else if(dims_taken[pattern[i]])
{
PyErr_SetString(PyExc_ValueError, "Cudandarray_dimshuffle: The same input dimension may not appear twice in the list of output dimensions");
PyErr_Format(PyExc_ValueError, "Cudandarray_dimshuffle: invalid pattern for Cudandarray_dimshuffle. You used the dimensions %d multiple time",
pattern[i]);
free(newdims);
return -1;
}
else
{
if ((dims_taken[pattern[i]]) || (pattern[i]>= self->nd))
{
PyErr_SetString(PyExc_ValueError, "Cudandarray_dimshuffle: invalid pattern for Cudandarray_dimshuffle");
free(newdims);
return -1;
}
else if (pattern[i]>= self->nd)
{
PyErr_Format(PyExc_ValueError, "Cudandarray_dimshuffle: invalid pattern for Cudandarray_dimshuffle. You asked for a dimensions that don't exist %d for a %d dims CudaNdarray",