docs: def ar_periodogram(x, window='hanning', window_len=7):
      """
      Compute periodogram from data x, using prewhitening, smoothing and
      recoloring.  The data is fitted to an AR(1) model for prewhitening,
      and the residuals are used to compute a first-pass periodogram with
      smoothing.  The fitted coefficients are then used for recoloring.
  
      Parameters
      ----------
      x : array_like(float)
          A flat NumPy array containing the data to smooth
      window_len : scalar(int), optional
          An odd integer giving the length of the window.  Defaults to 7.
      window : string
          A string giving the window type. Possible values are 'flat',
          'hanning', 'hamming', 'bartlett' or 'blackman'
  
      Returns
      -------
      w : array_like(float)
          Fourier frequences at which periodogram is evaluated
      I_w : array_like(float)
          Values of periodogram at the Fourier frequences
  
      """
      # === run regression === #
      x_lag = x[:-1]  # lagged x
      X = np.array([np.ones(len(x_lag)), x_lag]).T  # add constant
  
      y = np.array(x[1:])  # current x
  
      beta_hat = np.linalg.solve(X.T @ X, X.T @ y)  # solve for beta hat
      e_hat = y - X @ beta_hat  # compute residuals
      phi = beta_hat[1]  # pull out phi parameter
  
      # === compute periodogram on residuals === #
      w, I_w = periodogram(e_hat, window=window, window_len=window_len)
  
      # === recolor and return === #
      I_w = I_w / np.abs(1 - phi * np.exp(1j * w))**2
  
      return w, I_w