From e943b1b7d7e9ef6a850e47ac19120a601caff42a Mon Sep 17 00:00:00 2001 From: Wang Zhiyu Date: Mon, 20 Apr 2026 18:55:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Lict=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/simplemem.py | 2 +- src/heurams/interface/screens/dashboard.py | 9 ++- src/heurams/interface/screens/preparation.py | 8 +- .../{lict_legacy.py => lict.deprecated.py} | 1 + src/heurams/kernel/auxiliary/lict.py | 73 ++++++++++--------- .../{refvar.py => refvar.deprecated.py} | 1 + src/heurams/kernel/repolib/repo.py | 8 +- 7 files changed, 53 insertions(+), 49 deletions(-) rename src/heurams/kernel/auxiliary/{lict_legacy.py => lict.deprecated.py} (99%) rename src/heurams/kernel/auxiliary/{refvar.py => refvar.deprecated.py} (99%) diff --git a/examples/simplemem.py b/examples/simplemem.py index 121b123..f1ee28a 100644 --- a/examples/simplemem.py +++ b/examples/simplemem.py @@ -12,7 +12,7 @@ for i in repo.ident_index: n = pt.Nucleon.from_data(nucleonic_data=repo.nucleonic_data_lict.get_itemic_unit(i)) e = pt.Electron.from_data( electronic_data=repo.electronic_data_lict.get_itemic_unit(i), - algo_name=repo.config['algorithm'] + algo_name=repo.config["algorithm"], ) print(n) input() diff --git a/src/heurams/interface/screens/dashboard.py b/src/heurams/interface/screens/dashboard.py index 49d2a81..afd4941 100644 --- a/src/heurams/interface/screens/dashboard.py +++ b/src/heurams/interface/screens/dashboard.py @@ -35,8 +35,8 @@ class DashboardScreen(Screen): ("q", "go_back", "返回"), ] - CSS_PATH = Path(__file__).parent.parent / 'css' / "screens" / "dashboard.tcss" - + CSS_PATH = Path(__file__).parent.parent / "css" / "screens" / "dashboard.tcss" + def __init__( self, name: str | None = None, @@ -109,7 +109,10 @@ class DashboardScreen(Screen): } initial_time = float("inf") for i in range(repo.data_length): - e = pt.Electron.from_data(electronic_data=repo.electronic_data_lict[i], algo_name=repo.config['algorithm']) + e = pt.Electron.from_data( + electronic_data=repo.electronic_data_lict[i], + algo_name=repo.config["algorithm"], + ) n = pt.Nucleon.from_data(repo.nucleonic_data_lict[i]) if e.is_activated(): repo.progress["have_activated_ever"] = 1 diff --git a/src/heurams/interface/screens/preparation.py b/src/heurams/interface/screens/preparation.py index 14a1382..77d092a 100644 --- a/src/heurams/interface/screens/preparation.py +++ b/src/heurams/interface/screens/preparation.py @@ -48,9 +48,7 @@ class PreparationScreen(Screen): yield Header(show_clock=True) with ScrollableContainer(id="vice_container"): yield Label(f"准备就绪: [b]{self.repo.manifest['title']}[/b]\n") - yield Label( - f"[b]仓库路径: {self.repo.source}[/b]" - ) + yield Label(f"[b]仓库路径: {self.repo.source}[/b]") yield Label(f"\n单元数量: {len(self.repo)}\n") yield Label(f"最小记忆分组: {self.scheduled_num}\n", id="schnum_label") @@ -93,7 +91,7 @@ class PreparationScreen(Screen): ) e = pt.Electron.from_data( electronic_data=self.repo.electronic_data_lict.get_itemic_unit(i), - algo_name=self.repo.config['algorithm'] + algo_name=self.repo.config["algorithm"], ) statstr = "" @@ -148,7 +146,7 @@ def launch(repo, app, scheduled_num): ) e = pt.Electron.from_data( electronic_data=repo.electronic_data_lict.get_itemic_unit(i), - algo_name=repo.config['algorithm'] + algo_name=repo.config["algorithm"], ) a = pt.Atom(n, e, repo.orbitic_data) atoms.append(a) diff --git a/src/heurams/kernel/auxiliary/lict_legacy.py b/src/heurams/kernel/auxiliary/lict.deprecated.py similarity index 99% rename from src/heurams/kernel/auxiliary/lict_legacy.py rename to src/heurams/kernel/auxiliary/lict.deprecated.py index 446cae9..9d86005 100644 --- a/src/heurams/kernel/auxiliary/lict_legacy.py +++ b/src/heurams/kernel/auxiliary/lict.deprecated.py @@ -1,3 +1,4 @@ +# 已弃用 from collections import UserList from typing import Any, Iterator diff --git a/src/heurams/kernel/auxiliary/lict.py b/src/heurams/kernel/auxiliary/lict.py index 110738b..b625ed6 100644 --- a/src/heurams/kernel/auxiliary/lict.py +++ b/src/heurams/kernel/auxiliary/lict.py @@ -2,23 +2,36 @@ from collections.abc import MutableSequence from typing import Any, Iterator, Optional class Lict(MutableSequence): - - def __init__(self, initlist: Optional[list] = None, + """ "列典" 对象 + + 同时兼容字典和列表大多数 API, 两边数据同步的容器, 性能与 list/dict 大体相当 + 列表数据是 dictobj.items() 的格式 + 支持根据字典或列表初始化 + 限制要求: + - 键名一定唯一, 且仅能为字符串 + - append 的元组中, 表示键名的元素不能重复, 否则会导致覆盖行为 + + """ + + def __init__( + self, + initlist: Optional[list] = None, initdict: Optional[dict] = None, - forced_order: bool = False): + forced_order: bool = False, + ): self._dict = {} self._list = [] self._dict_dirty = False self._list_dirty = False self.forced_order = forced_order - - if initdict: # initdict 更优先 + + if initdict: # initdict 更优先 self._dict = initdict.copy() self._list_dirty = True elif initlist: self._list = initlist.copy() self._dict_dirty = True - + self._sync_if_needed() def _sync_if_needed(self): @@ -28,20 +41,20 @@ class Lict(MutableSequence): if self.forced_order: self._list.sort() self._dict_dirty = False - + if self._list_dirty: self._list = list(self._dict.items()) if self.forced_order: self._list.sort() self._list_dirty = False - + def __getitem__(self, key): if isinstance(key, str): return self._dict[key] else: self._sync_if_needed() return self._list[key] - + def __setitem__(self, key, value): """传入键值对时等同于操作字典, 传入索引+元组时等用于替换某索引的列表值为新元组""" if isinstance(key, str): @@ -54,34 +67,34 @@ class Lict(MutableSequence): old_key = self._list[key][0] self._dict.pop(old_key) self._list[key] = value - self._dict[value[0]] = value[1] # 避免全量同步 + self._dict[value[0]] = value[1] # 避免全量同步 def __delitem__(self, key): - if isinstance(key, str): # 字符串键 + if isinstance(key, str): # 字符串键 del self._dict[key] self._list_dirty = True - else: # 数字索引 + else: # 数字索引 self._sync_if_needed() del_key = self._list[key][0] del self._list[key] del self._dict[del_key] - + def keys(self): self._sync_if_needed() return self._dict.keys() - + def values(self): self._sync_if_needed() return self._dict.values() - + def items(self): self._sync_if_needed() return self._list - + def __len__(self): self._sync_if_needed() return len(self._list) - + def __iter__(self): self._sync_if_needed() return iter(self._list) @@ -89,24 +102,24 @@ class Lict(MutableSequence): def __contains__(self, item): self._sync_if_needed() return item in self._list or item in self.keys() or item in self.values() - + def append(self, item): if item != (item[0], item[1]): raise NotImplementedError - self._sync_if_needed() # 以防 forced_order + self._sync_if_needed() # 以防 forced_order key, value = item self._dict[key] = value - self._list.append(item) # 两端都已同步 - self._sync_if_needed() # 以防 forced_order + self._list.append(item) # 两端都已同步 + self._sync_if_needed() # 以防 forced_order - def append_if_it_donesnt_exist_before(self, item: Any): + def append_if_it_doesnt_exist_before(self, item: Any): if item != (item[0], item[1]): raise NotImplementedError self._sync_if_needed() if item[0] not in self: - super().append(item) + self.append(item) self._sync_if_needed() - + def insert(self, i: int, item: Any) -> None: if item != (item[0], item[1]): raise NotImplementedError @@ -147,18 +160,6 @@ class Lict(MutableSequence): def reverse(self): raise NotImplementedError - def keys(self): - self._sync_if_needed() - return self._dict.keys() - - def values(self): - self._sync_if_needed() - return self._dict.values() - - def items(self): - self._sync_if_needed() - return self._list - def get_itemic_unit(self, ident): return (ident, self._dict[ident]) diff --git a/src/heurams/kernel/auxiliary/refvar.py b/src/heurams/kernel/auxiliary/refvar.deprecated.py similarity index 99% rename from src/heurams/kernel/auxiliary/refvar.py rename to src/heurams/kernel/auxiliary/refvar.deprecated.py index 12aab09..71c1c5f 100644 --- a/src/heurams/kernel/auxiliary/refvar.py +++ b/src/heurams/kernel/auxiliary/refvar.deprecated.py @@ -1,3 +1,4 @@ +# 已弃用 class RefVar: def __init__(self, initvalue) -> None: self.data = initvalue diff --git a/src/heurams/kernel/repolib/repo.py b/src/heurams/kernel/repolib/repo.py index cd2acb7..61c1708 100644 --- a/src/heurams/kernel/repolib/repo.py +++ b/src/heurams/kernel/repolib/repo.py @@ -64,11 +64,11 @@ class Repo: "source": self.source, } self.config = { - "algorithm": config_var.get()['interface']['global']['algorithm'], - "scheduled_num": config_var.get()['interface']['global']['scheduled_num'], + "algorithm": config_var.get()["interface"]["global"]["algorithm"], + "scheduled_num": config_var.get()["interface"]["global"]["scheduled_num"], } try: - self.config.update(dict(config_var.get()['repo'][self.manifest['package']])) + self.config.update(dict(config_var.get()["repo"][self.manifest["package"]])) except: pass self._generate_particles_data() @@ -82,7 +82,7 @@ class Repo: self.data_length = len(self.nucleonic_data_lict) self.ident_index = self.nucleonic_data_lict.keys() for i in self.ident_index: - self.algodata.append_if_it_donesnt_exist_before((i, {})) + self.algodata.append_if_it_doesnt_exist_before((i, {})) self.electronic_data_lict = self.algodata def _nucleonic_proc(self, unit):