@@ -223,17 +223,17 @@ def to_inferencedata(self, *, equalize_chain_lengths: bool = True, **kwargs) ->
223
223
posterior = collections .defaultdict (list )
224
224
sample_stats = collections .defaultdict (list )
225
225
for c , chain in enumerate (chains ):
226
- # NOTE: Replace the truncation with a ranged fetch once issue #47 is resolved.
226
+ # Create a slice to use when fetching the variables
227
227
if min_clen is None :
228
228
# Every retrieved array is shortened to the previously determined chain length.
229
- # This is needed for database backends which may get inserts inbetween.
230
- clen = chain_lengths [chain .cid ]
229
+ # Needed for backends which may get inserts inbetween our get_draws/get_stats calls .
230
+ slc = slice ( 0 , chain_lengths [chain .cid ])
231
231
else :
232
- clen = min_clen
232
+ slc = slice ( 0 , min_clen )
233
233
234
234
# Obtain a mask by which draws can be split into warmup/posterior
235
235
if "tune" in chain .sample_stats :
236
- tune = chain .get_stats ("tune" )[: clen ] .astype (bool )
236
+ tune = chain .get_stats ("tune" , slc ) .astype (bool )
237
237
else :
238
238
if c == 0 :
239
239
_log .warning (
@@ -243,12 +243,12 @@ def to_inferencedata(self, *, equalize_chain_lengths: bool = True, **kwargs) ->
243
243
244
244
# Split all variables draws into warmup/posterior
245
245
for var in variables :
246
- draws = chain .get_draws (var .name )[: clen ]
246
+ draws = chain .get_draws (var .name , slc )
247
247
warmup_posterior [var .name ].append (draws [tune ])
248
248
posterior [var .name ].append (draws [~ tune ])
249
249
# Same for sample stats
250
250
for svar in self .meta .sample_stats :
251
- stats = chain .get_stats (svar .name )[: clen ]
251
+ stats = chain .get_stats (svar .name , slc )
252
252
warmup_sample_stats [svar .name ].append (stats [tune ])
253
253
sample_stats [svar .name ].append (stats [~ tune ])
254
254
0 commit comments