git: 10affd73b35e - main - devel/py-fsrs: New port: Free Spaced Repetition Scheduler

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Sun, 22 Mar 2026 16:28:49 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=10affd73b35ea9a2fbb2f71a9afe77412dabc47b

commit 10affd73b35ea9a2fbb2f71a9afe77412dabc47b
Author:     Christos Longros <chris.longros@gmail.com>
AuthorDate: 2026-03-22 16:27:23 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-03-22 16:28:34 +0000

    devel/py-fsrs: New port: Free Spaced Repetition Scheduler
    
    Differential Revision:  https://reviews.freebsd.org/D56019
---
 devel/Makefile          |  1 +
 devel/py-fsrs/Makefile  | 23 +++++++++++++++++++++++
 devel/py-fsrs/distinfo  |  3 +++
 devel/py-fsrs/pkg-descr | 12 ++++++++++++
 4 files changed, 39 insertions(+)

diff --git a/devel/Makefile b/devel/Makefile
index 50af97e47774..a8c6815e7180 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -4980,6 +4980,7 @@
     SUBDIR += py-frictionless-ckan-mapper
     SUBDIR += py-frozendict
     SUBDIR += py-frozenlist
+    SUBDIR += py-fsrs
     SUBDIR += py-fudge
     SUBDIR += py-funcparserlib
     SUBDIR += py-funcsigs
diff --git a/devel/py-fsrs/Makefile b/devel/py-fsrs/Makefile
new file mode 100644
index 000000000000..a8414177d4f5
--- /dev/null
+++ b/devel/py-fsrs/Makefile
@@ -0,0 +1,23 @@
+PORTNAME=	fsrs
+PORTVERSION=	6.3.1
+CATEGORIES=	devel python # machine-learning
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER=	chris.longros@gmail.com
+COMMENT=	Free Spaced Repetition Scheduler
+WWW=		https://github.com/open-spaced-repetition/py-fsrs
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}typing-extensions>0:devel/py-typing-extensions@${PY_FLAVOR}
+
+USES=		python
+USE_PYTHON=	autoplist pep517
+
+NO_ARCH=	yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-fsrs/distinfo b/devel/py-fsrs/distinfo
new file mode 100644
index 000000000000..bd96067edc17
--- /dev/null
+++ b/devel/py-fsrs/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1774196813
+SHA256 (fsrs-6.3.1.tar.gz) = 43c5c6056b97266baf6ebfef9e4cadeb9ac5a4e1b29ffdfb300f445b6e6b15ca
+SIZE (fsrs-6.3.1.tar.gz) = 32645
diff --git a/devel/py-fsrs/pkg-descr b/devel/py-fsrs/pkg-descr
new file mode 100644
index 000000000000..48eb5268ced8
--- /dev/null
+++ b/devel/py-fsrs/pkg-descr
@@ -0,0 +1,12 @@
+Python implementation of the Free Spaced Repetition Scheduler (FSRS)
+algorithm. FSRS uses machine learning to analyze personal review history
+and optimize flashcard scheduling intervals, replacing fixed-formula
+schedulers like SM-2 with data-driven, individualized memory modeling.
+
+Features:
+- Implements FSRS-6 algorithm
+- Scheduling, card state management, and retrievability calculation
+- Optional optimizer module for computing optimal parameters from review data
+- Built into Anki since 23.10, with FSRS-6 support in Anki 25.09
+
+-- Christos Longros <chris.longros@gmail.com>