From 80fe1180c3c9f376aeba890637b23f23a85b0fcf Mon Sep 17 00:00:00 2001 From: david-ajax Date: Wed, 17 Dec 2025 22:00:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AE=8C=E6=88=90=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=9F=BA=E7=A1=80=E7=8E=B0=E4=BB=A3=E5=8C=96=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/nucleon/test.toml | 10 +++++----- src/heurams/__main__.py | 7 +++++++ src/heurams/interface/screens/memorizor.py | 4 ++++ src/heurams/interface/widgets/mcq_puzzle.py | 2 +- src/heurams/kernel/particles/atom.py | 9 +++++++-- src/heurams/kernel/particles/electron.py | 11 +++++++---- 6 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 src/heurams/__main__.py diff --git a/data/nucleon/test.toml b/data/nucleon/test.toml index 4ee5949..c501a1e 100644 --- a/data/nucleon/test.toml +++ b/data/nucleon/test.toml @@ -1,5 +1,5 @@ -# Nucleon 是 HeurAMS 软件项目使用的基于 TOML 的专有源文件格式, 版本 4 -# 建议使用的 MIME 类型: application/vnd.xyz.imwangzhiyu.heurams-nucleon.v4+toml +# Nucleon 是 HeurAMS 软件项目使用的基于 TOML 的专有源文件格式, 版本 5 +# 建议使用的 MIME 类型: application/vnd.xyz.imwangzhiyu.heurams-nucleon.v5+toml ["__metadata__"] ["__metadata__.attribution"] # 版权元信息 @@ -21,13 +21,13 @@ tts_text = "eval:nucleon['content'].replace('/', '')" ["__metadata__.orbital.puzzles"] # 谜题定义 # 我们称 "Recognition" 为 recognition 谜题的 alia "Recognition" = { __origin__ = "recognition", __hint__ = "", primary = "eval:nucleon['content']", secondary = ["eval:nucleon['keyword_note']", "eval:nucleon['note']"], top_dim = ["eval:nucleon['translation']"] } -"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:nucleon['keyword_note']", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } +"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", primary = "eval:nucleon['content']", mapping = "eval:nucleon['keyword_note']", jammer = "eval:list(nucleon['keyword_note'].values())", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " } "FillBlank" = { __origin__ = "cloze", __hint__ = "", text = "eval:nucleon['content']", delimiter = "eval:metadata['formation']['delimiter']", min_denominator = "eval:default['cloze']['min_denominator']"} ["__metadata__.orbital.schedule"] # 内置的推荐学习方案 -quick_review = [["FillBlank", "1.0"], ["SelectMeaning", "0.5"], ["recognition", "1.0"]] +quick_review = [["FillBlank", "1.0"], ["SelectMeaning", "0.5"], ["Recognition", "1.0"]] recognition = [["Recognition", "1.0"]] -final_review = [["FillBlank", "0.7"], ["SelectMeaning", "0.7"], ["recognition", "1.0"]] +final_review = [["FillBlank", "0.7"], ["SelectMeaning", "0.7"], ["Recognition", "1.0"]] ["秦孝公据崤函之固, 拥雍州之地,"] note = [] diff --git a/src/heurams/__main__.py b/src/heurams/__main__.py new file mode 100644 index 0000000..3fc9cb8 --- /dev/null +++ b/src/heurams/__main__.py @@ -0,0 +1,7 @@ +prompt = """HeurAMS 已经被成功地安装在系统中. +但 HeurAMS 被设计为一个带有辅助记忆调度器功能的软件包, 无法直接被执行, 但可被其他 Python 程序调用. +若您想启动内置的基本用户界面, + 请运行 python -m heurams.interface, + 或者 python -m heurams.interface.__main__ +注意: 一个常见的误区是, 执行 interface 下的 __main__.py 运行基本用户界面, 这会导致 Python 上下文环境异常, 请不要这样做.""" +print(prompt) \ No newline at end of file diff --git a/src/heurams/interface/screens/memorizor.py b/src/heurams/interface/screens/memorizor.py index 35d6dbe..89d9f81 100644 --- a/src/heurams/interface/screens/memorizor.py +++ b/src/heurams/interface/screens/memorizor.py @@ -124,6 +124,7 @@ class MemScreen(Screen): logger.debug(f"记忆进程结束") for i in self.atoms: i: pt.Atom + i.revise() i.persist("electron") self.load_finished_widget() return @@ -136,6 +137,9 @@ class MemScreen(Screen): def action_quick_pass(self): self.rating = 5 + self.atom.minimize(5) + self.atom.registry["electron"].activate() + self.atom.lock(1) def action_play_voice(self): """朗读当前内容""" diff --git a/src/heurams/interface/widgets/mcq_puzzle.py b/src/heurams/interface/widgets/mcq_puzzle.py index 73afa4c..26cf689 100644 --- a/src/heurams/interface/widgets/mcq_puzzle.py +++ b/src/heurams/interface/widgets/mcq_puzzle.py @@ -66,12 +66,12 @@ class MCQPuzzle(BasePuzzleWidget): self.alia ] logger.debug(f"Puzzle Setting: {setting}") + current_options = self.puzzle.options[len(self.inputlist)] yield Label(setting["primary"], id="sentence") yield Label(self.puzzle.wording[len(self.inputlist)], id="puzzle") yield Label(f"当前输入: {self.inputlist}", id="inputpreview") # 渲染当前问题的选项 - current_options = self.puzzle.options[len(self.inputlist)] with Container(id="btn-container"): for i in current_options: self.hashmap[str(hash(i))] = i diff --git a/src/heurams/kernel/particles/atom.py b/src/heurams/kernel/particles/atom.py index 6c47d5c..914cd1c 100644 --- a/src/heurams/kernel/particles/atom.py +++ b/src/heurams/kernel/particles/atom.py @@ -16,6 +16,7 @@ logger = get_logger(__name__) class AtomRegister_runtime(TypedDict): locked: bool # 只读锁定标识符 min_rate: int # 最低评分 + newact: bool # 新激活 class AtomRegister(TypedDict): @@ -56,7 +57,7 @@ class Atom: "orbital": None, "orbital_path": None, # 允许设置为 None, 此时使用 nucleon 文件内的推荐配置 "orbital_fmt": "toml", - "runtime": {"locked": False, "min_rate": 0x3F3F3F3F}, + "runtime": {"locked": False, "min_rate": 0x3F3F3F3F, "newact": False}, } self.do_eval() logger.debug("Atom 初始化完成") @@ -67,6 +68,9 @@ class Atom: self.registry[key] = value logger.debug("键 '%s' 已链接, 触发 do_eval", key) self.do_eval() + if key == 'electron': + if self.registry['electron'].is_activated() == 0: + self.registry['runtime']['newact'] = True else: logger.error("尝试链接不受支持的键: '%s'", key) raise ValueError("不受支持的原子元数据链接操作") @@ -82,6 +86,7 @@ class Atom: ) def lock(self, locked=-1): + logger.debug(f"锁定参数 {locked}") """锁定, 效果等同于 self.registry['runtime']['locked'] = locked 或者返回是否锁定""" if locked == 1: self.registry["runtime"]["locked"] = True @@ -99,7 +104,7 @@ class Atom: """ if self.registry["runtime"]["locked"]: logger.debug(f"允许总评分: {self.registry['runtime']['min_rate']}") - self.registry["electron"].revisor(self.registry["runtime"]["min_rate"]) + self.registry["electron"].revisor(self.registry["runtime"]["min_rate"], is_new_activation=self.registry["runtime"]["newact"]) else: logger.debug("禁止总评分") diff --git a/src/heurams/kernel/particles/electron.py b/src/heurams/kernel/particles/electron.py index 50344cb..5bfc4a9 100644 --- a/src/heurams/kernel/particles/electron.py +++ b/src/heurams/kernel/particles/electron.py @@ -76,10 +76,13 @@ class Electron: def get_rate(self): "评价" - logger.debug("Electron.rate: ident='%s'", self.ident) - result = self.algo.rate(self.algodata) - logger.debug("rate 结果: %s", result) - return result + try: + logger.debug("Electron.rate: ident='%s'", self.ident) + result = self.algo.rate(self.algodata) + logger.debug("rate 结果: %s", result) + return result + except: + return 0 def nextdate(self) -> int: logger.debug("Electron.nextdate: ident='%s'", self.ident)