docs: def fingerprint_relaxation(P, p0, obs, tau=1, k=None, ncv=None):
      r"""Compute dynamical fingerprint crosscorrelation.
  
      The dynamical fingerprint autocorrelation is the timescale
      amplitude spectrum of the autocorrelation of the given observables
      under the action of the dynamics P
  
      Parameters
      ----------
      P : ndarray, shape=(n, n) or scipy.sparse matrix
          Transition matrix
      p0 : ndarray, shape=(n)
          starting distribution
      obs : ndarray, shape=(n)
          Vector representing observable 2 on discrete states.
          If none, obs2=obs1, i.e. the autocorrelation is used
      tau : lag time of the the transition matrix. Used for
          computing the timescales returned
      k : int (optional)
          Number of amplitudes
      ncv : int (optional)
          The number of Lanczos vectors generated, `ncv` must be greater than k;
          it is recommended that ncv > 2*k
  
      Returns
      -------
      timescales : (N,) ndarray
          Time-scales of the transition matrix
      amplitudes : (N,) ndarray
          Amplitudes for the relaxation experiment
  
      """
      one_vec = np.ones(P.shape[0])
      return fingerprint(P, one_vec, obs2=obs, p0=p0, tau=tau, k=k, ncv=ncv)