Anki/pylib/anki
Jake Probst c6cb4e4373
load balancer! (#3230)
* start of load balancer

* add configuration options; option to load balance per deck

* formatting

* clippy

* add myself to contributors

* cleanup

* cargo fmt

* copyright header on load_balancer.rs

* remove extra space

* more formatting

* python formatting

* ignore this being None

only doing this cause python has awful lambdas and can't
loop in a meaningful way without doing this

* only calculate notes on each day if we are trying to avoid siblings

* don't fuzz intervals if the load balancer is enabled

* force generator to eval so this actually happens

* load balance instead of fuzzing, rather than in addition to

* use builtin fuzz_bounds rather than reinvent something new

* print some debug info on how its load balancing

* clippy

* more accurately load balance only when we want to fuzz

* incorrectly doublechecking the presence of the load balancer

* more printfs for debugging

* avoid siblings -> disperse siblings

* load balance learning graduating intervals

* load balancer: respect min/max intervals; graduating easy should be at least +1 good

* filter out after-days under minimum interval

* this is an inclusive check

* switch load balancer to caching instead of on the fly calculation

* handle case where load balancer would balance outside of its bounds

* disable lb when unselecting it in preferences

* call load_balancer in StateContext::with_review_fuzz instead of next to

* rebuild load balancer when card queue is rebuilt

* remove now-unused configuration options

* add note option to notetype to enable/disable sibling dispersion

* add options to exclude decks from load balancing

* theres a lint checking that the link actually exists so I guess I'll add the anchor back in later?

* how did I even update this

* move load balancer to cardqueue

* remove per-deck balancing options

* improve determining whether to disperse siblings when load balancing

* don't recalculate notes on days every time

* remove debug code

* remove all configuration; load balancer enabled by default; disperse siblings if bury_reviews is set

* didn't fully remove caring about decks from load balancer sql query

* load balancer should only count cards in the same preset

* fuzz interval if its outside of load balancer's range

* also check minimum when bailing out of load balancer

* cleanup; make tests happy

* experimental weight-based load balance fuzzing

* take into account interval when weighting as it seems to help

* if theres no cards the interval weight is just 1.0

* make load balancer disableable through debug console

* remove debug prints

* typo

* remove debugging print

* explain a bit how load balancer works

* properly balance per preset

* use inclusive range rather than +1

* -1 type cast

* move type hint somewhere less ugly; fix comment typo

* Reuse existing deck list from parent function (dae)

Minor optimisation
2024-08-17 12:50:54 +07:00
..
_vendor Update Python deps 2023-03-31 14:04:05 +10:00
foreign_data Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
importing Improve exception handling (#3290) 2024-08-04 20:51:13 +07:00
scheduler Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
_backend.py Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
_legacy.py Update type annotations (#3322) 2024-07-26 17:57:25 +07:00
_rsbridge.pyi style: reformat with black (#3324) 2024-07-26 17:58:57 +07:00
browser.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
cards.py fix: add proper imports (#3296) 2024-08-05 11:34:46 +07:00
collection.py load balancer! (#3230) 2024-08-17 12:50:54 +07:00
config.py Import submodules directly (#1662) 2022-02-13 13:40:47 +10:00
consts.py Strip out v1/v2 code 2023-09-24 14:27:40 +10:00
db.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
dbproxy.py Update type annotations (#3322) 2024-07-26 17:57:25 +07:00
decks.py Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
errors.py Remove v1/v2 support from the backend (#2727) 2023-10-14 10:50:59 +10:00
exporting.py Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
find.py Add py3.9 to hooks (#1542) 2021-12-09 09:11:22 +10:00
hooks.py Improve exception handling (#3290) 2024-08-04 20:51:13 +07:00
httpclient.py Update type annotations (#3322) 2024-07-26 17:57:25 +07:00
lang.py Improve exception handling (#3290) 2024-08-04 20:51:13 +07:00
latex.py Improve exception handling (#3290) 2024-08-04 20:51:13 +07:00
media.py Update type annotations (#3322) 2024-07-26 17:57:25 +07:00
models.py refactor: use not in and is not as recommended (#3351) 2024-08-10 17:55:26 +07:00
notes.py Refactor ephemeral_card of notes (#3307) 2024-07-21 15:25:48 +07:00
py.typed mark anki and aqt modules as having typing info 2020-01-13 13:03:37 +10:00
rsbackend.py PEP8 for rest of pylib (#1451) 2021-10-25 14:50:13 +10:00
sound.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
stats.py refactor: use not in and is not as recommended (#3351) 2024-08-10 17:55:26 +07:00
statsbg.py Update licensing information (#2850) 2023-11-27 11:35:51 +10:00
stdmodels.py Update type annotations (#3322) 2024-07-26 17:57:25 +07:00
storage.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
sync.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
syncserver.py Update Rust and Python deps (#2567) 2023-07-01 18:26:43 +10:00
tags.py Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
template.py Update type annotation syntax (#3283) 2024-07-21 14:00:52 +07:00
types.py Enable invalid-name globally in pylib (#1454) 2021-10-25 19:10:56 +10:00
utils.py Improve exception handling (#3290) 2024-08-04 20:51:13 +07:00