Retrievability displayed in browser doesn’t match the retrievability displayed in the histograms on the ‘Stats’ report. (No, not simply a matter of rounding or binning.)
The ‘days elapsed’ passed to the function (fsrs.current_retrievability) that calculates the current retrievability is calculated using different functions in the two scenarios, but I haven’t gone down the rabbit hole to determine exactly what is being done differently between the two.
I can’t think of a plausible reason why these should be different, so I assume this is a bug.
let days_elapsed = self
.storage
.time_of_last_review(card.id)?
.map(|ts| timing.next_day_at.elapsed_days_since(ts))
.unwrap_or_default() as u32;
let fsrs_retrievability = card
.memory_state
.zip(Some(days_elapsed))
.map(|(state, days)| {
FSRS::new(None)
.unwrap()
.current_retrievability(state.into(), days)
});
Ok, I guess the difference in the browser is due to rounding. I guess I mean the one that is available from col.card_stats_data().fsrs_retrievability that isn’t already rounded. Above code is stats/card.rs, line 31. The purpose is to create the same statistical reports outside of Anki as in the Stats window.
Here we use the elapsed_days calculated from the revlog, which is accurate but has performance issue. It’s very slow if we need to calculate the accurate retrievability for thousands of cards.
The SchedTimingToday structure that is used in graphs/retrievability.rs isn’t properly initialized before being passed to days_since_last_review(). The next_day_at element is just set to Default::default(), when it’s passed in, but it’s then used in the function.
so there are likely a few differences not due to rounding between the browser and graph, but the number is probably pretty small for most people