code: def test_3d_shape(self):
      expected_shape = (2, 8, 8, 8, 4)
      self._test_nd_output_shape(3, {}, expected_shape)
  
      params = {
          "n_output_chns": 16,
          "kernel_size": 5,
          "downsample_kernel_size": 3,
          "downsample_stride": 2,
          "acti_func": "relu",
      }
      expected_shape = (2, 8, 8, 8, 16)
      self._test_nd_output_shape(3, params, expected_shape)
  
      params = {
          "n_output_chns": 16,
          "kernel_size": 3,
          "downsample_kernel_size": 4,
          "downsample_stride": 3,
          "acti_func": "prelu",
      }
      expected_shape = (2, 6, 6, 6, 16)
      self._test_nd_output_shape(3, params, expected_shape)
  
file_path: NiftyNet/tests/downsample_res_block_test.py
imports: from __future__ import absolute_import, print_function
  import tensorflow
  from niftynet.layer.downsample_res_block import DownBlock
  from tests.niftynet_testcase import NiftyNetTestCase
label_desc: Use image node_id 4 for calling the DownsampleResBlockTest obj's underlying member method code with example usage: obj.test_3d_shape() without return types