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