Damien Elmes
f98fbbf298
Revert "Ensure minimum doesn't exceed maximum"
...
This reverts commit 37ce4e8426 .
Also remove a stale comment that is no longer relevant after
b8ec76fb66
2024-06-28 19:49:23 +08:00
Jarrett Ye
6d13221ae5
Remove threshold of compute minimum recommended retention ( #3246 )
...
* remove threshold of compute minimum recommended retention
* update tool tip of compute-optimal-retention
* cargo clippy --fix
* Update FsrsOptionsOuter.svelte
* Remove 'from 0 cards' reference (dae)
2024-06-28 18:26:39 +07:00
user1823
8d11a909ed
Fix FSRS easy interval being same as good interval in relearning cards ( #3256 )
...
* Fix FSRS easy interval being same as good interval in relearning cards
https://github.com/ankitects/anki/pull/3236#issuecomment-2187787774
* Update relearning.rs
* Update relearning.rs
* Set min interval of easy to Good + 1
* Ensure minimum doesn't exceed maximum (dae)
With a maximum interval set, it would be possible to confuse with_review_fuzz()
by passing min > max.
2024-06-28 18:20:45 +07:00
Jarrett Ye
79917bbd2d
Fix/Relearning cards' Intervals don't update after changing Desired Retention ( #3236 )
...
* Fix/Relearning cards' Intervals don't update after changing Desired Retention
* cargo clippy --fix
2024-06-22 10:44:02 +01:00
Jarrett Ye
2b890b0eee
Fix/ignore revlogs when there is not learn entry after the last forget entry ( #3199 )
2024-05-17 06:07:15 +01:00
Abdo
ce8ddc84b9
Fix finished preview learning cards being repeated ( #3196 )
2024-05-15 12:55:25 +01:00
Jarrett Ye
c9c7a3133c
Use median in calculating cost and remove outliers ( #3181 )
...
* Use median in calculating cost and remove outliers
* extract fn median_secs
2024-05-02 20:16:04 +10:00
Abdo
22ac77896f
Show review count for Evaluate/Optimize button ( #3170 )
...
* Revert "Show review count with FSRS evaluation results (#3165 )"
This reverts commit b7e782c7e1 .
* Show review count for Evaluate/Optimize button
2024-05-01 17:02:59 +10:00
Abdo
b7e782c7e1
Show review count with FSRS evaluation results ( #3165 )
2024-04-25 17:10:41 +10:00
Jarrett Ye
2c9accf595
update optimal retention and parameters tooltip ( #3148 )
...
* update optimal retention and parameters tooltip
* Revert "update optimal retention and parameters tooltip"
This reverts commit 32fdc5c1c3 .
* update optimal retention and parameters tooltip
* check num of revlogs at first
* use new translation string
* Update deck-config.ftl
Co-authored-by: user1823 <92206575+user1823@users.noreply.github.com>
* Update deck-config.ftl
Co-authored-by: user1823 <92206575+user1823@users.noreply.github.com>
* Update deck-config.ftl
Co-authored-by: user1823 <92206575+user1823@users.noreply.github.com>
* Update ftl/core/deck-config.ftl
Co-authored-by: user1823 <92206575+user1823@users.noreply.github.com>
* fix position of translation string
* Update deck-config.ftl
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
* Update deck-config.ftl
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
* Update deck-config.ftl
---------
Co-authored-by: user1823 <92206575+user1823@users.noreply.github.com>
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
2024-04-24 02:38:52 +01:00
Jarrett Ye
d1b2ab5983
Return current weights if fsrs items is zero & handle error in evaluation and optimal retention ( #3141 )
...
* return current weights if fsrs_items is zero
* handle error of evaluation if items.is_empty()
* TODO: handle error of optimal retention
* Revert "TODO: handle error of optimal retention"
This reverts commit 80a5b3803e .
* Revert "handle error of evaluation if items.is_empty()"
This reverts commit 7f0a5570e7 .
2024-04-17 20:18:00 +10:00
Jarrett Ye
10d567f937
Update to FSRS-rs v0.6.1 ( #3106 )
...
* update to FSRS-rs 0.6.0
* update to crates.io version
* format
* update to FSRS-rs v0.6.01
* ./ninja fix:minilints
* update python backend code
2024-04-05 13:04:50 +01:00
Jarrett Ye
15506328e9
rename sm2 retention to historical retention ( #3101 )
...
* rename sm2 retention to historical retention
* ninja format
* keep sm2_retention in DeckConfSchema11
* update wording
* Update schema11.rs
2024-03-29 09:34:26 +00:00
ijqq
22559929f9
Replace deprecated method chrono::NaiveDateTime::timestamp_millis ( #3097 )
...
* Replace deprecated method `chrono::NaiveDateTime::timestamp_millis`
* Update CONTRIBUTORS
2024-03-28 08:30:02 +00:00
Jarrett Ye
74a603e61b
use rmse in comparing parameters ( #3087 )
2024-03-24 08:28:15 +00:00
Damien Elmes
656cfe0b9c
When updating all FSRS parameters at once, exclude suspended cards
2024-03-20 12:56:36 +07:00
Jarrett Ye
8d197a1555
Feat/fsrs simulator backend part ( #3075 )
...
* [WIP] FSRS simulator
* add desired_retention as input
* cargo fmt
* fix format
* add standard copyright header
* support existing cards
* fix format
* pass days_elapsed into Card::convert & return None
2024-03-18 13:42:38 +00:00
Jarrett Ye
8c9d7d64d9
refactor optimal retention to minimize workload per memorization & fix progress goes backwards ( #3065 )
...
* Feat/optimal retention for minimal workload per memorization
* ./ninja fix:minilints
* update to FSRS-rs 0.5.2
* update to FSRS-rs 0.5.3
* ./ninja fix:minilints
* 'estimated retention' -> 'predicted optimal retention'; add warning (dae)
2024-03-11 16:16:37 +07:00
Jarrett Ye
f2acf40221
alert when the resp.weights is empty ( #3061 )
...
* alert when the resp.weights is empty
* format
2024-03-09 10:26:59 +00:00
Jarrett Ye
055b6e30f8
update FSRS-rs to 0.5.0 & export benchmark API ( #3056 )
...
* update fsrs to 0.4.5
* update to fsrs 0.4.6
* add benchmark API
* update fsrs to 0.5.0
* cargo fmt
* ./ninja fix:minilints
* ./ninja format
* Add a brief comment about the new method (dae)
2024-03-08 12:37:06 +00:00
Jarrett Ye
eb597475c5
Fix/set pretrain_only by fsrs_items ( #3051 )
...
* Fix/set pretrain_only and insufficient reviews based on fsrs_items
* use review_count for FsrsInsufficientReviews
* Update weights.rs
* Update weights.rs
2024-03-05 07:54:34 +00:00
Jarrett Ye
c7556f17e6
update fsrs to 0.4.4 ( #3045 )
...
* update fsrs to 0.4.4
* fix bypassed_learning_is_handled
2024-03-03 14:30:34 +07:00
Abdo
60f8399aed
Show total review count when optimizing FSRS parameters ( #3027 )
...
* Show total review count when optimizing FSRS parameters
* Do not expose items
2024-02-26 13:27:22 +07:00
Jarrett Ye
103ea6ded0
clamp interval before fuzz_bounds ( #3024 )
...
* clamp interval before fuzz_bounds
* update unit test of with_review_fuzz
2024-02-25 12:18:01 +07:00
Abdo
6843d65ed1
Check required review count for FSRS after filtering ( #3019 )
...
* Check for required review count for FSRS after filtering
* Remove unreachable check
* Update minimum review count in optimal retention calculation
* Fix review check in optimal retention routine too
2024-02-24 14:53:38 +07:00
Luc Mcgrady
8b18a08b3b
FSRS - Ignore revlogs before date while optimizing ( #2922 )
...
* Added: Date input button
* Added: ignoreDate to config
* Added: Backend
* Optimize function passes value
* Fix: Spelling
* Moved: filter logic from revlog_for_srs to update_memory_state
* fmt
* Copyright header
* ./check
* Fix: Test
* Renamed: Ignore_date -> Ignore_before_date
* Neaten parameters
* evaluate weights
* ./check
* Optimize all presets
* Added: Label localizations
* Removed globe label
* Added: Tooltip
* Changed error type
* fmt
* Moved filter to own function
* missing function call replacement
* Fix: Typo
* Apply suggestions from code review
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
* timestamp * 1000 -> timestamp_millis
* ignoreBefore -> ignore_before
* clarified ignore_before variables
* i64 -> TimestampMillis
* Un-traitified remove_revlogs_before
* Added: ms == 0 guard
* Added: Ignore_before affects scheduling
* Moved filter to fsrs_items_for_training
* removed filter from revlog_for_srs
* Tuple -> UpdateMemoryStateEntry
* Removed unused function
* Removed superfluous _ms from variables
* cid -> id
* Different ignore method
* Added: Unit test
* cid -> id
* Test: Exact ms edge case
* ./check
* Fix: re-learns could be before ignore date in cards without learning steps
* getignoreRevlogsBeforeMs -> getIgnoreRevlogsBeforeMs
* Removed pub(crate)
* Clarified unit test
* last_learn_entry -> first_of_last_learn_entries
* @user1823's method
* IOS fix
* ./check
* Fix: width defined twice
2024-02-22 11:01:10 +07:00
Damien Elmes
9642a69b88
FSRS items, not revlogs
...
https://forums.ankiweb.net/t/discrepancy-between-revlog-count-in-optimize-and-evaluate/41224/5
2024-02-19 17:51:07 +07:00
Jarrett Ye
492178c107
Fix/ignore revlogs before Forget entry ( #3002 )
...
* Fix/ignore revlogs before Forget entry
* Update weights.rs
2024-02-12 16:09:39 +10:00
Abdo
4ef389b580
Keep previous FSRS parameters if they get worse when optimizing ( #2996 )
...
* Update to fsrs-rs 0.3.0
* Keep previous FSRS parameters if they get worse when optimizing
2024-02-11 16:26:04 +10:00
Abdo
85a8824c8c
Do not reset original_due when card stays in filtered deck ( #2988 )
2024-02-07 13:27:54 +10:00
Jarrett Ye
2fffe4b7ba
update FSRS to v0.2.0 ( #2977 )
...
* update FSRS to v0.2.0
* update comments
* ./ninja fix:minilints
* 1000 -> 400 in translation (dae)
2024-01-30 16:27:12 +10:00
Damien Elmes
bf06020855
Use card.reps - 1 when calculating fuzz ( #2933 )
...
https://github.com/open-spaced-repetition/fsrs4anki-helper/issues/343#issuecomment-1879584562
https://forums.ankiweb.net/t/reschedule-is-inconsistent-with-normal-schedule-in-fuzz/39363
2024-01-09 12:26:46 +10:00
Damien Elmes
66d0046b8a
Check review count up front
...
https://forums.ankiweb.net/t/inconsistent-number-of-reviews-when-clicking-optimize/39275/7
2024-01-08 14:05:09 +10:00
Damien Elmes
3982e0c8fe
Update to Rust 1.75
2024-01-05 14:28:23 +10:00
Damien Elmes
1a1d4d5419
Work around test failure on Windows
2023-12-28 18:43:28 +10:00
Damien Elmes
b73c1c7f87
Pull in FSRS fix for pretrain
2023-12-28 18:15:44 +10:00
RumovZ
c39f2cacae
Fix new cards from parent decks being gathered ( #2907 )
...
Fixes #2906 .
2023-12-24 20:04:28 +10:00
Jarrett Ye
3378e476e6
Update to FSRS-4.5 ( #2901 )
2023-12-22 16:17:40 +10:00
Damien Elmes
4908be62ed
Update FSRS
...
We're on the commit prior to
https://github.com/open-spaced-repetition/fsrs-rs/pull/141 , as that is
going to require work that will need to wait until after 23.12
2023-12-22 14:02:39 +10:00
Damien Elmes
4678b0cc4a
Use seconds instead of minutes for preview delay
...
Since this is not compatible with older clients, preview_delay has been
brought back so the configured value will still sync.
2023-12-21 11:02:29 +10:00
Damien Elmes
edd38ca067
Calculate elapsed days for intraday learning cards
...
https://forums.ankiweb.net/t/anki-23-12-beta/37771/109
2023-12-13 10:18:29 +10:00
Damien Elmes
db93939ded
Don't use SM2 memory state when cards are manually introduced
...
https://github.com/open-spaced-repetition/fsrs4anki/issues/540#issuecomment-1848833376
2023-12-12 09:40:31 +10:00
Damien Elmes
cfc6bc6548
Update FSRS for new default weights
2023-12-08 13:54:31 +10:00
Damien Elmes
e778cba089
Allow user to configure hard/good buttons when rescheduling off
...
Closes #2858
2023-12-08 11:04:34 +10:00
Damien Elmes
86aafa74a6
Treat cards with no reps like new cards
...
https://github.com/open-spaced-repetition/fsrs4anki/issues/540#issuecomment-1837780217
2023-12-07 14:56:39 +10:00
Damien Elmes
96ae3a5d63
Update to latest fsrs-rs
...
The extra entries in Cargo.lock and licenses.json are mostly spurious,
and caused by https://github.com/tracel-ai/burn/pull/1025#issuecomment-1842006690
2023-12-07 14:13:58 +10:00
Gustaf-C
63260631e4
Include elapsed_secs in learning card state ( #2862 )
...
* Include elapsed_time in learning card state
* Suggested updates, elapsed_time -> elapsed_secs
* Remove outdated comment
2023-12-06 16:40:22 +10:00
Jarrett Ye
80c5f2d491
skip revlog with time = 0 when calc recall cost ( #2870 )
...
* skip revlog with time = 0 when calc recall cost
* Update retention.rs
2023-12-05 13:08:34 +10:00
Damien Elmes
e5170f341b
Remove some v3 checks
2023-11-28 14:06:49 +10:00
Damien Elmes
d767e9ad3c
Suppress manual revlog entry if the previous entry was also manual
...
Means we lose some detail in the history, but should reduce the
collection bloat caused by a user experimenting with reschedule multiple
times in a short period, when they don't restore from backup afterwards.
https://forums.ankiweb.net/t/possible-syncing-limitation-by-fsrs-manual-scheduling-data-accumulation/37610
2023-11-27 11:24:31 +10:00
Damien Elmes
452e012c71
Add option to calculate all weights at once
2023-11-27 11:24:31 +10:00
Damien Elmes
c67f510b9a
Update to latest FSRS
2023-11-27 11:24:31 +10:00
Jarrett Ye
3713c86373
don't convert from sm2 when ivl = 0 ( #2849 )
2023-11-26 13:14:31 +10:00
Damien Elmes
a50b086b33
Use note order when previewing
...
https://forums.ankiweb.net/t/card-in-disorder/37534/2
2023-11-24 15:01:14 +10:00
Damien Elmes
366f78715b
Include next_day timestamp in revlog export
2023-11-23 14:46:48 +10:00
Damien Elmes
a9d73fc3be
Add a method for exporting revlogs in binary
2023-11-22 11:57:40 +10:00
Damien Elmes
f8e0321ca5
When training with the whole collection, include deleted card history
2023-11-22 10:53:08 +10:00
Damien Elmes
2399bf492a
Fix FSRS retrievability sorting issues
...
- We must use interval, not stability to infer days_elapsed
- We must use original due date in a filtered deck
- Use retrievability in filtered deck sorting, not just regular sorting
2023-11-20 13:59:45 +10:00
Damien Elmes
b248911b0f
Fix cards showing up due in the past in a filtered deck
...
Caused by using due instead of original_due when card was in learning.
I think the original goal of that code was to ignore the learning timestamp
and show the next review date instead, but it's both simpler and more
intuitive to show the learning date instead.
2023-11-20 10:52:13 +10:00
Abdo
d752a43e2a
Fix filtered deck ordering of intraday learning cards and reviews ( #2828 )
...
* Fix filtered deck ordering of intraday learning cards and reviews
* Handle rollover correctly
2023-11-14 15:08:36 +10:00
RumovZ
39a60bc3a4
Allow applying limits of inactive parents ( #2824 )
...
* Allow applying limits of inactive parents
* Tweak label/help text (dae)
2023-11-13 14:30:19 +10:00
Damien Elmes
b6102d0310
Update fsrs-rs
2023-11-13 10:13:20 +10:00
Damien Elmes
9268dce707
Expose fuzz delta for FSRS add-on
2023-11-06 12:27:53 +10:00
Damien Elmes
59acde45a1
Remove redundant FSRS revlog code
...
Closes https://github.com/open-spaced-repetition/fsrs-rs/issues/113
2023-11-06 09:44:07 +10:00
Gustaf-C
e071fb471b
Allow creation of empty filtered decks ( #2788 )
...
* Add new button to UI
* Add bool to allow creating empty filtered in back end
* Implement logic into front end for passing on bool
* Hide option on old decks
* Show option again if any settings are changed
* Revert "Show option again if any settings are changed"
This reverts commit 094acd9c65936823fa206594da5c1f3e4eb09248.
* Revert "Hide option on old decks"
This reverts commit d20a9a240b4fd85d080e8cc52d94318416ca753f.
* Update string
* Update ftl/core/decks.ftl
---------
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
2023-11-05 12:23:14 +10:00
Damien Elmes
987c1825a6
Fix panic when enabling FSRS with add-on-rescheduled cards
...
https://forums.ankiweb.net/t/error-upon-fsrs-activation-on-anki-23-10/36488
2023-11-03 10:07:47 +10:00
Damien Elmes
39bf2f2160
Update to latest fsrs
2023-10-18 09:03:23 +10:00
Damien Elmes
72e57456ce
Fix stuttering in FSRS progress display
2023-10-14 14:03:20 +10:00
Abdo
5cde4b6941
Remove v1/v2 support from the backend ( #2727 )
...
* Remove v1/v2 support from deck list
* Remove v1/v2 support from most routines and show error
* Remove scheduler_version from preferences
* Fix formatting
* Remove v1/v2 conditionals from Python code
* Fix legacy importer
* Remove legacy hooks
* Add missing scheduler checks
* Remove V2 logic from deck options screen
* Remove the review_did_undo hook
* Restore ability to open old options with shift (dae)
2023-10-14 10:50:59 +10:00
Damien Elmes
003cdfd2ec
Use sm2 retention when deriving memory state
...
Closes #2702
2023-10-13 10:37:35 +10:00
Damien Elmes
f741b4af91
Fix 'PanicException: command requires weights to be set'
2023-10-09 18:39:18 +10:00
Damien Elmes
0e6104a96b
Fix 'Expression tree is too large' when user has many decks
...
+ Allow 'did:' searches to match multiple decks at once
2023-10-09 18:39:18 +10:00
Damien Elmes
6c1d7a6703
Use 0 when there are no relearning steps; ensure not NaN
2023-10-05 09:55:05 +10:00
Damien Elmes
3636c7c90e
When the user has no relearning steps, synthesize the value
2023-10-03 13:50:29 +10:00
Damien Elmes
41bddfc6cb
Ensure fuzz doesn't go backwards
...
Closes #2694
2023-10-03 13:23:27 +10:00
Damien Elmes
72b0c81761
When learning steps are missing, start from the SM-2 state
...
Closes https://github.com/open-spaced-repetition/fsrs-rs/issues/87
2023-10-03 12:20:10 +10:00
Damien Elmes
257d7bbbbc
Update FSRS crate
2023-10-03 11:28:56 +10:00
Damien Elmes
072cd37b42
Support rescheduling on weight/retention change
2023-10-01 15:20:58 +10:00
Damien Elmes
d16faacd0f
Allow cards with no learning history when not training
2023-09-30 16:10:23 +10:00
Damien Elmes
50c8a1ba9f
Update FSRS
...
- up to 10x performance increase in optimal retention
- expose loss aversion
- use SpinBoxes
2023-09-30 16:10:22 +10:00
Damien Elmes
f3bb845961
Update incompatible Rust deps
2023-09-28 10:00:47 +10:00
Damien Elmes
b8390d096e
Shift weight calculation to backend so it can be run in parallel
2023-09-28 09:10:54 +10:00
Damien Elmes
1f55ad1d44
Expose the ability to train weights from items ( #2687 )
2023-09-28 08:28:24 +10:00
Jarrett Ye
05499297e0
Fix first_rating_count & learn_cost ( #2688 )
...
* fix first_rating_count & learn_cost
* Update CONTRIBUTORS
* cargo clippy --fix
* cargo fmt
2023-09-27 18:31:40 +10:00
Damien Elmes
0532c1f5b0
Use revlog to determine days_elapsed when studying/for card info
...
Currently prop searches and the retrievability column will continue to
derive the days from the card only, as it's difficulty to integrate revlog
upgrade lookups into those code paths, especially in a performant way.
One possible way we could solve this in the future is to store last_review_day
in the card data, so we can know it even if the due date has been shifted.
Check DB could fill it in for existing cards.
2023-09-27 16:17:47 +10:00
Damien Elmes
ab4e820608
Update FSRS; fix handling of invalid revlogs
...
State is now inferred from SM-2 data when the revlog is not suitable
2023-09-27 13:13:10 +10:00
Damien Elmes
a1f4bcb3cb
Fix optimal retention caps
2023-09-26 14:17:55 +10:00
Damien Elmes
c9ca5ee6e7
Fix cancel signal being ignored if sent quickly
2023-09-25 16:32:12 +10:00
Damien Elmes
e0399bcad2
Allow cards with no learning history when not training
2023-09-25 15:57:35 +10:00
Damien Elmes
baae685dbb
UI tweaks
...
https://forums.ankiweb.net/t/anki-23-10-beta-1/34912/19
2023-09-25 15:54:18 +10:00
Damien Elmes
e6aaeb85e9
Expose memory state computation to Python
...
Closes #2676
2023-09-25 11:05:47 +10:00
Damien Elmes
9cc4720efe
Support fetching new cards by deck then random note
...
https://forums.ankiweb.net/t/feature-request-option-for-new-card-gather-order-that-prioritizes-subdecks-closer-to-top-but-gathers-cards-randomly-from-each-subdeck/23178
2023-09-24 11:54:10 +10:00
Damien Elmes
e6fdfc20a9
Use FSRS difficulty when sorting by ease
2023-09-23 16:20:36 +10:00
Damien Elmes
03edb7bf9e
Store desired retention in card data
...
If we want to be able to factor the desired retention into a sort based
on relative overdueness, having the values accessible on the card makes
things easier.
2023-09-23 15:42:42 +10:00
Damien Elmes
c78de23cf9
Convert FSRS to a global option
...
Allowing some decks to be FSRS and some SM-2 will lead to confusing
behavior when sorting on SM-2 or FSRS-specific fields, or when moving
cards between decks.
2023-09-23 14:41:55 +10:00
Damien Elmes
b8ec76fb66
Fix crash when using FSRS with a low max interval setting
2023-09-20 13:14:03 +10:00
Damien Elmes
6074865763
Calculate parameters automatically
...
Logic derived from d8e2f6a0ff
Closes #2661
2023-09-18 16:43:36 +10:00
Damien Elmes
59759b468f
Start on a 'get params' button
2023-09-17 12:58:13 +10:00
Damien Elmes
25d5e56397
Clear memory state when user disables FSRS
2023-09-17 11:50:38 +10:00
Damien Elmes
75de1f9709
Record FSRS difficulty in the review log
...
Will allow user to see a record of difficulty changes, and allows us
to identify reviews that have been done with FSRS vs SM-2, since the
valid range is different.
2023-09-17 11:50:38 +10:00