changeset 1696:cdf706cf5f82 master

fix a test (odometer rollover direction)
author drewp@bigasterisk.com
date Mon, 27 Sep 2021 22:56:25 -0700
parents 5c2565e63297
children 88f6e9bf69d1
files service/mqtt_to_rdf/inference.py
diffstat 1 files changed, 12 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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):