caffe conv kernel for theano. tests work, but needs integration and some cleanup
changes after abergeron commented on the code
Fix debugmode checking in python3
remove old code that isn't used.
Add error about the missing implementation.
remove old code and small fix for not yet used code.
Opt to use GpuConvMM in valid mode.
Better handling of transfer and better error reporting and fix refcount.
warn about bugged code.
Reuse the current gpu conv test for gpuconvmm
Reuse pre allocated memory.
Add check and better error message
Partial fix
code simplication
Indentation.
Fix optimization error
Merge pull request #2006 from nouiz/opt_err_gpua

Fix optimization error
Hi Fred, I tried it out, but for me, it doesnt find conv() in package cuda_ndarray gpuval = cuda_ndarray.conv(img, kern, mode, subsample). So, made the changes in the test_conv_cuda_ndarray _test_dummy().

I see that the cpu version is computed using py_conv(), which in turn calls scipy.signal.convolve2d. How can the result 'gpuval' now be the same as scipy.signal.convolve2d instead of the scipy.signal.correlate?

Also, this still passes tests for all image, kernel, channel and batch sizes: https://github.com/stencilman/Theano-1/blob/fb66035292ef070b86466bf61c9c42b8faaa0a1c/theano/sandbox/cuda/tests/test_conv_gemm.py
Look what I did on like 117 in file theano/sandbox/cuda/tests/test_conv_cuda_ndarray.py. I rotated the kernel by 180 before convolution, and this now gives the same result as GpuConvMM. So, I think the cuda/c part is completely fine and the corrent arguments are being passed to the cublas function.
Do as the doc say, don't crash when there is None in the shape info elements.