code: def test_3d_2d_scale(self):
      aff = tf.constant([[0, 0, 3, 0, 0, 4, 0, 0, 5]], dtype=tf.float32)
      params = {
          "source_shape": (3, 3, 3),
          "output_shape": (2, 2),
          "constraints": AffineWarpConstraints.scale_3d(1, 1, 1),
      }
      expected = [[[[3, 4, 5], [3, 6, 5]], [[5, 4, 5], [5, 6, 5]]]]
      self._test_correctness(params, aff, expected)
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import tensorflow
  from niftynet.layer.grid_warper import AffineGridWarperLayer
  from niftynet.layer.grid_warper import AffineWarpConstraints
  from niftynet.layer.grid_warper import _create_affine_features
  from tests.niftynet_testcase import NiftyNetTestCase
label_desc: Use image node_id 9 for calling the AffineGridWarperLayerTest obj's underlying member method code with example usage: obj.test_3d_2d_scale() without return types