Files
HeurAMS/src/heurams/kernel/particles/loader.py
2025-12-13 21:47:37 +08:00

61 lines
1.9 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
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