docs: def process_edge_flow(self, source, sink, i, j, algo, q):
          '''
          API: process_edge_flow(self, source, sink, i, j, algo, q)
          Description:
          Used by by max_flow_preflowpush() method. Processes edges along
          prefolow push.
          Input:
              source: Source node name of flow graph.
              sink: Sink node name of flow graph.
              i: Source node in the processed edge (tail of arc).
              j: Sink node in the processed edge (head of arc).
          Post:
              The 'flow' and 'excess' attributes of nodes may get updated.
          Return:
              Returns False if residual capacity is 0, True otherwise.
          '''
          if (self.get_node_attr(i, 'distance') !=
              self.get_node_attr(j, 'distance') + 1):
              return False
          if (i, j) in self.edge_attr:
              edge = (i, j)
              capacity = self.get_edge_attr(i, j, 'capacity')
              mult = 1
          else:
              edge = (j, i)
              capacity = 0
              mult = -1
          flow = mult*self.edge_attr[edge]['flow']
          residual_capacity = capacity - flow
          if residual_capacity == 0:
              return False
          excess_i = self.get_node_attr(i, 'excess')
          excess_j = self.get_node_attr(j, 'excess')
          push_amount = min(excess_i, residual_capacity)
          self.edge_attr[edge]['flow'] = mult*(flow + push_amount)
          self.set_node_attr(i, 'excess', excess_i - push_amount)
          self.set_node_attr(j, 'excess', excess_j + push_amount)
          return True