code: def pixel_unshuffle(input, downscale_factor):
      input_shape = ivy.shape(input)
  
      ivy.utils.assertions.check_equal(
          ivy.get_num_dims(input),
          4,
          message=(
              f"pixel_unshuffle expects 4D input, but got input with sizes {input_shape}"
          ),
          as_array=False,
      )
  
      b = input_shape[0]
      c = input_shape[1]
      h = input_shape[2]
      w = input_shape[3]
      downscale_factor_squared = downscale_factor * downscale_factor
  
      ivy.utils.assertions.check_equal(
          [h % downscale_factor, w % downscale_factor],
          [
              0,
              0,
          ],  # Assert h % downscale_factor == 0 and w % downscale_factor == 0
          message=(
              "pixel_unshuffle expects input height and width to be divisible by "
              f"downscale_factor, but got input with sizes {input_shape}"
              f", downscale_factor= {downscale_factor}"
              f", and either self.size(2)= {h}"
              f" or self.size(3)= {w}"
              f" is not divisible by {downscale_factor}"
          ),
          as_array=False,
      )
      oc = c * downscale_factor_squared
      oh = int(h / downscale_factor)
      ow = int(w / downscale_factor)
  
      input_reshaped = ivy.reshape(
          input, (b, c, oh, downscale_factor, ow, downscale_factor)
      )
      return ivy.reshape(
          ivy.permute_dims(input_reshaped, (0, 1, 3, 5, 2, 4)),
          (b, oc, oh, ow),
      )
  
file_path: ivy/ivy/functional/frontends/torch/nn/functional/vision_functions.py
imports: import ivy
  from ivy import with_unsupported_dtypes, with_supported_dtypes
  from ivy.functional.frontends.torch.func_wrapper import to_ivy_arrays_and_back
label_desc: Use image node_id 11 for calling a global function with example usage: pixel_unshuffle(input, downscale_factor) and returns: ivy