code: def _get_range_edges(first, last, offset, closed='left', base=0):
      
      if isinstance(offset, CFTIME_TICKS):
          first, last = _adjust_dates_anchored(first, last, offset,
                                               closed=closed, base=base)
          return first, last
      else:
          first = normalize_date(first)
          last = normalize_date(last)
  
      if closed == 'left':
          first = offset.rollback(first)
      else:
          first = first - offset
  
      last = last + offset
      return first, last
docs: Get the correct starting and ending datetimes for the resampled
      CFTimeIndex range.
  
      Parameters
      ----------
      first : cftime.datetime
          Uncorrected starting datetime object for resampled CFTimeIndex range.
          Usually the min of the original CFTimeIndex.
      last : cftime.datetime
          Uncorrected ending datetime object for resampled CFTimeIndex range.
          Usually the max of the original CFTimeIndex.
      offset : xarray.coding.cftime_offsets.BaseCFTimeOffset
          The offset object representing target conversion a.k.a. resampling
          frequency. Contains information on offset type (e.g. Day or 'D') and
          offset magnitude (e.g., n = 3).
      closed : 'left' or 'right', optional
          Which side of bin interval is closed. Defaults to 'left'.
      base : int, optional
          For frequencies that evenly subdivide 1 day, the "origin" of the
          aggregated intervals. For example, for '5min' frequency, base could
          range from 0 through 4. Defaults to 0.
  
      Returns
      -------
      first : cftime.datetime
          Corrected starting datetime object for resampled CFTimeIndex range.
      last : cftime.datetime
          Corrected ending datetime object for resampled CFTimeIndex range.