code: def test_filter_dilation(self):
      inputs_shape = [16, 20, 12, 15, 1]
      filters_shape = [10, 6, 5, 4, 1]
  
      for filter_dilation in [(2, 1, 1), (1, 2, 1), (1, 1, 2)]:
          for border_mode in ["valid", "half", "full"]:
              self.run_conv_valid(
                  inputs_shape=inputs_shape,
                  filters_shape=filters_shape,
                  filter_dilation=filter_dilation,
                  border_mode=border_mode,
              )
  
imports: from __future__ import absolute_import, print_function, division
  import unittest
  import numpy
  import theano
  from theano import config
  from theano.tests import unittest_tools
  from theano.tensor.nnet.corr3d import Corr3dMM, Corr3dMM_gradWeights, Corr3dMM_gradInputs
  from ..type import gpuarray_shared_constructor
  from ..blas import GpuCorr3dMM, GpuCorr3dMM_gradWeights, GpuCorr3dMM_gradInputs
  from .config import mode_with_gpu, mode_without_gpu, ref_cast
  from theano.tensor.nnet.tests.test_abstract_conv import Grouped_conv3d_noOptim
label_desc: Use image node_id 4 for calling the TestCorr3dMM obj's underlying member method code with example usage: obj.test_filter_dilation() without return types