code: def _augmenting_row_reduction(self):
          
          unassigned = np.where(self._x == -1)[0]
          for i in unassigned:
              for _ in range(self.c.size):
                  # Time in this loop can be proportional to 1/epsilon
                  # This step is not strictly necessary, so cutoff early
                  # to avoid near-infinite loops
  
                  # find smallest 2 values and indices
                  temp = self.c[i] - self._v
                  j1 = np.argmin(temp)
                  u1 = temp[j1]
                  temp[j1] = np.inf
                  j2 = np.argmin(temp)
                  u2 = temp[j2]
  
                  if u1 < u2:
                      self._v[j1] -= u2 - u1
                  elif self._y[j1] != -1:
                      j1 = j2
                  k = self._y[j1]
                  if k != -1:
                      self._x[k] = -1
                      self._x[i] = j1
                      self._y[j1] = i
                      i = k
                  if k == -1 or abs(u1 - u2) < self.epsilon:
                      break
docs: Augmenting row reduction step from LAPJV algorithm