from .nucleon import Nucleon from .electron import Electron import heurams.services.hasher as hasher import pathlib import toml import json from copy import deepcopy def load_nucleon(path: pathlib.Path, fmt="toml"): with open(path, "r") as f: dictdata = dict() dictdata = toml.load(f) # type: ignore lst = list() nested_data = dict() # 修正 toml 解析器的不管嵌套行为 for key, value in dictdata.items(): if "__metadata__" in key: # 以免影响句号 if "." in key: parts = key.split(".") current = nested_data for part in parts[:-1]: if part not in current: current[part] = {} current = current[part] current[parts[-1]] = value else: nested_data[key] = value # print(nested_data) for item, attr in nested_data.items(): if item == "__metadata__": continue lst.append( ( Nucleon( hasher.hash(item), attr, deepcopy(nested_data["__metadata__"]) ), deepcopy(nested_data["__metadata__"]["orbital"]), ) ) return lst def load_electron(path: pathlib.Path, fmt="json") -> dict: """从文件路径加载电子对象 Args: path (pathlib.Path): 路径 fmt (str): 文件格式(可选, 默认 json) Returns: dict: 键名是电子对象名称, 值是电子对象 """ with open(path, "r") as f: dictdata = dict() dictdata = json.load(f) # type: ignore dic = dict() for item, attr in dictdata.items(): dic[item] = Electron(hasher.hash(item), attr) return dic