code: def _augment(self):
          
          #build a minimum cost tree
          _pred, _ready, istar, j, mu = self._build_tree()
  
          #update prices
          self._v[_ready] += self._d[_ready] - mu
  
          #augment the solution with the minimum cost path from the
          #tree. Follows an alternating path along matched, unmatched
          #edges from X to Y
          while True:
              i = _pred[j]
              self._y[j] = i
              k = j
              j = self._x[i]
              self._x[i] = k
              if i == istar:
                  break
          self._update_cred()
docs: Finds a minimum cost path and adds it to the matching