code: def unstack(
      x: Union[ivy.Array, ivy.NativeArray],
      /,
      *,
      copy: Optional[bool] = None,
      axis: int = 0,
      keepdims: bool = False,
  ) -> List[ivy.Array]:
      """Unpacks the given dimension of a rank-R array into rank-(R-1) arrays.
  
      Parameters
      ----------
      x
          Input array to unstack.
      copy
          boolean indicating whether or not to copy the input array.
          If True, the function must always copy.
          If False, the function must never copy.
          In case copy is False we avoid copying by returning a view of the input array.
      axis
          Axis for which to unpack the array.
      keepdims
          Whether to keep dimension 1 in the unstack dimensions. Default is ``False``.
  
      Returns
      -------
      ret
          List of arrays, unpacked along specified dimensions.
  
      Examples
      --------
      With :class:`ivy.Array` input:
  
      >>> x = ivy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
      >>> y = ivy.unstack(x, axis=0)
      >>> print(y)
      [ivy.array([[1, 2],
                  [3, 4]]), ivy.array([[5, 6],
                  [7, 8]])]
  
      >>> x = ivy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
      >>> y = ivy.unstack(x, axis=1, keepdims=True)
      >>> print(y)
      [ivy.array([[[1, 2]],
                  [[5, 6]]]), ivy.array([[[3, 4]],
                  [[7, 8]]])]
  
      With :class:`ivy.Container` inputs:
  
      >>> x = ivy.Container(a=ivy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]),
                              b=ivy.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]]))
      >>> ivy.unstack(x, axis=0)
      [{
          a: ivy.array([[1, 2],
                        [3, 4]]),
          b: ivy.array([[9, 10],
                        [11, 12]])
      }, {
          a: ivy.array([[5, 6],
                        [7, 8]]),
          b: ivy.array([[13, 14],
                        [15, 16]])
      }]
  
      >>> x = ivy.Container(a=ivy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]),
      ...                   b=ivy.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]]))
      >>> ivy.unstack(x, axis=1, keepdims=True)
      [{
          a: ivy.array([[[1, 2]],
                        [[5, 6]]]),
          b: ivy.array([[[9, 10]],
                        [[13, 14]]])
      }, {
          a: ivy.array([[[3, 4]],
                        [[7, 8]]]),
          b: ivy.array([[[11, 12]],
                        [[15, 16]]])
      }]
  
  
      Both the description and the type hints above assumes an array input for simplicity,
      but this function is *nestable*, and therefore also accepts :class:`ivy.Container`
      instances in place of any of the arguments.
      """
      return current_backend(x).unstack(
          x, copy=copy, axis=axis, keepdims=keepdims
      )
  
imports: from typing import Union, Optional, Tuple, List, Iterable, Sequence
  from numbers import Number
  from numpy.core.numeric import normalize_axis_tuple
  import ivy
  from ivy.utils.backend import current_backend
  from ivy.func_wrapper import handle_array_function, to_native_arrays_and_back, handle_out_argument, handle_nestable, handle_array_like_without_promotion, handle_view, handle_device, handle_backend_invalid
  from ivy.utils.exceptions import handle_exceptions
label_desc: Use image node_id 16 for calling a global function with example usage: unstack() and returns: current_backend