You've already forked HeurAMS-legacy
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
from .nucleon import Nucleon
|
|
from .electron import Electron
|
|
import heurams.services.hasher as hasher
|
|
import pathlib
|
|
import toml
|
|
import json
|
|
from copy import deepcopy
|
|
from heurams.services.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
def load_nucleon(path: pathlib.Path, fmt="toml"):
|
|
logger.debug("load_nucleon: 加载文件 %s, 格式: %s", path, fmt)
|
|
with open(path, "r") as f:
|
|
dictdata = dict()
|
|
dictdata = toml.load(f) # type: ignore
|
|
logger.debug("TOML 解析成功, keys: %s", list(dictdata.keys()))
|
|
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
|
|
logger.debug("处理元数据键: %s", key)
|
|
else:
|
|
nested_data[key] = value
|
|
logger.debug("嵌套数据处理完成, keys: %s", list(nested_data.keys()))
|
|
# print(nested_data)
|
|
for item, attr in nested_data.items():
|
|
if item == "__metadata__":
|
|
continue
|
|
logger.debug("处理项目: %s", item)
|
|
lst.append(
|
|
(
|
|
Nucleon(item, attr, deepcopy(nested_data["__metadata__"])),
|
|
deepcopy(nested_data["__metadata__"]["orbital"]),
|
|
)
|
|
)
|
|
logger.debug("load_nucleon 完成, 加载了 %d 个 Nucleon 对象", len(lst))
|
|
return lst
|
|
|
|
|
|
def load_electron(path: pathlib.Path, fmt="json") -> dict:
|
|
"""从文件路径加载电子对象
|
|
|
|
Args:
|
|
path (pathlib.Path): 路径
|
|
fmt (str): 文件格式(可选, 默认 json)
|
|
|
|
Returns:
|
|
dict: 键名是电子对象名称, 值是电子对象
|
|
"""
|
|
logger.debug("load_electron: 加载文件 %s, 格式: %s", path, fmt)
|
|
with open(path, "r") as f:
|
|
dictdata = dict()
|
|
dictdata = json.load(f) # type: ignore
|
|
logger.debug("JSON 解析成功, keys: %s", list(dictdata.keys()))
|
|
dic = dict()
|
|
for item, attr in dictdata.items():
|
|
logger.debug("处理电子项目: %s", item)
|
|
dic[item] = Electron(item, attr)
|
|
logger.debug("load_electron 完成, 加载了 %d 个 Electron 对象", len(dic))
|
|
return dic
|