code: def mfpt_between_sets(T, target, origin, mu=None):
      
      if mu is None:
          mu = stationary_distribution(T)
  
      """Stationary distribution restriced on starting set X"""
      nuX = mu[origin]
      muX = nuX / np.sum(nuX)
  
      """Mean first-passage time to Y (for all possible starting states)"""
      tY = mfpt(T, target)
  
      """Mean first-passage time from X to Y"""
      tXY = np.dot(muX, tY[origin])
      return tXY
docs: Compute mean-first-passage time between subsets of state space.
  
      Parameters
      ----------
      T : scipy.sparse matrix
          Transition matrix.
      target : int or list of int
          Set of target states.
      origin : int or list of int
          Set of starting states.
      mu : (M,) ndarray (optional)
          The stationary distribution of the transition matrix T.
  
      Returns
      -------
      tXY : float
          Mean first passage time between set X and Y.
  
      Notes
      -----
      The mean first passage time :math:`\mathbf{E}_X[T_Y]` is the expected
      hitting time of one state :math:`y` in :math:`Y` when starting in a
      state :math:`x` in :math:`X`:
  
      .. math :: \mathbb{E}_X[T_Y] = \sum_{x \in X}
                  \frac{\mu_x \mathbb{E}_x[T_Y]}{\sum_{z \in X} \mu_z}