From ab60070a62a2f0a41432eba8b73cada61de1142d Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 18:24:57 +0900 Subject: [PATCH 1/9] Refactor string formatting to f-strings in ti.py Replaced old-style string formatting with f-strings throughout dpti/ti.py for improved readability and consistency. Also reformatted some function signatures and print statements for clarity and conciseness. --- dpti/ti.py | 124 +++++++++++++++++------------------------------------ 1 file changed, 39 insertions(+), 85 deletions(-) diff --git a/dpti/ti.py b/dpti/ti.py index c130475f..2e55788f 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -29,7 +29,7 @@ def make_iter_name(iter_index): - return "task_ti." + ("%04d" % iter_index) + return f"task_ti.{iter_index:04d}" def parse_seq_ginv(seq): @@ -65,9 +65,9 @@ def _gen_lammps_input( ret = "" ret += "clear\n" ret += "# --------------------- VARIABLES-------------------------\n" - ret += "variable NSTEPS equal %d\n" % nsteps - ret += "variable THERMO_FREQ equal %d\n" % thermo_freq - ret += "variable DUMP_FREQ equal %d\n" % dump_freq + ret += f"variable NSTEPS equal {int(nsteps)}\n" + ret += f"variable THERMO_FREQ equal {int(thermo_freq)}\n" + ret += f"variable DUMP_FREQ equal {int(dump_freq)}\n" ret += f"variable TEMP equal {temp:f}\n" ret += f"variable PRES equal {pres:f}\n" ret += f"variable TAU_T equal {tau_t:f}\n" @@ -83,17 +83,17 @@ def _gen_lammps_input( ret += "box tilt large\n" ret += f"read_data {conf_file}\n" if copies is not None: - ret += "replicate %d %d %d\n" % (copies[0], copies[1], copies[2]) + ret += f"replicate {int(copies[0])} {int(copies[1])} {int(copies[2])}\n" ret += "change_box all triclinic\n" for jj in range(len(mass_map)): - ret += "mass %d %f\n" % (jj + 1, mass_map[jj]) + ret += f"mass {jj + 1} {mass_map[jj]:f}\n" ret += "# --------------------- FORCE FIELDS ---------------------\n" # if if_meam: # ret += 'pair_style meam \n' # ret += 'pair_coeff * * /home/fengbo/4_Sn/meam_files/library_18Metal.meam Sn /home/fengbo/4_Sn/meam_files/Sn_18Metal.meam Sn\n' if if_meam: ret += "pair_style meam\n" - ret += f'pair_coeff * * {meam_model["library"]} {meam_model["element"]} {meam_model["potential"]} {meam_model["element"]}\n' + ret += f"pair_coeff * * {meam_model['library']} {meam_model['element']} {meam_model['potential']} {meam_model['element']}\n" else: if append: ret += f"pair_style deepmd {model:s} {append:s}\n" @@ -118,11 +118,15 @@ def _gen_lammps_input( if ens == "nvt": ret += "fix 1 all nvt temp ${TEMP} ${TEMP} ${TAU_T}\n" elif ens == "npt-iso" or ens == "npt": - ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" + ret += ( + "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" + ) elif ens == "npt-aniso": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-tri": - ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" + ret += ( + "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" + ) elif ens == "npt-xy": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P} couple xy\n" elif ens == "nve": @@ -131,9 +135,7 @@ def _gen_lammps_input( raise RuntimeError(f"unknow ensemble {ens}\n") ret += "fix mzero all momentum 10 linear 1 1 1\n" ret += "# --------------------- INITIALIZE -----------------------\n" - ret += "velocity all create ${TEMP} %d\n" % ( - np.random.default_rng().integers(1, 2**16) - ) + ret += f"velocity all create ${{TEMP}} {np.random.default_rng().integers(1, 2**16)}\n" ret += "velocity all zero linear\n" ret += "# --------------------- RUN ------------------------------\n" ret += "run ${NSTEPS}\n" @@ -163,9 +165,7 @@ def make_tasks(iter_name, jdata, if_meam=None): timestep = get_first_matched_key_from_dict(jdata, ["timestep", "dt"]) # thermo_freq = jdata['thermo_freq'] thermo_freq = get_first_matched_key_from_dict(jdata, ["thermo_freq", "stat_freq"]) - dump_freq = get_first_matched_key_from_dict( - jdata, ["dump_freq", "thermo_freq", "stat_freq"] - ) + dump_freq = get_first_matched_key_from_dict(jdata, ["dump_freq", "thermo_freq", "stat_freq"]) # thermos = jdata['thermos'] ens = jdata["ens"] path = jdata["path"] @@ -242,7 +242,7 @@ def make_tasks(iter_name, jdata, if_meam=None): json.dump(ti_settings, f, indent=4) for ii in range(ntasks): - task_dir = os.path.join(job_abs_dir, "task.%06d" % ii) + task_dir = os.path.join(job_abs_dir, f"task.{ii:06d}") task_abs_dir = create_path(task_dir) # os.chdir(work_path) @@ -373,9 +373,7 @@ def _print_thermo_info(info, more_head=""): print(ptr) -def _thermo_inte( - jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None -): +def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None): path = jdata["path"] ens = jdata["ens"] all_temps = [] @@ -410,9 +408,7 @@ def _thermo_inte( # return np.asarray(all_temps), np.asarray(all_press), np.asarray(all_fe), np.asarray(all_fe_err), np.asarray(all_fe_sys_err) - all_t, inte, inte_e, stat_e = integrate_range( - all_t, integrand, integrand_err, scheme - ) + all_t, inte, inte_e, stat_e = integrate_range(all_t, integrand, integrand_err, scheme) for ii in range(0, len(all_t)): diff_e = inte[ii] err = stat_e[ii] @@ -426,9 +422,7 @@ def _thermo_inte( sys_err *= all_t[ii] all_temps.append(all_t[ii]) if "npt" in ens: - all_press.append( - get_first_matched_key_from_dict(jdata, ["pres", "press"]) - ) + all_press.append(get_first_matched_key_from_dict(jdata, ["pres", "press"])) elif path == "p": e1 = Eo + diff_e err = np.sqrt(np.square(Eo_err) + np.square(err)) @@ -446,9 +440,7 @@ def _thermo_inte( ) -def post_tasks( - iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0 -): +def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0): equi_conf = get_task_file_abspath(iter_name, jdata["equi_conf"]) if natoms is None: natoms = get_natoms(equi_conf) @@ -491,7 +483,7 @@ def post_tasks( print("# TI in NPT along P path") else: raise RuntimeError("invalid ens or path setting") - print("# natoms: %d" % natoms) + print(f"# natoms: {natoms:d}") for ii in all_tasks: # get T or P @@ -557,9 +549,7 @@ def post_tasks( header="t/p Integrand U/V U/V_err enthalpy msd_xyz", ) - info0 = _compute_thermo( - os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize - ) + info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -588,18 +578,14 @@ def post_tasks( all_fe_1, all_fe_err_1, all_fe_sys_err_1, - ) = _thermo_inte( - jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme - ) + ) = _thermo_inte(jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme) ( all_temps_2, all_press_2, all_fe_2, all_fe_err_2, all_fe_sys_err_2, - ) = _thermo_inte( - jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme - ) + ) = _thermo_inte(jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme) all_temps_1 = np.flip(all_temps_1, 0) all_press_1 = np.flip(all_press_1, 0) all_fe_1 = np.flip(all_fe_1, 0) @@ -626,17 +612,8 @@ def post_tasks( result = "" # result_file = open(f"{iter_name}/../result", 'w') if "nvt" == ens: - print( - "#%8s %20s %9s %9s %9s" - % ("T(ctrl)", "F", "stat_err", "inte_err", "err") - ) - result += "#%8s %20s %9s %9s %9s\n" % ( - "T(ctrl)", - "F", - "stat_err", - "inte_err", - "err", - ) + print(f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}") + result += f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}" @@ -644,16 +621,10 @@ def post_tasks( result += f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}\n" elif "npt" in ens: print( - "#%8s %15s %20s %9s %9s %9s" - % ("T(ctrl)", "P(ctrl)", "F", "stat_err", "inte_err", "err") + f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}" ) - result += "#%8s %15s %20s %9s %9s %9s\n" % ( - "T(ctrl)", - "P(ctrl)", - "F", - "stat_err", - "inte_err", - "err", + result += ( + f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" ) for ii in range(len(all_temps)): print( @@ -713,7 +684,7 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): print("# TI in NPT along P path") else: raise RuntimeError("invalid ens or path setting") - print("# natoms: %d" % natoms) + print(f"# natoms: {natoms:d}") all_t = [] for ii in all_tasks: @@ -755,9 +726,7 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): ukn = np.concatenate((ukn, block_u), axis=1) nk = np.array(nk) - info0 = _compute_thermo( - os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize - ) + info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -797,16 +766,13 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): all_fe_sys_err.append(sys_err) if "nvt" == ens: - print("#%8s %15s %9s %9s" % ("T(ctrl)", "F", "stat_err", "inte_err")) + print(f"#{'T(ctrl)':>8} {'F':>15} {'stat_err':>9} {'inte_err':>9}") for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" ) elif "npt" in ens: - print( - "#%8s %15s %15s %9s %9s" - % ("T(ctrl)", "P(ctrl)", "F", "stat_err", "inte_err") - ) + print(f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}") for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" @@ -828,9 +794,7 @@ def refine_task(from_task, to_task, err): from_ti = os.path.join(from_task, "ti.out") if not os.path.isfile(from_ti): - raise RuntimeError( - f"cannot find file {from_ti}, task should be computed befor refined" - ) + raise RuntimeError(f"cannot find file {from_ti}, task should be computed befor refined") tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] integrand = tmp_array[:, 1] @@ -960,9 +924,7 @@ def add_module_subparsers(main_subparsers): ) parser_gen.set_defaults(func=handle_gen) - parser_compute = module_subparsers.add_parser( - "compute", help="Compute the result of a job" - ) + parser_compute = module_subparsers.add_parser("compute", help="Compute the result of a job") parser_compute.add_argument("JOB", type=str, help="folder of the job") parser_compute.add_argument( "-m", @@ -1001,15 +963,9 @@ def add_module_subparsers(main_subparsers): ) parser_compute.set_defaults(func=handle_compute) - parser_refine = module_subparsers.add_parser( - "refine", help="Refine the grid of a job" - ) - parser_refine.add_argument( - "-i", "--input", type=str, required=True, help="input job" - ) - parser_refine.add_argument( - "-o", "--output", type=str, required=True, help="output job" - ) + parser_refine = module_subparsers.add_parser("refine", help="Refine the grid of a job") + parser_refine.add_argument("-i", "--input", type=str, required=True, help="input job") + parser_refine.add_argument("-o", "--output", type=str, required=True, help="output job") parser_refine.add_argument( "-e", "--error", type=float, required=True, help="the error required" ) @@ -1049,9 +1005,7 @@ def handle_compute(args): raise ValueError("Cannot find temperature in hti's input json file") elif path == "p": try: - args.To = get_first_matched_key_from_dict( - jdata_hti_in, ["pres", "press"] - ) + args.To = get_first_matched_key_from_dict(jdata_hti_in, ["pres", "press"]) except KeyError: args.To = None if args.To is None: From e87ebc9cfeab8aa85491573f326b58d1676f71b0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:27:26 +0000 Subject: [PATCH 2/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dpti/ti.py | 80 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/dpti/ti.py b/dpti/ti.py index 2e55788f..5be88395 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -118,15 +118,11 @@ def _gen_lammps_input( if ens == "nvt": ret += "fix 1 all nvt temp ${TEMP} ${TEMP} ${TAU_T}\n" elif ens == "npt-iso" or ens == "npt": - ret += ( - "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" - ) + ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-aniso": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-tri": - ret += ( - "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" - ) + ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-xy": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P} couple xy\n" elif ens == "nve": @@ -165,7 +161,9 @@ def make_tasks(iter_name, jdata, if_meam=None): timestep = get_first_matched_key_from_dict(jdata, ["timestep", "dt"]) # thermo_freq = jdata['thermo_freq'] thermo_freq = get_first_matched_key_from_dict(jdata, ["thermo_freq", "stat_freq"]) - dump_freq = get_first_matched_key_from_dict(jdata, ["dump_freq", "thermo_freq", "stat_freq"]) + dump_freq = get_first_matched_key_from_dict( + jdata, ["dump_freq", "thermo_freq", "stat_freq"] + ) # thermos = jdata['thermos'] ens = jdata["ens"] path = jdata["path"] @@ -373,7 +371,9 @@ def _print_thermo_info(info, more_head=""): print(ptr) -def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None): +def _thermo_inte( + jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None +): path = jdata["path"] ens = jdata["ens"] all_temps = [] @@ -408,7 +408,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", # return np.asarray(all_temps), np.asarray(all_press), np.asarray(all_fe), np.asarray(all_fe_err), np.asarray(all_fe_sys_err) - all_t, inte, inte_e, stat_e = integrate_range(all_t, integrand, integrand_err, scheme) + all_t, inte, inte_e, stat_e = integrate_range( + all_t, integrand, integrand_err, scheme + ) for ii in range(0, len(all_t)): diff_e = inte[ii] err = stat_e[ii] @@ -422,7 +424,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", sys_err *= all_t[ii] all_temps.append(all_t[ii]) if "npt" in ens: - all_press.append(get_first_matched_key_from_dict(jdata, ["pres", "press"])) + all_press.append( + get_first_matched_key_from_dict(jdata, ["pres", "press"]) + ) elif path == "p": e1 = Eo + diff_e err = np.sqrt(np.square(Eo_err) + np.square(err)) @@ -440,7 +444,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", ) -def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0): +def post_tasks( + iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0 +): equi_conf = get_task_file_abspath(iter_name, jdata["equi_conf"]) if natoms is None: natoms = get_natoms(equi_conf) @@ -549,7 +555,9 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim header="t/p Integrand U/V U/V_err enthalpy msd_xyz", ) - info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) + info0 = _compute_thermo( + os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize + ) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -578,14 +586,18 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim all_fe_1, all_fe_err_1, all_fe_sys_err_1, - ) = _thermo_inte(jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme) + ) = _thermo_inte( + jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme + ) ( all_temps_2, all_press_2, all_fe_2, all_fe_err_2, all_fe_sys_err_2, - ) = _thermo_inte(jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme) + ) = _thermo_inte( + jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme + ) all_temps_1 = np.flip(all_temps_1, 0) all_press_1 = np.flip(all_press_1, 0) all_fe_1 = np.flip(all_fe_1, 0) @@ -613,7 +625,9 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim # result_file = open(f"{iter_name}/../result", 'w') if "nvt" == ens: print(f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}") - result += f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" + result += ( + f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" + ) for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}" @@ -623,9 +637,7 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim print( f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}" ) - result += ( - f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" - ) + result += f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}" @@ -726,7 +738,9 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): ukn = np.concatenate((ukn, block_u), axis=1) nk = np.array(nk) - info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) + info0 = _compute_thermo( + os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize + ) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -772,7 +786,9 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" ) elif "npt" in ens: - print(f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}") + print( + f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}" + ) for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" @@ -794,7 +810,9 @@ def refine_task(from_task, to_task, err): from_ti = os.path.join(from_task, "ti.out") if not os.path.isfile(from_ti): - raise RuntimeError(f"cannot find file {from_ti}, task should be computed befor refined") + raise RuntimeError( + f"cannot find file {from_ti}, task should be computed befor refined" + ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] integrand = tmp_array[:, 1] @@ -924,7 +942,9 @@ def add_module_subparsers(main_subparsers): ) parser_gen.set_defaults(func=handle_gen) - parser_compute = module_subparsers.add_parser("compute", help="Compute the result of a job") + parser_compute = module_subparsers.add_parser( + "compute", help="Compute the result of a job" + ) parser_compute.add_argument("JOB", type=str, help="folder of the job") parser_compute.add_argument( "-m", @@ -963,9 +983,15 @@ def add_module_subparsers(main_subparsers): ) parser_compute.set_defaults(func=handle_compute) - parser_refine = module_subparsers.add_parser("refine", help="Refine the grid of a job") - parser_refine.add_argument("-i", "--input", type=str, required=True, help="input job") - parser_refine.add_argument("-o", "--output", type=str, required=True, help="output job") + parser_refine = module_subparsers.add_parser( + "refine", help="Refine the grid of a job" + ) + parser_refine.add_argument( + "-i", "--input", type=str, required=True, help="input job" + ) + parser_refine.add_argument( + "-o", "--output", type=str, required=True, help="output job" + ) parser_refine.add_argument( "-e", "--error", type=float, required=True, help="the error required" ) @@ -1005,7 +1031,9 @@ def handle_compute(args): raise ValueError("Cannot find temperature in hti's input json file") elif path == "p": try: - args.To = get_first_matched_key_from_dict(jdata_hti_in, ["pres", "press"]) + args.To = get_first_matched_key_from_dict( + jdata_hti_in, ["pres", "press"] + ) except KeyError: args.To = None if args.To is None: From ae6d27207ddd417a232c369acce13b25af04aa79 Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 18:34:28 +0900 Subject: [PATCH 3/9] Update dpti/ti.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- dpti/ti.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpti/ti.py b/dpti/ti.py index 5be88395..41b712bc 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -83,7 +83,7 @@ def _gen_lammps_input( ret += "box tilt large\n" ret += f"read_data {conf_file}\n" if copies is not None: - ret += f"replicate {int(copies[0])} {int(copies[1])} {int(copies[2])}\n" + ret += f"replicate {copies[0]:d} {copies[1]:d} {copies[2]:d}\n" ret += "change_box all triclinic\n" for jj in range(len(mass_map)): ret += f"mass {jj + 1} {mass_map[jj]:f}\n" From 1da39e54ffc123c798c695f81ea1a7d6171cf682 Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 18:40:01 +0900 Subject: [PATCH 4/9] Update ti.py --- dpti/ti.py | 88 ++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 59 deletions(-) diff --git a/dpti/ti.py b/dpti/ti.py index 41b712bc..5f2b385e 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -65,9 +65,9 @@ def _gen_lammps_input( ret = "" ret += "clear\n" ret += "# --------------------- VARIABLES-------------------------\n" - ret += f"variable NSTEPS equal {int(nsteps)}\n" - ret += f"variable THERMO_FREQ equal {int(thermo_freq)}\n" - ret += f"variable DUMP_FREQ equal {int(dump_freq)}\n" + ret += f"variable NSTEPS equal {nsteps:d}\n" + ret += f"variable THERMO_FREQ equal {thermo_freq:d}\n" + ret += f"variable DUMP_FREQ equal {dump_freq:d}\n" ret += f"variable TEMP equal {temp:f}\n" ret += f"variable PRES equal {pres:f}\n" ret += f"variable TAU_T equal {tau_t:f}\n" @@ -118,11 +118,15 @@ def _gen_lammps_input( if ens == "nvt": ret += "fix 1 all nvt temp ${TEMP} ${TEMP} ${TAU_T}\n" elif ens == "npt-iso" or ens == "npt": - ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" + ret += ( + "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" + ) elif ens == "npt-aniso": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-tri": - ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" + ret += ( + "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" + ) elif ens == "npt-xy": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P} couple xy\n" elif ens == "nve": @@ -161,9 +165,7 @@ def make_tasks(iter_name, jdata, if_meam=None): timestep = get_first_matched_key_from_dict(jdata, ["timestep", "dt"]) # thermo_freq = jdata['thermo_freq'] thermo_freq = get_first_matched_key_from_dict(jdata, ["thermo_freq", "stat_freq"]) - dump_freq = get_first_matched_key_from_dict( - jdata, ["dump_freq", "thermo_freq", "stat_freq"] - ) + dump_freq = get_first_matched_key_from_dict(jdata, ["dump_freq", "thermo_freq", "stat_freq"]) # thermos = jdata['thermos'] ens = jdata["ens"] path = jdata["path"] @@ -371,9 +373,7 @@ def _print_thermo_info(info, more_head=""): print(ptr) -def _thermo_inte( - jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None -): +def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None): path = jdata["path"] ens = jdata["ens"] all_temps = [] @@ -408,9 +408,7 @@ def _thermo_inte( # return np.asarray(all_temps), np.asarray(all_press), np.asarray(all_fe), np.asarray(all_fe_err), np.asarray(all_fe_sys_err) - all_t, inte, inte_e, stat_e = integrate_range( - all_t, integrand, integrand_err, scheme - ) + all_t, inte, inte_e, stat_e = integrate_range(all_t, integrand, integrand_err, scheme) for ii in range(0, len(all_t)): diff_e = inte[ii] err = stat_e[ii] @@ -424,9 +422,7 @@ def _thermo_inte( sys_err *= all_t[ii] all_temps.append(all_t[ii]) if "npt" in ens: - all_press.append( - get_first_matched_key_from_dict(jdata, ["pres", "press"]) - ) + all_press.append(get_first_matched_key_from_dict(jdata, ["pres", "press"])) elif path == "p": e1 = Eo + diff_e err = np.sqrt(np.square(Eo_err) + np.square(err)) @@ -444,9 +440,7 @@ def _thermo_inte( ) -def post_tasks( - iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0 -): +def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0): equi_conf = get_task_file_abspath(iter_name, jdata["equi_conf"]) if natoms is None: natoms = get_natoms(equi_conf) @@ -555,9 +549,7 @@ def post_tasks( header="t/p Integrand U/V U/V_err enthalpy msd_xyz", ) - info0 = _compute_thermo( - os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize - ) + info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -586,18 +578,14 @@ def post_tasks( all_fe_1, all_fe_err_1, all_fe_sys_err_1, - ) = _thermo_inte( - jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme - ) + ) = _thermo_inte(jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme) ( all_temps_2, all_press_2, all_fe_2, all_fe_err_2, all_fe_sys_err_2, - ) = _thermo_inte( - jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme - ) + ) = _thermo_inte(jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme) all_temps_1 = np.flip(all_temps_1, 0) all_press_1 = np.flip(all_press_1, 0) all_fe_1 = np.flip(all_fe_1, 0) @@ -624,10 +612,8 @@ def post_tasks( result = "" # result_file = open(f"{iter_name}/../result", 'w') if "nvt" == ens: - print(f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}") - result += ( - f"#{'T(ctrl)':8} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" - ) + print(f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}") + result += f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}\n" for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}" @@ -635,9 +621,9 @@ def post_tasks( result += f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}\n" elif "npt" in ens: print( - f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}" + f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}" ) - result += f"#{'T(ctrl)':8} {'P(ctrl)':15} {'F':20} {'stat_err':9} {'inte_err':9} {'err':9}\n" + result += f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}\n" for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e} {np.linalg.norm([all_fe_err[ii], all_fe_sys_err[ii]]):9.2e}" @@ -738,9 +724,7 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): ukn = np.concatenate((ukn, block_u), axis=1) nk = np.array(nk) - info0 = _compute_thermo( - os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize - ) + info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -786,9 +770,7 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" ) elif "npt" in ens: - print( - f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}" - ) + print(f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}") for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" @@ -810,9 +792,7 @@ def refine_task(from_task, to_task, err): from_ti = os.path.join(from_task, "ti.out") if not os.path.isfile(from_ti): - raise RuntimeError( - f"cannot find file {from_ti}, task should be computed befor refined" - ) + raise RuntimeError(f"cannot find file {from_ti}, task should be computed befor refined") tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] integrand = tmp_array[:, 1] @@ -942,9 +922,7 @@ def add_module_subparsers(main_subparsers): ) parser_gen.set_defaults(func=handle_gen) - parser_compute = module_subparsers.add_parser( - "compute", help="Compute the result of a job" - ) + parser_compute = module_subparsers.add_parser("compute", help="Compute the result of a job") parser_compute.add_argument("JOB", type=str, help="folder of the job") parser_compute.add_argument( "-m", @@ -983,15 +961,9 @@ def add_module_subparsers(main_subparsers): ) parser_compute.set_defaults(func=handle_compute) - parser_refine = module_subparsers.add_parser( - "refine", help="Refine the grid of a job" - ) - parser_refine.add_argument( - "-i", "--input", type=str, required=True, help="input job" - ) - parser_refine.add_argument( - "-o", "--output", type=str, required=True, help="output job" - ) + parser_refine = module_subparsers.add_parser("refine", help="Refine the grid of a job") + parser_refine.add_argument("-i", "--input", type=str, required=True, help="input job") + parser_refine.add_argument("-o", "--output", type=str, required=True, help="output job") parser_refine.add_argument( "-e", "--error", type=float, required=True, help="the error required" ) @@ -1031,9 +1003,7 @@ def handle_compute(args): raise ValueError("Cannot find temperature in hti's input json file") elif path == "p": try: - args.To = get_first_matched_key_from_dict( - jdata_hti_in, ["pres", "press"] - ) + args.To = get_first_matched_key_from_dict(jdata_hti_in, ["pres", "press"]) except KeyError: args.To = None if args.To is None: From 6d71f0aa3913ebcf2e69aa2bcfe5a626526d28ee Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:41:48 +0000 Subject: [PATCH 5/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dpti/ti.py | 76 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/dpti/ti.py b/dpti/ti.py index 5f2b385e..18337b9e 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -118,15 +118,11 @@ def _gen_lammps_input( if ens == "nvt": ret += "fix 1 all nvt temp ${TEMP} ${TEMP} ${TAU_T}\n" elif ens == "npt-iso" or ens == "npt": - ret += ( - "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" - ) + ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} iso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-aniso": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-tri": - ret += ( - "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" - ) + ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} tri ${PRES} ${PRES} ${TAU_P}\n" elif ens == "npt-xy": ret += "fix 1 all npt temp ${TEMP} ${TEMP} ${TAU_T} aniso ${PRES} ${PRES} ${TAU_P} couple xy\n" elif ens == "nve": @@ -165,7 +161,9 @@ def make_tasks(iter_name, jdata, if_meam=None): timestep = get_first_matched_key_from_dict(jdata, ["timestep", "dt"]) # thermo_freq = jdata['thermo_freq'] thermo_freq = get_first_matched_key_from_dict(jdata, ["thermo_freq", "stat_freq"]) - dump_freq = get_first_matched_key_from_dict(jdata, ["dump_freq", "thermo_freq", "stat_freq"]) + dump_freq = get_first_matched_key_from_dict( + jdata, ["dump_freq", "thermo_freq", "stat_freq"] + ) # thermos = jdata['thermos'] ens = jdata["ens"] path = jdata["path"] @@ -373,7 +371,9 @@ def _print_thermo_info(info, more_head=""): print(ptr) -def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None): +def _thermo_inte( + jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", all_e=None +): path = jdata["path"] ens = jdata["ens"] all_temps = [] @@ -408,7 +408,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", # return np.asarray(all_temps), np.asarray(all_press), np.asarray(all_fe), np.asarray(all_fe_err), np.asarray(all_fe_sys_err) - all_t, inte, inte_e, stat_e = integrate_range(all_t, integrand, integrand_err, scheme) + all_t, inte, inte_e, stat_e = integrate_range( + all_t, integrand, integrand_err, scheme + ) for ii in range(0, len(all_t)): diff_e = inte[ii] err = stat_e[ii] @@ -422,7 +424,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", sys_err *= all_t[ii] all_temps.append(all_t[ii]) if "npt" in ens: - all_press.append(get_first_matched_key_from_dict(jdata, ["pres", "press"])) + all_press.append( + get_first_matched_key_from_dict(jdata, ["pres", "press"]) + ) elif path == "p": e1 = Eo + diff_e err = np.sqrt(np.square(Eo_err) + np.square(err)) @@ -440,7 +444,9 @@ def _thermo_inte(jdata, Eo, Eo_err, all_t, integrand, integrand_err, scheme="s", ) -def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0): +def post_tasks( + iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="simpson", shift=0.0 +): equi_conf = get_task_file_abspath(iter_name, jdata["equi_conf"]) if natoms is None: natoms = get_natoms(equi_conf) @@ -549,7 +555,9 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim header="t/p Integrand U/V U/V_err enthalpy msd_xyz", ) - info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) + info0 = _compute_thermo( + os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize + ) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -578,14 +586,18 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim all_fe_1, all_fe_err_1, all_fe_sys_err_1, - ) = _thermo_inte(jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme) + ) = _thermo_inte( + jdata, Eo, Eo_err, all_t_1, integrand_1, integrand_err_1, scheme=scheme + ) ( all_temps_2, all_press_2, all_fe_2, all_fe_err_2, all_fe_sys_err_2, - ) = _thermo_inte(jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme) + ) = _thermo_inte( + jdata, Eo, Eo_err, all_t_2, integrand_2, integrand_err_2, scheme=scheme + ) all_temps_1 = np.flip(all_temps_1, 0) all_press_1 = np.flip(all_press_1, 0) all_fe_1 = np.flip(all_fe_1, 0) @@ -612,7 +624,9 @@ def post_tasks(iter_name, jdata, Eo, Eo_err=0, To=None, natoms=None, scheme="sim result = "" # result_file = open(f"{iter_name}/../result", 'w') if "nvt" == ens: - print(f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}") + print( + f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}" + ) result += f"#{'T(ctrl)':>8} {'F':>20} {'stat_err':>9} {'inte_err':>9} {'err':>9}\n" for ii in range(len(all_temps)): print( @@ -724,7 +738,9 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): ukn = np.concatenate((ukn, block_u), axis=1) nk = np.array(nk) - info0 = _compute_thermo(os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize) + info0 = _compute_thermo( + os.path.join(all_tasks[0], "log.lammps"), natoms, stat_skip, stat_bsize + ) info1 = _compute_thermo( os.path.join(all_tasks[-1], "log.lammps"), natoms, stat_skip, stat_bsize ) @@ -770,7 +786,9 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): f"{all_temps[ii]:9.2f} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" ) elif "npt" in ens: - print(f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}") + print( + f"#{'T(ctrl)':>8} {'P(ctrl)':>15} {'F':>15} {'stat_err':>9} {'inte_err':>9}" + ) for ii in range(len(all_temps)): print( f"{all_temps[ii]:9.2f} {all_press[ii]:15.8e} {all_fe[ii]:20.12f} {all_fe_err[ii]:9.2e} {all_fe_sys_err[ii]:9.2e}" @@ -792,7 +810,9 @@ def refine_task(from_task, to_task, err): from_ti = os.path.join(from_task, "ti.out") if not os.path.isfile(from_ti): - raise RuntimeError(f"cannot find file {from_ti}, task should be computed befor refined") + raise RuntimeError( + f"cannot find file {from_ti}, task should be computed befor refined" + ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] integrand = tmp_array[:, 1] @@ -922,7 +942,9 @@ def add_module_subparsers(main_subparsers): ) parser_gen.set_defaults(func=handle_gen) - parser_compute = module_subparsers.add_parser("compute", help="Compute the result of a job") + parser_compute = module_subparsers.add_parser( + "compute", help="Compute the result of a job" + ) parser_compute.add_argument("JOB", type=str, help="folder of the job") parser_compute.add_argument( "-m", @@ -961,9 +983,15 @@ def add_module_subparsers(main_subparsers): ) parser_compute.set_defaults(func=handle_compute) - parser_refine = module_subparsers.add_parser("refine", help="Refine the grid of a job") - parser_refine.add_argument("-i", "--input", type=str, required=True, help="input job") - parser_refine.add_argument("-o", "--output", type=str, required=True, help="output job") + parser_refine = module_subparsers.add_parser( + "refine", help="Refine the grid of a job" + ) + parser_refine.add_argument( + "-i", "--input", type=str, required=True, help="input job" + ) + parser_refine.add_argument( + "-o", "--output", type=str, required=True, help="output job" + ) parser_refine.add_argument( "-e", "--error", type=float, required=True, help="the error required" ) @@ -1003,7 +1031,9 @@ def handle_compute(args): raise ValueError("Cannot find temperature in hti's input json file") elif path == "p": try: - args.To = get_first_matched_key_from_dict(jdata_hti_in, ["pres", "press"]) + args.To = get_first_matched_key_from_dict( + jdata_hti_in, ["pres", "press"] + ) except KeyError: args.To = None if args.To is None: From 7bb4d6df4d366cffeadbc9657d14700a0eb37887 Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 22:18:35 +0900 Subject: [PATCH 6/9] Refactor string formatting and fix typo in dpti modules Updated dpti/relax.py to use f-strings for variable assignments and mass mapping for improved readability. Removed unused ntasks variable in dpti/ti.py and fixed a typo in an error message ('befor' to 'before'). --- dpti/relax.py | 6 +++--- dpti/ti.py | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/dpti/relax.py b/dpti/relax.py index ec01c8bf..2a89a734 100755 --- a/dpti/relax.py +++ b/dpti/relax.py @@ -12,8 +12,8 @@ def _gen_lammps_relax(conf_file, mass_map, model, pres, thermo_freq=100, dump_fr ret = "" ret += "clear\n" ret += "# --------------------- VARIABLES-------------------------\n" - ret += "variable THERMO_FREQ equal %d\n" % thermo_freq - ret += "variable DUMP_FREQ equal %d\n" % dump_freq + ret += f"variable THERMO_FREQ equal {thermo_freq}\n" + ret += f"variable DUMP_FREQ equal {dump_freq}\n" ret += f"variable PRES equal {pres:f}\n" ret += "# ---------------------- INITIALIZAITION ------------------\n" ret += "units metal\n" @@ -24,7 +24,7 @@ def _gen_lammps_relax(conf_file, mass_map, model, pres, thermo_freq=100, dump_fr ret += f"read_data {conf_file}\n" ret += "change_box all triclinic\n" for jj in range(len(mass_map)): - ret += "mass %d %f\n" % (jj + 1, mass_map[jj]) + ret += f"mass {jj + 1} {mass_map[jj]:f}\n" ret += "# --------------------- FORCE FIELDS ---------------------\n" ret += f"pair_style deepmd {model}\n" ret += "pair_coeff * *\n" diff --git a/dpti/ti.py b/dpti/ti.py index 18337b9e..cd8e19ba 100755 --- a/dpti/ti.py +++ b/dpti/ti.py @@ -463,7 +463,6 @@ def post_tasks( all_tasks = glob.glob(os.path.join(iter_name, "task.[0-9]*")) all_tasks.sort() - ntasks = len(all_tasks) all_t = [] all_e = [] @@ -680,7 +679,6 @@ def post_tasks_mbar(iter_name, jdata, Eo, natoms=None): all_tasks = glob.glob(os.path.join(iter_name, "task.[0-9]*")) all_tasks.sort() - ntasks = len(all_tasks) if "nvt" in ens and path == "t": # TotEng @@ -811,7 +809,7 @@ def refine_task(from_task, to_task, err): from_ti = os.path.join(from_task, "ti.out") if not os.path.isfile(from_ti): raise RuntimeError( - f"cannot find file {from_ti}, task should be computed befor refined" + f"cannot find file {from_ti}, task should be computed before refined" ) tmp_array = np.loadtxt(from_ti) all_t = tmp_array[:, 0] From 638215ab2f9b106f26e585493654bee031bb0881 Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 23:53:10 +0900 Subject: [PATCH 7/9] Update mti.py --- dpti/mti.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/dpti/mti.py b/dpti/mti.py index 7570a2b4..cb506d14 100644 --- a/dpti/mti.py +++ b/dpti/mti.py @@ -50,10 +50,10 @@ def _gen_lammps_input( ret = "" ret += "clear\n" ret += "# --------------------- VARIABLES-------------------------\n" - ret += "variable ibead uloop %d pad\n" % (power - 1) - ret += "variable NSTEPS equal %d\n" % nsteps - ret += "variable THERMO_FREQ equal %d\n" % thermo_freq - ret += "variable DUMP_FREQ equal %d\n" % dump_freq + ret += f"variable ibead uloop {power - 1} pad\n" + ret += f"variable NSTEPS equal {nsteps:d}\n" + ret += f"variable THERMO_FREQ equal {thermo_freq:d}\n" + ret += f"variable DUMP_FREQ equal {dump_freq:d}\n" ret += f"variable TEMP equal {temp:f}\n" ret += f"variable PRES equal {pres:f}\n" ret += f"variable TAU_T equal {tau_t:f}\n" @@ -67,9 +67,9 @@ def _gen_lammps_input( ret += "box tilt large\n" ret += f'if "${{restart}} > 0" then "read_restart ${{ibead}}.restart.*" else "read_data {conf_file}"\n' if copies is not None: - ret += "replicate %d %d %d\n" % (copies[0], copies[1], copies[2]) + ret += f"replicate {copies[0]} {copies[1]} {copies[2]}\n" for jj in range(len(mass_map)): - ret += "mass %d %f\n" % (jj + 1, mass_map[jj] * mass_scale) + ret += f"mass {jj + 1} {mass_map[jj] * mass_scale:f}\n" ret += "# --------------------- FORCE FIELDS ---------------------\n" if model is not None: ret += f"pair_style deepmd {model}\n" @@ -165,9 +165,9 @@ def make_tasks(iter_name, jdata): raise RuntimeError("invalid ens") job_type = jdata["job_type"] - assert ( - job_type == "nbead_convergence" or job_type == "mass_ti" - ), "Unknow job_type. Only nbead_convergence and mass_ti are supported." + assert job_type == "nbead_convergence" or job_type == "mass_ti", ( + "Unknow job_type. Only nbead_convergence and mass_ti are supported." + ) mass_scale_y_seq = get_first_matched_key_from_dict(jdata, ["mass_scale_y"]) mass_scale_y_list = parse_seq(mass_scale_y_seq) mass_scales = (1.0 / np.array(mass_scale_y_list)) ** 2 @@ -176,13 +176,13 @@ def make_tasks(iter_name, jdata): nnode_seq = jdata.get("nnode", None) if nnode_seq is not None: nnode_list = parse_seq(nnode_seq) - assert ( - len(nbead_list) == len(nnode_list) - ), "Lists nbead and nnode should have same length. Please specify one nnode for each nbead." + assert len(nbead_list) == len(nnode_list), ( + "Lists nbead and nnode should have same length. Please specify one nnode for each nbead." + ) if job_type == "mass_ti": - assert ( - len(mass_scale_y_list) == len(nbead_list) - ), "For mass TI tasks, you must provide one value of nbead for each value of mass_scale_y." + assert len(mass_scale_y_list) == len(nbead_list), ( + "For mass TI tasks, you must provide one value of nbead for each value of mass_scale_y." + ) job_abs_dir = create_path(iter_name) ti_settings["equi_conf"] = relative_link_file(equi_conf, job_abs_dir) @@ -194,7 +194,7 @@ def make_tasks(iter_name, jdata): json.dump(ti_settings, f, indent=4) for ii in range(ntasks): - task_dir = os.path.join(job_abs_dir, "task.%06d" % ii) + task_dir = os.path.join(job_abs_dir, f"task.{ii:06d}") task_abs_dir = create_path(task_dir) settings = {} if path == "t": @@ -207,12 +207,12 @@ def make_tasks(iter_name, jdata): settings["pres"] = pres if job_type == "nbead_convergence": for jj in range(len(mass_scale_y_list)): - mass_scale_y_dir = os.path.join(task_abs_dir, "mass_scale_y.%06d" % jj) + mass_scale_y_dir = os.path.join(task_abs_dir, f"mass_scale_y.{jj:06d}") mass_scale_y_abs_dir = create_path(mass_scale_y_dir) settings["mass_scale_y"] = mass_scale_y_list[jj] settings["mass_scale"] = mass_scales[jj] for kk in range(len(nbead_list)): - nbead_dir = os.path.join(mass_scale_y_abs_dir, "nbead.%06d" % kk) + nbead_dir = os.path.join(mass_scale_y_abs_dir, f"nbead.{kk:06d}") nbead_abs_dir = create_path(nbead_dir) settings["nbead"] = nbead_list[kk] if nnode_seq is not None: @@ -263,7 +263,7 @@ def make_tasks(iter_name, jdata): json.dump(settings, f, indent=4) elif job_type == "mass_ti": for jj in range(len(mass_scale_y_list)): - mass_scale_y_dir = os.path.join(task_abs_dir, "mass_scale_y.%06d" % jj) + mass_scale_y_dir = os.path.join(task_abs_dir, f"mass_scale_y.{jj:06d}") mass_scale_y_abs_dir = create_path(mass_scale_y_dir) settings["mass_scale_y"] = mass_scale_y_list[jj] settings["mass_scale"] = mass_scales[jj] From 198b518e1a03305feed03b7a745acbcbefcc48b8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:53:23 +0000 Subject: [PATCH 8/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dpti/mti.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dpti/mti.py b/dpti/mti.py index cb506d14..659b1f8d 100644 --- a/dpti/mti.py +++ b/dpti/mti.py @@ -165,9 +165,9 @@ def make_tasks(iter_name, jdata): raise RuntimeError("invalid ens") job_type = jdata["job_type"] - assert job_type == "nbead_convergence" or job_type == "mass_ti", ( - "Unknow job_type. Only nbead_convergence and mass_ti are supported." - ) + assert ( + job_type == "nbead_convergence" or job_type == "mass_ti" + ), "Unknow job_type. Only nbead_convergence and mass_ti are supported." mass_scale_y_seq = get_first_matched_key_from_dict(jdata, ["mass_scale_y"]) mass_scale_y_list = parse_seq(mass_scale_y_seq) mass_scales = (1.0 / np.array(mass_scale_y_list)) ** 2 @@ -176,13 +176,13 @@ def make_tasks(iter_name, jdata): nnode_seq = jdata.get("nnode", None) if nnode_seq is not None: nnode_list = parse_seq(nnode_seq) - assert len(nbead_list) == len(nnode_list), ( - "Lists nbead and nnode should have same length. Please specify one nnode for each nbead." - ) + assert ( + len(nbead_list) == len(nnode_list) + ), "Lists nbead and nnode should have same length. Please specify one nnode for each nbead." if job_type == "mass_ti": - assert len(mass_scale_y_list) == len(nbead_list), ( - "For mass TI tasks, you must provide one value of nbead for each value of mass_scale_y." - ) + assert ( + len(mass_scale_y_list) == len(nbead_list) + ), "For mass TI tasks, you must provide one value of nbead for each value of mass_scale_y." job_abs_dir = create_path(iter_name) ti_settings["equi_conf"] = relative_link_file(equi_conf, job_abs_dir) From 786cda3f26cc8b8520ea8b7b9b3bc78ef58c0c60 Mon Sep 17 00:00:00 2001 From: "C. Thang Nguyen" Date: Thu, 11 Dec 2025 23:57:49 +0900 Subject: [PATCH 9/9] Update mti.py --- dpti/mti.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dpti/mti.py b/dpti/mti.py index cb506d14..4f604819 100644 --- a/dpti/mti.py +++ b/dpti/mti.py @@ -50,7 +50,7 @@ def _gen_lammps_input( ret = "" ret += "clear\n" ret += "# --------------------- VARIABLES-------------------------\n" - ret += f"variable ibead uloop {power - 1} pad\n" + ret += f"variable ibead uloop {(power - 1):d} pad\n" ret += f"variable NSTEPS equal {nsteps:d}\n" ret += f"variable THERMO_FREQ equal {thermo_freq:d}\n" ret += f"variable DUMP_FREQ equal {dump_freq:d}\n" @@ -69,7 +69,7 @@ def _gen_lammps_input( if copies is not None: ret += f"replicate {copies[0]} {copies[1]} {copies[2]}\n" for jj in range(len(mass_map)): - ret += f"mass {jj + 1} {mass_map[jj] * mass_scale:f}\n" + ret += f"mass {jj + 1} {(mass_map[jj] * mass_scale):f}\n" ret += "# --------------------- FORCE FIELDS ---------------------\n" if model is not None: ret += f"pair_style deepmd {model}\n"