docs: def resample(self, indexer: Optional[Mapping[Hashable, str]] = None,
                   skipna=None, closed: Optional[str] = None,
                   label: Optional[str] = None,
                   base: int = 0, keep_attrs: Optional[bool] = None,
                   loffset=None,
                   **indexer_kwargs: str):
          """Returns a Resample object for performing resampling operations.
  
          Handles both downsampling and upsampling. If any intervals contain no
          values from the original object, they will be given the value ``NaN``.
  
          Parameters
          ----------
          indexer : {dim: freq}, optional
              Mapping from the dimension name to resample frequency.
          skipna : bool, optional
              Whether to skip missing values when aggregating in downsampling.
          closed : 'left' or 'right', optional
              Side of each interval to treat as closed.
          label : 'left or 'right', optional
              Side of each interval to use for labeling.
          base : int, optional
              For frequencies that evenly subdivide 1 day, the "origin" of the
              aggregated intervals. For example, for '24H' frequency, base could
              range from 0 through 23.
          loffset : timedelta or str, optional
              Offset used to adjust the resampled time labels. Some pandas date
              offset strings are supported.
          keep_attrs : bool, optional
              If True, the object's attributes (`attrs`) will be copied from
              the original object to the new one.  If False (default), the new
              object will be returned without attributes.
          **indexer_kwargs : {dim: freq}
              The keyword arguments form of ``indexer``.
              One of indexer or indexer_kwargs must be provided.
  
          Returns
          -------
          resampled : same type as caller
              This object resampled.
  
          Examples
          --------
          Downsample monthly time-series data to seasonal data:
  
          >>> da = xr.DataArray(np.linspace(0, 11, num=12),
          ...                   coords=[pd.date_range('15/12/1999',
          ...                           periods=12, freq=pd.DateOffset(months=1))],
          ...                   dims='time')
          >>> da
          <xarray.DataArray (time: 12)>
          array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7., 8.,   9.,  10.,  11.])
          Coordinates:
            * time     (time) datetime64[ns] 1999-12-15 2000-01-15 2000-02-15 ...
          >>> da.resample(time="QS-DEC").mean()
          <xarray.DataArray (time: 4)>
          array([ 1.,  4.,  7., 10.])
          Coordinates:
            * time     (time) datetime64[ns] 1999-12-01 2000-03-01 2000-06-01 2000-09-01
  
          Upsample monthly time-series data to daily data:
  
          >>> da.resample(time='1D').interpolate('linear')
          <xarray.DataArray (time: 337)>
          array([ 0.      ,  0.032258,  0.064516, ..., 10.935484, 10.967742, 11.      ])
          Coordinates:
            * time     (time) datetime64[ns] 1999-12-15 1999-12-16 1999-12-17 ...
  
          Limit scope of upsampling method
          >>> da.resample(time='1D').nearest(tolerance='1D')
          <xarray.DataArray (time: 337)>
          array([ 0.,  0., nan, ..., nan, 11., 11.])
          Coordinates:
            * time     (time) datetime64[ns] 1999-12-15 1999-12-16 ... 2000-11-15
  
          References
          ----------
  
          .. [1] http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
          """  # noqa
          # TODO support non-string indexer after removing the old API.
  
          from .dataarray import DataArray
          from .resample import RESAMPLE_DIM
          from ..coding.cftimeindex import CFTimeIndex
  
          if keep_attrs is None:
              keep_attrs = _get_keep_attrs(default=False)
  
          # note: the second argument (now 'skipna') use to be 'dim'
          if ((skipna is not None and not isinstance(skipna, bool))
                  or ('how' in indexer_kwargs and 'how' not in self.dims)
                  or ('dim' in indexer_kwargs and 'dim' not in self.dims)):
              raise TypeError(
                  'resample() no longer supports the `how` or '
                  '`dim` arguments. Instead call methods on resample '
                  "objects, e.g., data.resample(time='1D').mean()")
  
          indexer = either_dict_or_kwargs(indexer, indexer_kwargs, 'resample')
          if len(indexer) != 1:
              raise ValueError(
                  "Resampling only supported along single dimensions."
              )
          dim, freq = next(iter(indexer.items()))
  
          dim_name = dim
          dim_coord = self[dim]
  
          if isinstance(self.indexes[dim_name], CFTimeIndex):
              from .resample_cftime import CFTimeGrouper
              grouper = CFTimeGrouper(freq, closed, label, base, loffset)
          else:
              # TODO: to_offset() call required for pandas==0.19.2
              grouper = pd.Grouper(freq=freq, closed=closed, label=label,
                                   base=base,
                                   loffset=pd.tseries.frequencies.to_offset(
                                       loffset))
          group = DataArray(dim_coord, coords=dim_coord.coords,
                            dims=dim_coord.dims, name=RESAMPLE_DIM)
          resampler = self._resample_cls(self, group=group, dim=dim_name,
                                         grouper=grouper,
                                         resample_dim=RESAMPLE_DIM)
  
          return resampler