Skip to content

Commit

Permalink
Fix/clear redundant code & filter revlog in SQL (#62)
Browse files Browse the repository at this point in the history
  • Loading branch information
L-M-Sherlock authored Nov 24, 2023
1 parent e1f0cc6 commit 320f62f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 31 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "FSRS-Optimizer"
version = "4.19.0"
version = "4.19.1"
readme = "README.md"
dependencies = [
"matplotlib>=3.7.0",
Expand Down
42 changes: 12 additions & 30 deletions src/fsrs_optimizer/fsrs_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,9 +443,17 @@ def flags2str(flags: List[int]) -> str:
SELECT id
FROM cards
WHERE queue != 0
AND id <= {time.time() * 1000}
{"AND queue != -1" if filter_out_suspended_cards else ""}
{"AND flags NOT IN %s" % flags2str(filter_out_flags) if len(filter_out_flags) > 0 else ""}
)
AND ease BETWEEN 1 AND 4
AND (
type != 3
OR factor != 0
)
AND id <= {time.time() * 1000}
ORDER BY cid, id
"""
)
revlog = res.fetchall()
Expand All @@ -463,14 +471,6 @@ def flags2str(flags: List[int]) -> str:
"review_duration",
"review_state",
]
df = df[
(df["card_id"] <= time.time() * 1000)
& (df["review_time"] <= time.time() * 1000)
].copy()
df_set_due_date = df[(df["review_state"] == 4) & (df["ivl"] > 0)]
df.drop(df_set_due_date.index, inplace=True)
df.sort_values(by=["card_id", "review_time"], inplace=True, ignore_index=True)

df["is_learn_start"] = (df["review_state"] == 0) & (
df["review_state"].shift() != 0
)
Expand All @@ -483,10 +483,11 @@ def flags2str(flags: List[int]) -> str:
)
df["mask"] = df["last_learn_start"] <= df["sequence_group"]
df = df[df["mask"] == True].copy()
df = df[(df["review_state"] != 4)].copy()
df = df[(df["review_state"] != 3) | (df["factor"] != 0)].copy()
df["review_state"] = df["review_state"] + 1
df.loc[df["is_learn_start"], "review_state"] = New
df = df.groupby("card_id").filter(
lambda group: group["review_state"].iloc[0] == New
)
df.drop(
columns=[
"is_learn_start",
Expand Down Expand Up @@ -568,29 +569,10 @@ def create_time_series(
df.drop_duplicates(["card_id", "real_days"], keep="first", inplace=True)
df["delta_t"] = df.real_days.diff()
df["delta_t"].fillna(0, inplace=True)
df.dropna(inplace=True)
df["i"] = df.groupby("card_id").cumcount() + 1
df.loc[df["i"] == 1, "delta_t"] = 0
df = df.groupby("card_id").filter(
lambda group: group["review_state"].iloc[0] == Learning
)
if df.empty:
raise ValueError("Training data is inadequate.")
df["prev_review_state"] = (
df.groupby("card_id")["review_state"].shift(1).fillna(Learning).astype(int)
)
df["helper"] = (
(df["review_state"] == Learning)
& (
(df["prev_review_state"] == Review)
| (df["prev_review_state"] == Relearning)
)
& (df["i"] > 1)
).astype(int)
df["helper"] = df.groupby("card_id")["helper"].cumsum()
df = df[df["helper"] == 0]
del df["prev_review_state"]
del df["helper"]

def cum_concat(x):
return list(accumulate(x))
Expand Down Expand Up @@ -771,7 +753,7 @@ def cal_stability(group: pd.DataFrame) -> pd.DataFrame:
df["last_recall"] = df["r_history"].map(lambda x: x[-1])
df = df[
df.groupby(["i", "r_history"], group_keys=False)["group_cnt"].transform(
max
"max"
)
== df["group_cnt"]
]
Expand Down

0 comments on commit 320f62f

Please sign in to comment.