if timing in ["LATE", "ON TIME"]:
if new_grade == 2:
card.easiness -= 0.16 !!! Particularly this figure.
if new_grade == 3:
card.easiness -= 0.14
if new_grade == 5:
card.easiness += 0.10
if card.easiness < 1.3:
card.easiness = 1.3
It seems your easiness adjustment when you grade 2 is a bit different to the SM-2 algorithm. Was wondering why you decided to go with the -0.16 figure, or if it was an oversight, or perhaps just my maths is wrong.
http://www.supermemo.com/english/ol/sm2.htm
EF':=EF-0.8+0.28*q-0.02*q*q
So for example if you had an easiness of 2.5 new grade of 2, it would give...
EF' = 2.5 - 0.8 + 0.28*2 - 0.02*2*2
EF' = 2.5 - 0.8 + 0.56 - 0.08
EF' = 2.5 - 0.32
... which is twice your adjustment.
The following ones work out the same as in Super-Memo 2
Example of grade 3
EF' = 2.5 - 0.8 + 0.28*3 - 0.02*3*3
EF' = 2.5 - 0.8 + 0.84 - 0.18
EF' = 2.5 - 0.14
Example of grade 4
EF' = 2.5 - 0.8 + 0.28*4 - 0.02*4*4
EF' = 2.5 - 0.8 + 1.12 - 0.32
EF' = 2.5 - 0
Example of grade 5
EF' = 2.5 - 0.8 + 0.28*5 - 0.02*5*5
EF' = 2.5 - 0.8 + 1.4 -0.5
EF' = 2.5 + 0.1