v6.0.0
Py-FSRS 6.0.0
This release upgrades Py-FSRS to use the new FSRS 6 model which is an improvement over the previous FSRS 5 model.
In particular, FSRS 6 adds two new parameters to the model that help better schedule cards that have been reviewed twice or more in the same day (short term reviews) as well as more accurately model the rate of forgetting for all cards in general.
This is also a major version change, so there are some breaking changes:
Breaking changes
- Creating a
Schedulerobject with custom parameters now requires 21 parameters instead of the previous 19. - You can no longer compute a
Cardobject's retrievability by itself as this now requires aSchedulerobject to do this. And so theCard.get_retrievability()method has been replaced with theScheduler.get_card_retrievability(card: Card)method.
Migrate from Py-FSRS 5 -> Py-FSRS 6
Update Scheduler parameters
If you were previously just using the Scheduler without any custom parameters of your own, you can probably skip this part.
However, if you were setting your own custom FSRS 5 parameters to the Scheduler, then the easiest way to migrate to FSRS 6 would be to append the two following parameters to your current parameters like so:
# example of 19 valid fsrs 5 parameters
old_fsrs_5_scheduler_parameters = (
0.40255,
1.18385,
3.173,
15.69105,
7.1949,
0.5345,
1.4604,
0.0046,
1.54575,
0.1192,
1.01925,
1.9395,
0.11,
0.29605,
2.2698,
0.2315,
2.9898,
0.51655,
0.6621,
)
new_parameter_19 = 0.0
new_parameter_20 = 0.5
new_fsrs_6_scheduler_parameters = old_fsrs_5_scheduler_parameters + (new_parameter_19,new_parameter_20)
new_fsrs_6_scheduler = Scheduler(parameters=new_fsrs_6_scheduler_parameters)With the above change, the scheduler should continue to behave just like before with FSRS 5 without any big noticeable changes.
Computing a Card's retrievability
In FSRS 6, you can no longer calculate a Card object's retrievability by itself. You now need to use the card's corresponding Scheduler object.
To migrate, replace instances of
retrievability = card.get_retrievability(some_datetime)with
# note that get_card_retrievability requires an initialized scheduler as this is not a static method
retrievability = scheduler.get_card_retrievability(card, some_datetime)What's Changed
- Enforce lower bound on card stability on stability updates by @joshdavham in #103
- FSRS 6 by @joshdavham in #104
Full Changelog: v5.1.3...v6.0.0