88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
from typing import TypedDict
|
|
|
|
import heurams.services.timer as timer
|
|
from heurams.services.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
_registry: dict[str, type["BaseAlgorithm"]] = {}
|
|
|
|
|
|
class BaseAlgorithm:
|
|
algo_name = "BaseAlgorithm"
|
|
desc = "算法基类"
|
|
|
|
def __init_subclass__(cls, **kwargs):
|
|
super().__init_subclass__(**kwargs)
|
|
_registry[cls.algo_name] = cls
|
|
|
|
@classmethod
|
|
def get_registry(cls) -> dict[str, type["BaseAlgorithm"]]:
|
|
return dict(_registry)
|
|
|
|
class AlgodataDict(TypedDict):
|
|
real_rept: int
|
|
rept: int
|
|
interval: int
|
|
last_date: int
|
|
next_date: int
|
|
is_activated: int
|
|
last_modify: float
|
|
|
|
defaults = {
|
|
"real_rept": 0,
|
|
"rept": 0,
|
|
"interval": 0,
|
|
"last_date": 0,
|
|
"next_date": 0,
|
|
"is_activated": 0,
|
|
"last_modify": timer.get_timestamp(),
|
|
}
|
|
|
|
@classmethod
|
|
def revisor(
|
|
cls, algodata: dict, feedback: int = 5, is_new_activation: bool = False
|
|
) -> None:
|
|
"""迭代记忆数据"""
|
|
logger.debug(
|
|
"BaseAlgorithm.revisor 被调用, algodata keys: %s, feedback: %d, is_new_activation: %s",
|
|
list(algodata.keys()) if algodata else [],
|
|
feedback,
|
|
is_new_activation,
|
|
)
|
|
|
|
@classmethod
|
|
def is_due(cls, algodata) -> int:
|
|
"""是否应该复习"""
|
|
logger.debug(
|
|
"BaseAlgorithm.is_due 被调用, algodata keys: %s",
|
|
list(algodata.keys()) if algodata else [],
|
|
)
|
|
return 1
|
|
|
|
@classmethod
|
|
def get_rating(cls, algodata) -> str:
|
|
"""获取评分信息"""
|
|
logger.debug(
|
|
"BaseAlgorithm.rate 被调用, algodata keys: %s",
|
|
list(algodata.keys()) if algodata else [],
|
|
)
|
|
return ""
|
|
|
|
@classmethod
|
|
def nextdate(cls, algodata) -> int:
|
|
"""获取下一次记忆时间戳"""
|
|
logger.debug(
|
|
"BaseAlgorithm.nextdate 被调用, algodata keys: %s",
|
|
list(algodata.keys()) if algodata else [],
|
|
)
|
|
return -1
|
|
|
|
@classmethod
|
|
def check_integrity(cls, algodata):
|
|
try:
|
|
cls.AlgodataDict(**algodata[cls.algo_name])
|
|
return 1
|
|
except:
|
|
return 0
|