code: def warm_spell_duration_index(tasmax, tx90, window=6, freq='YS'):
      r
      if 'dayofyear' not in tx90.coords.keys():
          raise AttributeError("tx90 should have dayofyear coordinates.")
  
      # The day of year value of the tasmax series.
      doy = tasmax.indexes['time'].dayofyear
  
      # adjustment of tx90 to tasmax doy range
      tx90 = utils.adjust_doy_calendar(tx90, tasmax)
  
      # Create an array with the shape and coords of tasmax, but with values set to tx90 according to the doy index.
      thresh = xr.full_like(tasmax, np.nan)
      thresh.data = tx90.sel(dayofyear=doy)
  
      above = (tasmax > thresh)
  
      return above.resample(time=freq).apply(rl.windowed_run_count, window=window, dim='time')
docs: r"""Warm spell duration index
  
      Number of days with at least six consecutive days where the daily maximum temperature is above the 90th
      percentile. The 90th percentile should be computed for a 5-day window centred on each calendar day in the
      1961-1990 period.
  
      Parameters
      ----------
      tasmax : xarray.DataArray
        Maximum daily temperature [℃] or [K]
      tx90 : float
        90th percentile of daily maximum temperature [℃] or [K]
      window : int
        Minimum number of days with temperature below threshold to qualify as a warm spell.
      freq : str, optional
        Resampling frequency
  
      Returns
      -------
      xarray.DataArray
        Count of days with at least six consecutive days where the daily maximum temperature is above the 90th
        percentile [days].
  
      References
      ----------
      From the Expert Team on Climate Change Detection, Monitoring and Indices (ETCCDMI).
      Used in Alexander, L. V., et al. (2006), Global observed changes in daily climate extremes of temperature and
      precipitation, J. Geophys. Res., 111, D05109, doi: 10.1029/2005JD006290.