code: def unstack(self, dim=None):
          
          ds = self._to_temp_dataset().unstack(dim)
          return self._from_temp_dataset(ds)
docs: Unstack existing dimensions corresponding to MultiIndexes into
          multiple new dimensions.
  
          New dimensions will be added at the end.
  
          Parameters
          ----------
          dim : str or sequence of str, optional
              Dimension(s) over which to unstack. By default unstacks all
              MultiIndexes.
  
          Returns
          -------
          unstacked : DataArray
              Array with unstacked data.
  
          Examples
          --------
  
          >>> arr = DataArray(np.arange(6).reshape(2, 3),
          ...                 coords=[('x', ['a', 'b']), ('y', [0, 1, 2])])
          >>> arr
          <xarray.DataArray (x: 2, y: 3)>
          array([[0, 1, 2],
                 [3, 4, 5]])
          Coordinates:
            * x        (x) |S1 'a' 'b'
            * y        (y) int64 0 1 2
          >>> stacked = arr.stack(z=('x', 'y'))
          >>> stacked.indexes['z']
          MultiIndex(levels=[['a', 'b'], [0, 1, 2]],
                     labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
                     names=['x', 'y'])
          >>> roundtripped = stacked.unstack()
          >>> arr.identical(roundtripped)
          True
  
          See also
          --------
          DataArray.stack