Copy of ops GpuSoftmax and GpuSoftmaxWithBias from theano/sandbox/cuda/nnet.py to theano/sandbox/gpuarray/nnet.py
Copy of tests test_softmax() and test_softmax_with_bias() from theano/sandbox/cuda/tests/test_nnet.py to theano/sandbox/gpuarray/tests/test_nnet.py
Changed parent classes and added methods c_headers() and c_compiler() to ops GpuSoftmax and GpuSoftmaxWithBias.
Changed float to npy_%(dtype)s in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert x->nd to PyGpyArray_NDIM(x) in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert x->nCudaNdarray_HOST_DIMS to PyGpuArray_DIMS in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert CudaNdarray_HOST_STRIDES to PyGpuArray_STRIDES in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert CudaNdarray_DEV_DATA to PyGpuArray_DATA in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert output creation to use pygpu_empty and replace PyArray_DATA with updated code in ops GpuSoftmax and GpuSoftmaxWithBias.
Adapt tests for the ops GpuSoftmax and GpuSoftmaxWithBias and register them in opt.py.
Correct various bugs with ops GpuSoftmax and GpuSoftmaxWithBias. Current version passes tests with float32