migrateFromSm2 static method

FsrsState migrateFromSm2({
  1. required double easinessFactor,
  2. required int intervalDays,
  3. required int repetitions,
})

Approximate FSRS state from SM-2 parameters for cold-start migration.

Implementation

static FsrsState migrateFromSm2({
  required double easinessFactor,
  required int intervalDays,
  required int repetitions,
}) {
  // Difficulty: EF 2.5 (easy) → Dā‰ˆ5, EF 1.3 (hard) → Dā‰ˆ8.4
  final difficulty = (11 - 2 * easinessFactor).clamp(1.0, 10.0);
  // Stability: the current interval implies how long the memory can last.
  final stability = intervalDays < 1 ? 1.0 : intervalDays.toDouble();
  final state = repetitions == 0
      ? FsrsCardState.newCard
      : (repetitions < 3 ? FsrsCardState.learning : FsrsCardState.review);

  return FsrsState(
    stability: stability,
    difficulty: difficulty,
    cardState: state,
    lastElapsedDays: 0,
    scheduledDays: intervalDays,
  );
}