Releases: open-spaced-repetition/py-fsrs
Release list
v6.3.1
What's Changed
- Fix docs gh action by @joshdavham in #147
- Torch 2.9 by @joshdavham in #148
- Fix ty error and suppress warnings by @joshdavham in #150
- Add py.typed marker for PEP 561 support (#151) by @qiinori in #153
- bump version to 6.3.1 by @ishiko732 in #154
New Contributors
Full Changelog: v6.3.0...v6.3.1
v6.3.0
What's Changed
- Replace mypy with ty by @joshdavham in #139
- add badge to README for pdoc documentation by @joshdavham in #141
- add FUNDING.yml by @joshdavham in #140
- Add json-serialization by @joshdavham in #142
- Nit: update documentation by @joshdavham in #144
- Nit: update CI by @joshdavham in #145
- Bump minor for release by @joshdavham in #146
Full Changelog: 6.2.0...v6.3.0
v6.2.0
What's Changed
- Test Python 3.14 Release Candidate by @joshdavham in #132
- Update default parameters by @joshdavham in #133
- Fix torch warning by @joshdavham in #134
- Reintroduce mypy by @joshdavham in #135
- Add link to interactive demo of py-fsrs in README by @joshdavham in #136
- add tests passing/failing badge to README by @joshdavham in #137
- Add method for rescheduling cards by @joshdavham in #138
Full Changelog: v6.1.1...6.2.0
v6.1.1
What's Changed
- Enforce keyword arguments in internal methods by @joshdavham in #125
- Add lazy loading for the Optimizer module by @joshdavham in #127
Full Changelog: v6.1.0...v6.1.1
v6.1.0
What's Changed
- Update ruff.yml to autofix by @asukaminato0721 in #111
- Generate py-fsrs documention and host on Github pages by @joshdavham in #114
- Update documentation by @joshdavham in #115
- Add verbose option when optimizing by @joshdavham in #116
- Add eq methods by @joshdavham in #117
- use Codecov by @L-M-Sherlock in #119
- Add dependabot by @joshdavham in #118
- Add full code coverage for basic, non-optimizer code by @joshdavham in #120
- Use dataclasses by @joshdavham in #121
- Make codebase more modular by @joshdavham in #122
- Minor release by @joshdavham in #123
Full Changelog: v6.0.1...v6.1.0
v6.0.1
What's Changed
- Speed up optimizer unit tests with parallelization by @joshdavham in #105
- Use match structures by @joshdavham in #107
- Remove type annotations from docstrings + fix some typos by @joshdavham in #108
- Add check for code formatting in Ruff GH action by @joshdavham in #109
- Validate scheduler parameters by @joshdavham in #110
- Fix error with non-existing function by @andruum in #112
- Bump patch for release 6.0.0 -> 6.0.1 by @joshdavham in #113
New Contributors
Full Changelog: v6.0.0...v6.0.1
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
v5.1.3
What's Changed
- Bring Py-FSRS up to recommended community standards by @joshdavham in #93
- try uv by @asukaminato0721 in #97
- Clamp Card.difficulty differently if it's a tensor by @joshdavham in #100
- Update pyproject.toml by @asukaminato0721 in #98
Full Changelog: v5.1.2...v5.1.3
v5.1.2
What's Changed
- Fix handling of multiple schedulers edge case by @joshdavham in #91
Full Changelog: v5.1.1...v5.1.2
v5.1.1
What's Changed
- Fix multiple schedulers edge case by @joshdavham in #90
Full Changelog: v5.1.0...v5.1.1