docs: def is_rate_matrix(K, tol):
      """
      True if K is a rate matrix
      Parameters
      ----------
      K : scipy.sparse matrix
          Matrix to check
      tol : float
          tolerance to check with
  
      Returns
      -------
      Truth value : bool
          True, if K negated diagonal is positive and row sums up to zero.
          False, otherwise
      """
      K = K.tocsr()
  
      # check rows sum up to zero.
      row_sum = K.sum(axis=1)
      sum_eq_zero = np.allclose(row_sum, np.zeros(shape=row_sum.shape), atol=tol)
  
      # store copy of original diagonal
      org_diag = K.diagonal()
  
      # substract diagonal
      K = K - diags(org_diag, 0)
  
      # check off diagonals are > 0
      values = K.data
      values_gt_zero = np.allclose(values, np.abs(values), atol=tol)
  
      # add diagonal
      K = K + diags(org_diag, 0)
  
      return values_gt_zero and sum_eq_zero