docs: def fft(xi, yi, axis=0) -> tuple:
      """Take the 1D FFT of an N-dimensional array and return "sensible" properly shifted arrays.
  
      Parameters
      ----------
      xi : numpy.ndarray
          1D array over which the points to be FFT'ed are defined
      yi : numpy.ndarray
          ND array with values to FFT
      axis : int
          axis of yi to perform FFT over
  
      Returns
      -------
      xi : 1D numpy.ndarray
          1D array. Conjugate to input xi. Example: if input xi is in the time
          domain, output xi is in frequency domain.
      yi : ND numpy.ndarray
          FFT. Has the same shape as the input array (yi).
      """
      # xi must be 1D
      if xi.ndim != 1:
          raise wt_exceptions.DimensionalityError(1, xi.ndim)
      # xi must be evenly spaced
      spacing = np.diff(xi)
      if not np.allclose(spacing, spacing.mean()):
          raise RuntimeError("WrightTools.kit.fft: argument xi must be evenly spaced")
      # fft
      yi = np.fft.fft(yi, axis=axis)
      d = (xi.max() - xi.min()) / (xi.size - 1)
      xi = np.fft.fftfreq(xi.size, d=d)
      # shift
      xi = np.fft.fftshift(xi)
      yi = np.fft.fftshift(yi, axes=axis)
      return xi, yi