code: def test_upscale_layer_shape(self):
      Case = namedtuple("Case", "scale expected_shape")
      testcases = (
          Case(scale=(2, 2), expected_shape=(None, 28, 28, 1)),
          Case(scale=(2, 1), expected_shape=(None, 28, 14, 1)),
          Case(scale=(1, 2), expected_shape=(None, 14, 28, 1)),
          Case(scale=(1, 1), expected_shape=(None, 14, 14, 1)),
          Case(scale=(1, 10), expected_shape=(None, 14, 140, 1)),
      )
  
      for testcase in testcases:
          network = layers.join(
              layers.Input((14, 14, 1)),
              layers.Upscale(testcase.scale),
          )
  
          self.assertShapesEqual(
              network.output_shape,
              testcase.expected_shape,
              msg="scale: {}".format(testcase.scale),
          )
  
imports: from collections import namedtuple
  import numpy
  import tensorflow
  from neupy import layers
  from neupy.utils import asfloat
  from neupy.exceptions import LayerConnectionError
  from neupy.layers.pooling import pooling_output_shape
  from base import BaseTestCase
label_desc: Use image node_id 2 for calling the UpscaleLayersTestCase obj's underlying member method code with example usage: obj.test_upscale_layer_shape() without return types