ion-CSP 2.0.8__py3-none-any.whl → 2.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,66 @@
1
+ import os
2
+ import yaml
3
+ import logging
4
+ import argparse
5
+ from ion_CSP.log_and_time import log_and_time, StatusLogger
6
+ from ion_CSP.upload_download import SSHBatchJob
7
+
8
+
9
+ @log_and_time
10
+ def main(work_dir, config):
11
+ task_name_3_1 = '3_upload_vasp'
12
+ task_3_1 = StatusLogger(work_dir=work_dir, task_name=task_name_3_1)
13
+
14
+ batch_config = {"upload_prefixes": ["CONTCAR_", "OUTCAR_"]}
15
+ folder_name = os.path.normpath(os.path.abspath(work_dir)).split(os.sep)[-1]
16
+ job = SSHBatchJob(
17
+ work_dir=work_dir,
18
+ machine_json=config["upload_download"]["machine_json"],
19
+ machine_type="ssh_direct",
20
+ )
21
+ if not task_3_1.is_successful():
22
+ try:
23
+ task_3_1.set_running()
24
+ script = "steps_opt_monitor.sh"
25
+ command = f"./steps_opt_monitor.sh {folder_name}"
26
+ job.prepare_and_submit(
27
+ command=command, forward_common_files=[script], batch_config=batch_config
28
+ )
29
+ # 关闭 SFTP 和 SSH 客户端
30
+ job.close_connection()
31
+ task_3_1.set_success()
32
+ except Exception:
33
+ task_3_1.set_failure()
34
+ raise
35
+
36
+ if task_3_1.is_successful():
37
+ task_name_3_2 = '3_download_vasp'
38
+ task_3_2 = StatusLogger(work_dir=work_dir, task_name=task_name_3_2)
39
+ if not task_3_2.is_successful():
40
+ try:
41
+ task_3_2.set_running()
42
+ job.download_entire_folder()
43
+ job.client.exec_command(f"rm -r {job.remote_dir}/{folder_name}")
44
+ print(f"Deleted remote folder {folder_name}")
45
+ logging.info(f"Deleted remote folder {folder_name}")
46
+ # 关闭 SFTP 和 SSH 客户端
47
+ job.close_connection()
48
+ task_3_2.set_success()
49
+ except Exception:
50
+ task_3_2.set_failure()
51
+ raise
52
+
53
+
54
+ if __name__ == "__main__":
55
+ parser = argparse.ArgumentParser(description="Process files in a specified working directory")
56
+ parser.add_argument("work_dir", type=str, help="The working directory to run the script in")
57
+ args = parser.parse_args()
58
+ # 尝试读取配置文件
59
+ try:
60
+ with open(os.path.join(args.work_dir, "config.yaml"), "r") as file:
61
+ config = yaml.safe_load(file)
62
+ except FileNotFoundError:
63
+ print(f"config.yaml not found in {args.work_dir}.")
64
+ raise
65
+ # 调用主函数
66
+ main(args.work_dir, config)
@@ -0,0 +1,42 @@
1
+ from ion_CSP.vasp_processing import VaspProcessing
2
+ from ion_CSP.log_and_time import StatusLogger
3
+ from ion_CSP.log_and_time import log_and_time, merge_config, get_work_dir_and_config
4
+
5
+ # 默认配置
6
+ DEFAULT_CONFIG = {
7
+ "vasp_processing": {
8
+ "nodes": 2, # VASP 分步优化占用 CPU 节点数
9
+ "molecules_prior": True, # 是否检查离子晶体结构中所有离子的结构
10
+ },
11
+ }
12
+
13
+ @log_and_time
14
+ def main(work_dir, config):
15
+ task_name = "4_vasp_processing"
16
+ task = StatusLogger(work_dir=work_dir, task_name=task_name)
17
+ try:
18
+ task.set_running()
19
+ result = VaspProcessing(work_dir=work_dir)
20
+ # 基于 dpdispatcher 模块,在远程CPU服务器上批量准备并提交VASP分步优化任务
21
+ # result.dpdisp_vasp_tasks(
22
+ # machine=config["vasp_processing"]["machine"],
23
+ # resources=config["vasp_processing"]["resources"],
24
+ # nodes=config["vasp_processing"]["nodes"],
25
+ # )
26
+ # 批量读取 VASP 分步优化的输出文件,并将能量和密度等结果保存到目录中的相应CSV文件
27
+ result.read_vaspout_save_csv(config["vasp_processing"]["molecules_prior"])
28
+ task.set_success()
29
+ except Exception:
30
+ task.set_failure()
31
+ raise
32
+
33
+
34
+ if __name__ == "__main__":
35
+ # 获取工作目录和配置
36
+ work_dir, config = get_work_dir_and_config()
37
+ # 合并配置(假设有merge_config函数)
38
+ config["vasp_processing"] = merge_config(
39
+ default_config=DEFAULT_CONFIG, user_config=config, key="vasp_processing"
40
+ )
41
+ # 调用主函数
42
+ main(work_dir, config)
@@ -1,19 +0,0 @@
1
- ion_CSP/__init__.py,sha256=M5RcbYDdt-UBVpsDKiJWJqLvSFfoBfU6aTUVccgK_BE,190
2
- ion_CSP/__main__.py,sha256=XlNCx5eMSrL7yld9ddSYXhjXvg2ZYGD_uk9LdqNabvs,74
3
- ion_CSP/convert_SMILES.py,sha256=4fndMcuIEypYtkXWBoS7W7uEXkZXVLeMDshdXEIk5kY,13864
4
- ion_CSP/empirical_estimate.py,sha256=_U5VRWSIAiJGcxnP3mnCHn8zKzviFEQhQwN7TjPTnCU,29089
5
- ion_CSP/gen_opt.py,sha256=aVZmf2RqePCwZShgpNvzqfntNAW0I0yctWHGXoe3mgw,19463
6
- ion_CSP/identify_molecules.py,sha256=hFKXS0Jjd7LyMsYGc9RmnoRPu1ibXF9fYO_9lR3wTfo,4634
7
- ion_CSP/log_and_time.py,sha256=6RKegXF8Gc1HqzAbE-PT9ejX3Ncyuz3v3FivujJt8to,9072
8
- ion_CSP/mlp_opt.py,sha256=ox4Qxg4D6WzrB8dxVnUWmAngnOA_wdcInP5UhBWsH4c,5535
9
- ion_CSP/read_mlp_density.py,sha256=TinsFGJPF0TPVZKMCzPyxuHBGrdeqw7yOnGh-78qbqo,11209
10
- ion_CSP/steps_opt_monitor.sh,sha256=1klPjnK0gqkDbvI9PtjdK5qidJ5G0Mo8q1SfrlLW5xM,3330
11
- ion_CSP/task_manager.py,sha256=S0QK7EJhKrQL1hzMqkR6a6y3Du027Ppyz-zHenWrFQ4,16241
12
- ion_CSP/upload_download.py,sha256=Hiz5jKOy9x26hJJdcpt-owQdVUbzzGuGOelro6JozY8,23801
13
- ion_CSP/vasp_processing.py,sha256=eQTMKIPBzi1X4HHTqWkHE1Lt8dvCCV-MXPCR3RtKYZ0,13977
14
- ion_csp-2.0.8.dist-info/licenses/LICENSE,sha256=2J6A8GT2iIf2LhuWO1_0ilgx7ijzzpQ2BXU7rHKe8Cc,1068
15
- ion_csp-2.0.8.dist-info/METADATA,sha256=pZg7XM0CD5Du6rQJvijc_VOyfvtFVlnmWAZiwBPmeIU,6380
16
- ion_csp-2.0.8.dist-info/WHEEL,sha256=QZxptf4Y1BKFRCEDxD4h2V0mBFQOVFLFEpvxHmIs52A,91
17
- ion_csp-2.0.8.dist-info/entry_points.txt,sha256=NexQJDs9f69kJA2DgoU6tsA3V8a66nadJRem1U_c_6g,54
18
- ion_csp-2.0.8.dist-info/top_level.txt,sha256=aYZa43dDebjLpWPN6bDIlBb6BVwA8gk4ajEjDDK9b9I,8
19
- ion_csp-2.0.8.dist-info/RECORD,,