# HG changeset patch # User drewp@bigasterisk.com # Date 1632808585 25200 # Node ID cdf706cf5f82c359e7c9a5bd011cb1b63a98ef98 # Parent 5c2565e63297552dae639d2d2c1b13ac85982d81 fix a test (odometer rollover direction) diff -r 5c2565e63297 -r cdf706cf5f82 service/mqtt_to_rdf/inference.py --- a/service/mqtt_to_rdf/inference.py Mon Sep 27 22:55:32 2021 -0700 +++ b/service/mqtt_to_rdf/inference.py Mon Sep 27 22:56:25 2021 -0700 @@ -348,22 +348,19 @@ yield perm def _advanceTheStack(self, looperRings: List[ChunkLooper]) -> bool: - - carry = True # last elem always must advance - for i, ring in reversed(list(enumerate(looperRings))): - # unlike normal odometer, advancing any earlier ring could invalidate later ones - if carry: - odolog.debug(f'{INDENT*4} advanceAll [ring={i}] {ring} carry/advance') - ring.advance() - carry = False - if ring.pastEnd(): - if ring is looperRings[0]: - allRingsDone = [r.pastEnd() for r in looperRings] - odolog.debug(f'{INDENT*5} advanceAll [ring={i}] {ring} says we done {allRingsDone=}') + toRestart: List[ChunkLooper] = [] + pos = len(looperRings) - 1 + while True: + looperRings[pos].advance() + if looperRings[pos].pastEnd(): + if pos == 0: return True - odolog.debug(f'{INDENT*5} advanceAll [ring={i}] {ring} restart') - ring.restart() - carry = True + toRestart.append(looperRings[pos]) + pos -= 1 + else: + break + for ring in reversed(toRestart): + ring.restart() return False def _assertAllRingsAreValid(self, looperRings):