Update to 3.13.3 (#8)
Browse files- update to 3.13.3 (6d501237339865ee7a1d2b65985e466135849491)
- .gitignore +3 -1
- app.py +1 -1
- fsrs4anki_optimizer.ipynb +15 -15
- utilities.py +2 -2
.gitignore
CHANGED
@@ -1,2 +1,4 @@
|
|
1 |
.idea/
|
2 |
-
|
|
|
|
|
|
1 |
.idea/
|
2 |
+
__pycache__
|
3 |
+
projects
|
4 |
+
.DS_Store
|
app.py
CHANGED
@@ -58,7 +58,7 @@ def anki_optimizer(file, timezone, next_day_starts_at, revlog_start_date, reques
|
|
58 |
|
59 |
|
60 |
description = """
|
61 |
-
# FSRS4Anki Optimizer App - v3.13.
|
62 |
Based on the [tutorial](https://medium.com/@JarrettYe/how-to-use-the-next-generation-spaced-repetition-algorithm-fsrs-on-anki-5a591ca562e2)
|
63 |
of [Jarrett Ye](https://github.com/L-M-Sherlock). This application can give you personalized anki parameters without having to code.
|
64 |
|
|
|
58 |
|
59 |
|
60 |
description = """
|
61 |
+
# FSRS4Anki Optimizer App - v3.13.3
|
62 |
Based on the [tutorial](https://medium.com/@JarrettYe/how-to-use-the-next-generation-spaced-repetition-algorithm-fsrs-on-anki-5a591ca562e2)
|
63 |
of [Jarrett Ye](https://github.com/L-M-Sherlock). This application can give you personalized anki parameters without having to code.
|
64 |
|
fsrs4anki_optimizer.ipynb
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
"cell_type": "markdown",
|
6 |
"metadata": {},
|
7 |
"source": [
|
8 |
-
"# FSRS4Anki v3.13.
|
9 |
]
|
10 |
},
|
11 |
{
|
@@ -15,7 +15,7 @@
|
|
15 |
"id": "lurCmW0Jqz3s"
|
16 |
},
|
17 |
"source": [
|
18 |
-
"[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-spaced-repetition/fsrs4anki/blob/v3.13.
|
19 |
"\n",
|
20 |
"β Click the above button to open the optimizer on Google Colab.\n",
|
21 |
"\n",
|
@@ -172,7 +172,7 @@
|
|
172 |
{
|
173 |
"data": {
|
174 |
"application/vnd.jupyter.widget-view+json": {
|
175 |
-
"model_id": "
|
176 |
"version_major": 2,
|
177 |
"version_minor": 0
|
178 |
},
|
@@ -193,7 +193,7 @@
|
|
193 |
{
|
194 |
"data": {
|
195 |
"application/vnd.jupyter.widget-view+json": {
|
196 |
-
"model_id": "
|
197 |
"version_major": 2,
|
198 |
"version_minor": 0
|
199 |
},
|
@@ -214,7 +214,7 @@
|
|
214 |
{
|
215 |
"data": {
|
216 |
"application/vnd.jupyter.widget-view+json": {
|
217 |
-
"model_id": "
|
218 |
"version_major": 2,
|
219 |
"version_minor": 0
|
220 |
},
|
@@ -235,7 +235,7 @@
|
|
235 |
{
|
236 |
"data": {
|
237 |
"application/vnd.jupyter.widget-view+json": {
|
238 |
-
"model_id": "
|
239 |
"version_major": 2,
|
240 |
"version_minor": 0
|
241 |
},
|
@@ -296,8 +296,7 @@
|
|
296 |
" 'last_lvl', 'factor', 'time', 'type']\n",
|
297 |
"df = df[(df['cid'] <= time.time() * 1000) &\n",
|
298 |
" (df['id'] <= time.time() * 1000) &\n",
|
299 |
-
" (df['r'] > 0)
|
300 |
-
" (df['id'] >= time.mktime(datetime.strptime(revlog_start_date, \"%Y-%m-%d\").timetuple()) * 1000)].copy()\n",
|
301 |
"df['create_date'] = pd.to_datetime(df['cid'] // 1000, unit='s')\n",
|
302 |
"df['create_date'] = df['create_date'].dt.tz_localize(\n",
|
303 |
" 'UTC').dt.tz_convert(timezone)\n",
|
@@ -337,6 +336,7 @@
|
|
337 |
"\n",
|
338 |
"tqdm.notebook.tqdm.pandas()\n",
|
339 |
"df = df.groupby('cid', as_index=False).progress_apply(get_feature)\n",
|
|
|
340 |
"df[\"t_history\"] = df[\"t_history\"].map(lambda x: x[1:] if len(x) > 1 else x)\n",
|
341 |
"df[\"r_history\"] = df[\"r_history\"].map(lambda x: x[1:] if len(x) > 1 else x)\n",
|
342 |
"df.to_csv('revlog_history.tsv', sep=\"\\t\", index=False)\n",
|
@@ -536,7 +536,7 @@
|
|
536 |
{
|
537 |
"data": {
|
538 |
"application/vnd.jupyter.widget-view+json": {
|
539 |
-
"model_id": "
|
540 |
"version_major": 2,
|
541 |
"version_minor": 0
|
542 |
},
|
@@ -557,7 +557,7 @@
|
|
557 |
{
|
558 |
"data": {
|
559 |
"application/vnd.jupyter.widget-view+json": {
|
560 |
-
"model_id": "
|
561 |
"version_major": 2,
|
562 |
"version_minor": 0
|
563 |
},
|
@@ -578,7 +578,7 @@
|
|
578 |
{
|
579 |
"data": {
|
580 |
"application/vnd.jupyter.widget-view+json": {
|
581 |
-
"model_id": "
|
582 |
"version_major": 2,
|
583 |
"version_minor": 0
|
584 |
},
|
@@ -905,7 +905,7 @@
|
|
905 |
{
|
906 |
"data": {
|
907 |
"application/vnd.jupyter.widget-view+json": {
|
908 |
-
"model_id": "
|
909 |
"version_major": 2,
|
910 |
"version_minor": 0
|
911 |
},
|
@@ -993,7 +993,7 @@
|
|
993 |
{
|
994 |
"data": {
|
995 |
"application/vnd.jupyter.widget-view+json": {
|
996 |
-
"model_id": "
|
997 |
"version_major": 2,
|
998 |
"version_minor": 0
|
999 |
},
|
@@ -1137,7 +1137,7 @@
|
|
1137 |
{
|
1138 |
"data": {
|
1139 |
"application/vnd.jupyter.widget-view+json": {
|
1140 |
-
"model_id": "
|
1141 |
"version_major": 2,
|
1142 |
"version_minor": 0
|
1143 |
},
|
@@ -1158,7 +1158,7 @@
|
|
1158 |
{
|
1159 |
"data": {
|
1160 |
"application/vnd.jupyter.widget-view+json": {
|
1161 |
-
"model_id": "
|
1162 |
"version_major": 2,
|
1163 |
"version_minor": 0
|
1164 |
},
|
|
|
5 |
"cell_type": "markdown",
|
6 |
"metadata": {},
|
7 |
"source": [
|
8 |
+
"# FSRS4Anki v3.13.3 Optimizer"
|
9 |
]
|
10 |
},
|
11 |
{
|
|
|
15 |
"id": "lurCmW0Jqz3s"
|
16 |
},
|
17 |
"source": [
|
18 |
+
"[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-spaced-repetition/fsrs4anki/blob/v3.13.3/fsrs4anki_optimizer.ipynb)\n",
|
19 |
"\n",
|
20 |
"β Click the above button to open the optimizer on Google Colab.\n",
|
21 |
"\n",
|
|
|
172 |
{
|
173 |
"data": {
|
174 |
"application/vnd.jupyter.widget-view+json": {
|
175 |
+
"model_id": "c9bb754c7ac441068199f88788b35a74",
|
176 |
"version_major": 2,
|
177 |
"version_minor": 0
|
178 |
},
|
|
|
193 |
{
|
194 |
"data": {
|
195 |
"application/vnd.jupyter.widget-view+json": {
|
196 |
+
"model_id": "ec878c2155d74cf1adefa0c7a0c8052a",
|
197 |
"version_major": 2,
|
198 |
"version_minor": 0
|
199 |
},
|
|
|
214 |
{
|
215 |
"data": {
|
216 |
"application/vnd.jupyter.widget-view+json": {
|
217 |
+
"model_id": "38f567392f7b4c73b92b3b336b04df4b",
|
218 |
"version_major": 2,
|
219 |
"version_minor": 0
|
220 |
},
|
|
|
235 |
{
|
236 |
"data": {
|
237 |
"application/vnd.jupyter.widget-view+json": {
|
238 |
+
"model_id": "6966fe105e3d4c398100ae20c5fb57fb",
|
239 |
"version_major": 2,
|
240 |
"version_minor": 0
|
241 |
},
|
|
|
296 |
" 'last_lvl', 'factor', 'time', 'type']\n",
|
297 |
"df = df[(df['cid'] <= time.time() * 1000) &\n",
|
298 |
" (df['id'] <= time.time() * 1000) &\n",
|
299 |
+
" (df['r'] > 0)].copy()\n",
|
|
|
300 |
"df['create_date'] = pd.to_datetime(df['cid'] // 1000, unit='s')\n",
|
301 |
"df['create_date'] = df['create_date'].dt.tz_localize(\n",
|
302 |
" 'UTC').dt.tz_convert(timezone)\n",
|
|
|
336 |
"\n",
|
337 |
"tqdm.notebook.tqdm.pandas()\n",
|
338 |
"df = df.groupby('cid', as_index=False).progress_apply(get_feature)\n",
|
339 |
+
"df = df[df['id'] >= time.mktime(datetime.strptime(revlog_start_date, \"%Y-%m-%d\").timetuple()) * 1000]\n",
|
340 |
"df[\"t_history\"] = df[\"t_history\"].map(lambda x: x[1:] if len(x) > 1 else x)\n",
|
341 |
"df[\"r_history\"] = df[\"r_history\"].map(lambda x: x[1:] if len(x) > 1 else x)\n",
|
342 |
"df.to_csv('revlog_history.tsv', sep=\"\\t\", index=False)\n",
|
|
|
536 |
{
|
537 |
"data": {
|
538 |
"application/vnd.jupyter.widget-view+json": {
|
539 |
+
"model_id": "749aeda9cb624986ae2872489bcc6762",
|
540 |
"version_major": 2,
|
541 |
"version_minor": 0
|
542 |
},
|
|
|
557 |
{
|
558 |
"data": {
|
559 |
"application/vnd.jupyter.widget-view+json": {
|
560 |
+
"model_id": "9ca6df8fb70247afaa07389ebf5bb791",
|
561 |
"version_major": 2,
|
562 |
"version_minor": 0
|
563 |
},
|
|
|
578 |
{
|
579 |
"data": {
|
580 |
"application/vnd.jupyter.widget-view+json": {
|
581 |
+
"model_id": "278f800ad8a344098c6b4a5de627fec8",
|
582 |
"version_major": 2,
|
583 |
"version_minor": 0
|
584 |
},
|
|
|
905 |
{
|
906 |
"data": {
|
907 |
"application/vnd.jupyter.widget-view+json": {
|
908 |
+
"model_id": "7712ed30c62643f4aa834c840458158c",
|
909 |
"version_major": 2,
|
910 |
"version_minor": 0
|
911 |
},
|
|
|
993 |
{
|
994 |
"data": {
|
995 |
"application/vnd.jupyter.widget-view+json": {
|
996 |
+
"model_id": "21d643c71d0540949822c71866f7e2b4",
|
997 |
"version_major": 2,
|
998 |
"version_minor": 0
|
999 |
},
|
|
|
1137 |
{
|
1138 |
"data": {
|
1139 |
"application/vnd.jupyter.widget-view+json": {
|
1140 |
+
"model_id": "63e8453d80124699b1f40395051577d7",
|
1141 |
"version_major": 2,
|
1142 |
"version_minor": 0
|
1143 |
},
|
|
|
1158 |
{
|
1159 |
"data": {
|
1160 |
"application/vnd.jupyter.widget-view+json": {
|
1161 |
+
"model_id": "e94ce239601948379611720ca3c73228",
|
1162 |
"version_major": 2,
|
1163 |
"version_minor": 0
|
1164 |
},
|
utilities.py
CHANGED
@@ -51,8 +51,7 @@ def create_time_series_features(revlog_start_date, timezone, next_day_starts_at,
|
|
51 |
'last_lvl', 'factor', 'time', 'type']
|
52 |
df = df[(df['cid'] <= time.time() * 1000) &
|
53 |
(df['id'] <= time.time() * 1000) &
|
54 |
-
(df['r'] > 0)
|
55 |
-
(df['id'] >= time.mktime(datetime.strptime(revlog_start_date, "%Y-%m-%d").timetuple()) * 1000)].copy()
|
56 |
df['create_date'] = pd.to_datetime(df['cid'] // 1000, unit='s')
|
57 |
df['create_date'] = df['create_date'].dt.tz_localize(
|
58 |
'UTC').dt.tz_convert(timezone)
|
@@ -92,6 +91,7 @@ def create_time_series_features(revlog_start_date, timezone, next_day_starts_at,
|
|
92 |
|
93 |
tqdm.pandas(desc='Saving Trainset')
|
94 |
df = df.groupby('cid', as_index=False).progress_apply(get_feature)
|
|
|
95 |
df["t_history"] = df["t_history"].map(lambda x: x[1:] if len(x) > 1 else x)
|
96 |
df["r_history"] = df["r_history"].map(lambda x: x[1:] if len(x) > 1 else x)
|
97 |
df.to_csv(proj_dir / 'revlog_history.tsv', sep="\t", index=False)
|
|
|
51 |
'last_lvl', 'factor', 'time', 'type']
|
52 |
df = df[(df['cid'] <= time.time() * 1000) &
|
53 |
(df['id'] <= time.time() * 1000) &
|
54 |
+
(df['r'] > 0)].copy()
|
|
|
55 |
df['create_date'] = pd.to_datetime(df['cid'] // 1000, unit='s')
|
56 |
df['create_date'] = df['create_date'].dt.tz_localize(
|
57 |
'UTC').dt.tz_convert(timezone)
|
|
|
91 |
|
92 |
tqdm.pandas(desc='Saving Trainset')
|
93 |
df = df.groupby('cid', as_index=False).progress_apply(get_feature)
|
94 |
+
df = df[df['id'] >= time.mktime(datetime.strptime(revlog_start_date, "%Y-%m-%d").timetuple()) * 1000]
|
95 |
df["t_history"] = df["t_history"].map(lambda x: x[1:] if len(x) > 1 else x)
|
96 |
df["r_history"] = df["r_history"].map(lambda x: x[1:] if len(x) > 1 else x)
|
97 |
df.to_csv(proj_dir / 'revlog_history.tsv', sep="\t", index=False)
|