class_docstr: Rearranges elements in a tensor from depth (channel) into spatial dimensions.
  Equivalent to PyTorch's pixel_shuffle.
  
  Parameters
  ----------
  x: tensor<[n, C x f^2, H, W], T> (Required)
      * Input tensor of rank ``4``.
  upscale_factor: const<i32>
      * Factor to increase spatial resolution by.
  
  Returns
  -------
  tensor<[n, C, H x f, W x f], T>
      * where ``f`` is the upscale factor.
  
  Attributes
  ----------
  T: fp32
code: def type_inference(self):
      x_type = self.x.dtype
      n, c, h, w = self.x.shape
      f = self.upscale_factor.val
      ret_shape = (n, c // (f * f), h * f, w * f)
      return types.tensor(x_type, ret_shape)
  
imports: import functools
  import sympy
  from coremltools.converters.mil.mil.types.symbolic import is_symbolic, isscalar, any_symbolic, any_variadic
  from coremltools.converters.mil.mil import get_new_symbol, get_new_variadic_symbol, VALUE, SYMBOL, types
  from ._op_reqs import *
label_desc: Use image node_id 2 for calling the pixel_shuffle obj's underlying member method code with example usage: obj.type_inference() and returns: types