docs: def pathways(F, A, B, fraction=1.0, maxiter=1000):
      r"""Decompose flux network into dominant reaction paths.
  
      Parameters
      ----------
      F : (M, M) scipy.sparse matrix
          The flux network (matrix of netflux values)
      A : array_like
          The set of starting states
      B : array_like
          The set of end states
      fraction : float, optional
          Fraction of total flux to assemble in pathway decomposition
      maxiter : int, optional
          Maximum number of pathways for decomposition
  
      Returns
      -------
      paths : list
          List of dominant reaction pathways
      capacities: list
          List of capacities corresponding to each reactions pathway in paths
  
      Notes
      -----
      The default value for fraction is 1.0, i.e. all dominant reaction
      pathways for the flux network are computed. For large netorks the
      number of possible reaction paths can increase rapidly so that it
      becomes prohibitevely expensive to compute all possible reaction
      paths. To prevent this from happening maxiter sets the maximum
      number of reaction pathways that will be computed.
  
      For large flux networks it might be necessary to decrease fraction
      or to increase maxiter. It is advisable to begin with a small
      value for fraction and monitor the number of pathways returned
      when increasing the value of fraction.
  
      References
      ----------
      .. [1] P. Metzner, C. Schuette and E. Vanden-Eijnden.
          Transition Path Theory for Markov Jump Processes.
          Multiscale Model Simul 7: 1192-1219 (2009)
  
      """
      if issparse(F):
          return sparse.pathways.pathways(F, A, B, fraction=fraction, maxiter=maxiter)
      elif isdense(F):
          return sparse.pathways.pathways(csr_matrix(F), A, B, fraction=fraction, maxiter=maxiter)
      else:
          raise _type_not_supported