@@ -33,6 +33,7 @@ class GuideHandler:
33
33
def __init__ (self , producers_and_getters , set_methods ):
34
34
self .cur_term = 0
35
35
self .current_step = - 1
36
+ self .start_point = 0
36
37
self .producers_and_getters = producers_and_getters
37
38
self .set_methods = set_methods
38
39
@@ -131,8 +132,10 @@ def log_get_stale_warning(self, name, next_step):
131
132
def try_perform_forward_producer_step (self , zephyr , method , * method_args , ** method_kwargs ):
132
133
name = method .__name__
133
134
next_step = self .producer_to_step_map [name ]
134
- if name in self .set_methods :
135
+ if name in self .set_methods : # set method will update start point and start new iteration
135
136
self .try_log_skipping_steps_warning (name , next_step )
137
+ self .start_point = next_step
138
+ self .cur_term += 1
136
139
# next_step == 0, set method (already warned), or previous step is up to term
137
140
res = self .perform_producer_step (
138
141
zephyr , method , * method_args , ** method_kwargs )
@@ -143,12 +146,17 @@ def try_perform_forward_producer_step(self, zephyr, method, *method_args, **meth
143
146
def try_perform_backward_producer_step (self , zephyr , method , * method_args , ** method_kwargs ):
144
147
name = method .__name__
145
148
next_step = self .producer_to_step_map [name ]
146
- self . try_log_making_stale_warning ( next_step )
149
+ # starting new iteration
147
150
self .cur_term += 1
148
- # mark everything prior to next step as current term
149
- for i in range (0 , next_step ):
150
- if self .terms [i ] != - 1 :
151
- self .terms [i ] = self .cur_term
151
+ if next_step == 0 or name in self .set_methods :
152
+ self .start_point = next_step
153
+ else : # key method
154
+ # mark everything from start point to next step as current term
155
+ for i in range (self .start_point , next_step ):
156
+ if self .terms [i ] != - 1 :
157
+ self .terms [i ] = self .cur_term
158
+
159
+ self .try_log_making_stale_warning (next_step )
152
160
res = self .perform_producer_step (
153
161
zephyr , method , * method_args , ** method_kwargs )
154
162
return res
@@ -185,33 +193,35 @@ def try_perform_inconsistent_producer_step( # add using stale and overwriting
185
193
Otherwise, please perform step { prev_step } \
186
194
with { prev_key_method } or { prev_set_method } ." )
187
195
# inconsistent backward step: performing set method at nonzero step
188
- elif next_step < self .current_step and name in self .set_method :
189
- first_set_method = self .producers_and_getters [0 ][0 ][1 ].__name__
190
- corr_key_method = self .producers_and_getters [next_step ][0 ][0 ].__name__
191
- LOGGER .warning (f"Unable to perform { name } because you are going backwards \
192
- and performing step { next_step } with a set method.\
193
- You can only perform a backwards step with a set \
194
- method at step 0: { first_set_method } .\
195
- If you would like to perform step { next_step } , \
196
- please use the corresponding key method: { corr_key_method } ." )
196
+ # elif next_step < self.current_step and name in self.set_method:
197
+ # first_set_method = self.producers_and_getters[0][0][1].__name__
198
+ # corr_key_method = self.producers_and_getters[next_step][0][0].__name__
199
+ # LOGGER.warning(f"Unable to perform {name} because you are going backwards \
200
+ # and performing step {next_step} with a set method.\
201
+ # You can only perform a backwards step with a set \
202
+ # method at step 0: {first_set_method}.\
203
+ # If you would like to perform step {next_step}, \
204
+ # please use the corresponding key method: {corr_key_method}.")
197
205
# inconsistent backward step: performing key method but previous step is not up to date
198
206
elif next_step < self .current_step and self .terms [next_step - 1 ] != self .cur_term :
199
207
prev_step = next_step - 1
200
208
prev_key_method = self .producers_and_getters [prev_step ][0 ][0 ].__name__
201
209
corr_set_method = self .producers_and_getters [next_step ][0 ][1 ].__name__
210
+ prev_get_method = self .producers_and_getters [prev_step ][1 ][0 ].__name__
211
+ prev_set_method = self .producers_and_getters [prev_step ][0 ][1 ].__name__
202
212
LOGGER .warning (f"Unable to perform { name } because you are going \
203
213
backwards and starting a new iteration by\
204
214
performing a key method at step { next_step } \
205
215
but the result of the previous step,\
206
- step { prev_step } , is not up to date .\
207
- Please perform step { prev_step } with { prev_key_method } first. \
208
- If you already have the data for \
209
- step { next_step } from the previous iteration, \
210
- re-performing { prev_key_method } with the same \
211
- arguments should generate the same result .\
212
- Otherwise, if the data is unrelated, \
213
- please create a new Zephyr instance \
214
- and use its { corr_set_method } method. " )
216
+ step { prev_step } , is STALE .\
217
+ If you want to use the STALE result of the PREVIOUS step, \
218
+ you can call { prev_get_method } to get the data, then \
219
+ { prev_set_method } to set the data, and then recall this method. \
220
+ If you want to regenerate the data of the PREVIOUS step, \
221
+ please call { prev_key_method } , and then recall this method .\
222
+ If you already have the data for THIS step, you can \
223
+ call { corr_set_method } to set the data. \
224
+ " )
215
225
216
226
def try_perform_getter_step (self , zephyr , method , * method_args , ** method_kwargs ):
217
227
name = method .__name__
@@ -234,14 +244,11 @@ def guide_step(self, zephyr, method, *method_args, **method_kwargs):
234
244
# up-todate
235
245
next_step = self .producer_to_step_map [method_name ]
236
246
if (next_step == 0 or # 0 step always valid, starting new iteration
247
+ # set method always valid, but will update start point and start new iteration
248
+ method_name in self .set_methods or
249
+ # key method valid if previous step is up to date
250
+ self .terms [next_step - 1 ] == self .cur_term ):
237
251
# forward step only valid if set method or key method w/ no skips
238
- (next_step >= self .current_step and
239
- (method_name in self .set_methods or
240
- self .terms [next_step - 1 ] == self .cur_term )) or
241
- # backward step only valid if key method w/ previous step up to date
242
- (next_step < self .current_step and
243
- (method_name not in self .set_methods and
244
- self .terms [next_step - 1 ] == self .cur_term ))):
245
252
res = self .try_perform_producer_step (
246
253
zephyr , method , * method_args , ** method_kwargs )
247
254
return res
0 commit comments