code: def test_returns_none_3d(self):
      if theano.config.cxx == "":
          raise SkipTest("Need a c compiler.")
      imshp = (2, 3, 5, 5, 5)
      kshp = (4, 3, 3, 3, 3)
      tshp = (2, 4, 3, 3, 3)
      conv_direction = [0, 1, 2]
      optimisers = [
          [
              opt.local_abstractconv3d_alt,
              opt.local_abstractconv3d_cudnn_alt,
          ],
          [
              opt.local_abstractconv3d_gemm_gradweights_alt,
              opt.local_abstractconv3d_cudnn_alt,
          ],
          [
              opt.local_abstractconv3d_gradinputs_gemm_alt,
              opt.local_abstractconv3d_cudnn_alt,
          ],
      ]
      # test that non default subsample returns None
      for opt_direction, direction in zip(optimisers, conv_direction):
          for optimiser in opt_direction:
              self.optimizer_3d(
                  [imshp, kshp, tshp],
                  direction,
                  "",
                  "",
                  None,
                  subsample=(2, 2, 2),
                  optimiser=optimiser,
              )
      # test that non default num_groups returns None
      for opt_direction, direction in zip(optimisers, conv_direction):
          for optimiser in opt_direction:
              self.optimizer_3d(
                  [imshp, kshp, tshp],
                  direction,
                  "",
                  "",
                  None,
                  num_groups=3,
                  optimiser=optimiser,
              )
      # test that border_mode=half returns None
      for opt_direction, direction in zip(optimisers, conv_direction):
          for optimiser in opt_direction:
              self.optimizer_3d(
                  [imshp, kshp, tshp],
                  direction,
                  "",
                  "",
                  None,
                  border_mode="half",
                  optimiser=optimiser,
              )
      # test that Non-default filter dilation return None for
      # direction 1
      for optimiser in optimisers[1]:
          self.optimizer_3d(
              [imshp, kshp, tshp],
              1,
              "",
              "",
              None,
              filter_dilation=(2, 2, 2),
              optimiser=optimiser,
          )
  
imports: from __future__ import absolute_import, print_function, division
  from nose.tools import assert_raises
  import numpy
  import theano
  from theano import tensor
  import theano.tensor.slinalg
  from theano.tests.breakpoint import PdbBreakpoint
  from theano.tests import unittest_tools, test_ifelse
  from theano.tensor.tests import test_basic
  from theano.gof.opt import check_stack_trace
  import theano.gpuarray
  from ..None import basic_ops
  from ..type import GpuArrayType, gpuarray_shared_constructor, get_context
  from ..basic_ops import GpuAlloc, GpuAllocEmpty, GpuReshape, GpuFromHost, HostFromGpu, host_from_gpu
  from ..blas import GpuGemm
  from ..elemwise import GpuCAReduceCuda, GpuCAReduceCPY, GpuElemwise, Elemwise, max_inputs_to_GpuElemwise
  from ..dnn import GpuDnnReduction
  from ..subtensor import GpuSubtensor
  from ..linalg import GpuCusolverSolve, cusolver_available, GpuCholesky
  from .config import mode_with_gpu, mode_without_gpu, test_ctx_name, SkipTest
  import unittest
  from theano.tensor.nnet import abstract_conv
  from theano.gpuarray import dnn, blas, opt
label_desc: Use image node_id 7 for calling the Conv_opt_test obj's underlying member method code with example usage: obj.test_returns_none_3d() without return types