From 4dfcccdf6af47d9529b78da5d70030737a07b394 Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Tue, 26 May 2026 22:36:56 +0800 Subject: [PATCH 1/4] test(universal): replace Cartesian product with curated matrices for descriptor tests --- .../dpmodel/atomc_model/test_atomic_model.py | 148 +++++------ .../dpmodel/descriptor/test_descriptor.py | 242 +++++++++++++++++ .../universal/dpmodel/model/test_model.py | 101 ++++--- .../pt/atomc_model/test_atomic_model.py | 151 +++++------ source/tests/universal/pt/model/test_model.py | 246 ++++++++---------- 5 files changed, 524 insertions(+), 364 deletions(-) diff --git a/source/tests/universal/dpmodel/atomc_model/test_atomic_model.py b/source/tests/universal/dpmodel/atomc_model/test_atomic_model.py index 7aa94e33ee..9ebb7bce2b 100644 --- a/source/tests/universal/dpmodel/atomc_model/test_atomic_model.py +++ b/source/tests/universal/dpmodel/atomc_model/test_atomic_model.py @@ -41,18 +41,18 @@ ) from ...dpmodel.descriptor.test_descriptor import ( DescriptorParamDPA1, - DescriptorParamDPA1List, + DescriptorParamDPA1EnergyModelList, DescriptorParamDPA2, - DescriptorParamDPA2List, + DescriptorParamDPA2EnergyModelList, DescriptorParamHybrid, DescriptorParamHybridMixed, DescriptorParamHybridMixedTTebd, DescriptorParamSeA, - DescriptorParamSeAList, + DescriptorParamSeAEnergyModelList, DescriptorParamSeR, - DescriptorParamSeRList, + DescriptorParamSeREnergyModelList, DescriptorParamSeT, - DescriptorParamSeTList, + DescriptorParamSeTEnergyModelList, ) from ...dpmodel.model.test_model import ( skip_model_tests, @@ -81,29 +81,64 @@ def make_sel_type_from_atom_exclude_types(type_map, atom_exclude_types): return sel_type.tolist() +ENERGY_DESCRIPTOR_PARAMS = ( + *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAEnergyModelList], + *[(param_func, DescrptSeR) for param_func in DescriptorParamSeREnergyModelList], + *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTEnergyModelList], + *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1EnergyModelList], + *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2EnergyModelList], + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_VEC_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS = ( + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DPA12_DESCRIPTOR_PARAMS, + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + + @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + ENERGY_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ([], [0]), # atom_exclude_types ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -158,27 +193,12 @@ def test_sel_type_from_atom_exclude_types(self): @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDos, DOSFittingNet),), # fitting_class_param & class ([], [0]), # atom_exclude_types ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DOSFittingNet) for param_func in FittingParamDosList], ), # fitting_class_param & class @@ -233,22 +253,12 @@ def test_sel_type_from_atom_exclude_types(self): @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDipole, DipoleFitting),), # fitting_class_param & class ([], [0]), # atom_exclude_types ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DipoleFitting) for param_func in FittingParamDipoleList], ), # fitting_class_param & class @@ -304,22 +314,12 @@ def test_sel_type_from_atom_exclude_types(self): @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamPolar, PolarFitting),), # fitting_class_param & class ([], [0]), # atom_exclude_types ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, PolarFitting) for param_func in FittingParamPolarList], ), # fitting_class_param & class @@ -375,19 +375,11 @@ def test_sel_type_from_atom_exclude_types(self): @parameterized( des_parameterized=( - ( - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -449,9 +441,7 @@ def setUpClass(cls) -> None: @parameterized( des_parameterized=( ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], + *DEFAULT_VEC_DESCRIPTOR_PARAMS, (DescriptorParamHybridMixed, DescrptHybrid), (DescriptorParamHybridMixedTTebd, DescrptHybrid), ), # descrpt_class_param & class @@ -459,11 +449,7 @@ def setUpClass(cls) -> None: ([], [0]), # atom_exclude_types ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[ (param_func, PropertyFittingNet) diff --git a/source/tests/universal/dpmodel/descriptor/test_descriptor.py b/source/tests/universal/dpmodel/descriptor/test_descriptor.py index 010cf4dcd6..038b7f641c 100644 --- a/source/tests/universal/dpmodel/descriptor/test_descriptor.py +++ b/source/tests/universal/dpmodel/descriptor/test_descriptor.py @@ -3,6 +3,9 @@ from collections import ( OrderedDict, ) +from typing import ( + Any, +) from deepmd.dpmodel.descriptor import ( DescrptDPA1, @@ -587,6 +590,245 @@ def DescriptorParamDPA3DefaultChgSpin(ntypes, rcut, rcut_smth, sel, type_map, ** DescriptorParamDPA3 = DescriptorParamDPA3List[0] +def _descriptor_param_variant(param_func, name: str, **fixed_kwargs: Any): + def wrapper(*args, **kwargs): + return param_func(*args, **{**fixed_kwargs, **kwargs}) + + wrapper.__name__ = name + wrapper.__qualname__ = name + return wrapper + + +# Curated descriptor variants for model/atomic-model integration tests. The +# descriptor tests above still cover the full parameter matrices; model-level +# tests only need representative toggles to avoid a Cartesian-product blow-up. +DescriptorParamSeAEnergyModelList = ( + # Baseline coverage. + DescriptorParamSeA, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamSeA, "DescriptorParamSeA_resnet_dt", resnet_dt=True + ), + _descriptor_param_variant( + DescriptorParamSeA, "DescriptorParamSeA_type_two_sides", type_one_side=False + ), + _descriptor_param_variant( + DescriptorParamSeA, "DescriptorParamSeA_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamSeA, "DescriptorParamSeA_env_protection", env_protection=1e-2 + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamSeA, + "DescriptorParamSeA_mixed_high_risk", + resnet_dt=True, + type_one_side=False, + exclude_types=[[0, 1]], + env_protection=1e-2, + ), +) + +DescriptorParamSeREnergyModelList = ( + # Baseline coverage. + DescriptorParamSeR, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamSeR, "DescriptorParamSeR_resnet_dt", resnet_dt=True + ), + _descriptor_param_variant( + DescriptorParamSeR, "DescriptorParamSeR_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamSeR, "DescriptorParamSeR_env_protection", env_protection=1e-8 + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamSeR, + "DescriptorParamSeR_mixed_high_risk", + resnet_dt=True, + exclude_types=[[0, 1]], + env_protection=1e-8, + ), +) + +DescriptorParamSeTEnergyModelList = ( + # Baseline coverage. + DescriptorParamSeT, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamSeT, "DescriptorParamSeT_resnet_dt", resnet_dt=True + ), + _descriptor_param_variant( + DescriptorParamSeT, "DescriptorParamSeT_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamSeT, "DescriptorParamSeT_env_protection", env_protection=1e-8 + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamSeT, + "DescriptorParamSeT_mixed_high_risk", + resnet_dt=True, + exclude_types=[[0, 1]], + env_protection=1e-8, + ), +) + +DescriptorParamSeTTebdEnergyModelList = ( + # Baseline coverage. + DescriptorParamSeTTebd, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamSeTTebd, + "DescriptorParamSeTTebd_strip", + tebd_input_mode="strip", + ), + _descriptor_param_variant( + DescriptorParamSeTTebd, + "DescriptorParamSeTTebd_exclude_types", + exclude_types=[[0, 1]], + ), + _descriptor_param_variant( + DescriptorParamSeTTebd, "DescriptorParamSeTTebd_no_smooth", smooth=False + ), + _descriptor_param_variant( + DescriptorParamSeTTebd, + "DescriptorParamSeTTebd_econf", + use_econf_tebd=True, + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamSeTTebd, + "DescriptorParamSeTTebd_mixed_high_risk", + tebd_input_mode="strip", + exclude_types=[[0, 1]], + smooth=False, + use_econf_tebd=True, + ), +) + +DescriptorParamDPA1EnergyModelList = ( + # Baseline coverage. + DescriptorParamDPA1, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamDPA1, "DescriptorParamDPA1_strip", tebd_input_mode="strip" + ), + _descriptor_param_variant( + DescriptorParamDPA1, "DescriptorParamDPA1_no_attention", attn_layer=0 + ), + _descriptor_param_variant( + DescriptorParamDPA1, "DescriptorParamDPA1_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamDPA1, "DescriptorParamDPA1_temperature", temperature=1.0 + ), + _descriptor_param_variant( + DescriptorParamDPA1, + "DescriptorParamDPA1_no_smooth_type_embedding", + smooth_type_embedding=False, + ), + _descriptor_param_variant( + DescriptorParamDPA1, "DescriptorParamDPA1_econf", use_econf_tebd=True + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamDPA1, + "DescriptorParamDPA1_mixed_high_risk", + tebd_input_mode="strip", + exclude_types=[[0, 1]], + temperature=1.0, + smooth_type_embedding=False, + use_econf_tebd=True, + ), +) + +DescriptorParamDPA2EnergyModelList = ( + # Baseline coverage. + DescriptorParamDPA2, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamDPA2, + "DescriptorParamDPA2_repinit_strip", + repinit_tebd_input_mode="strip", + ), + _descriptor_param_variant( + DescriptorParamDPA2, + "DescriptorParamDPA2_no_three_body", + repinit_use_three_body=False, + ), + _descriptor_param_variant( + DescriptorParamDPA2, + "DescriptorParamDPA2_residual_update", + repformer_update_style="res_residual", + ), + _descriptor_param_variant( + DescriptorParamDPA2, "DescriptorParamDPA2_no_smooth", smooth=False + ), + _descriptor_param_variant( + DescriptorParamDPA2, "DescriptorParamDPA2_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamDPA2, + "DescriptorParamDPA2_no_repinit_tebd_out", + add_tebd_to_repinit_out=False, + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamDPA2, + "DescriptorParamDPA2_mixed_high_risk", + repinit_tebd_input_mode="strip", + repinit_use_three_body=False, + repformer_update_style="res_residual", + smooth=False, + exclude_types=[[0, 1]], + add_tebd_to_repinit_out=False, + ), +) + +DescriptorParamDPA3EnergyModelList = ( + # Baseline coverage. + DescriptorParamDPA3, + # Single-option descriptor toggles. + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_exclude_types", exclude_types=[[0, 1]] + ), + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_no_optim_update", optim_update=False + ), + _descriptor_param_variant( + DescriptorParamDPA3, + "DescriptorParamDPA3_no_dist_edge_init", + edge_init_use_dist=False, + ), + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_no_exp_switch", use_exp_switch=False + ), + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_static_sel", use_dynamic_sel=False + ), + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_env_protection", env_protection=1e-8 + ), + _descriptor_param_variant( + DescriptorParamDPA3, "DescriptorParamDPA3_no_loc_mapping", use_loc_mapping=False + ), + # Mixed high-risk combination. + _descriptor_param_variant( + DescriptorParamDPA3, + "DescriptorParamDPA3_mixed_high_risk", + exclude_types=[[0, 1]], + optim_update=False, + edge_init_use_dist=False, + use_exp_switch=False, + use_dynamic_sel=False, + env_protection=1e-8, + use_loc_mapping=False, + ), +) + + def DescriptorParamHybrid(ntypes, rcut, rcut_smth, sel, type_map, **kwargs): ddsub0 = { "type": "se_e2_a", diff --git a/source/tests/universal/dpmodel/model/test_model.py b/source/tests/universal/dpmodel/model/test_model.py index 65ac116807..ece94a58ad 100644 --- a/source/tests/universal/dpmodel/model/test_model.py +++ b/source/tests/universal/dpmodel/model/test_model.py @@ -38,22 +38,22 @@ ) from ..descriptor.test_descriptor import ( DescriptorParamDPA1, - DescriptorParamDPA1List, + DescriptorParamDPA1EnergyModelList, DescriptorParamDPA2, - DescriptorParamDPA2List, + DescriptorParamDPA2EnergyModelList, DescriptorParamDPA3, - DescriptorParamDPA3List, + DescriptorParamDPA3EnergyModelList, DescriptorParamHybrid, DescriptorParamHybridMixed, DescriptorParamHybridMixedTTebd, DescriptorParamSeA, - DescriptorParamSeAList, + DescriptorParamSeAEnergyModelList, DescriptorParamSeR, - DescriptorParamSeRList, + DescriptorParamSeREnergyModelList, DescriptorParamSeT, - DescriptorParamSeTList, + DescriptorParamSeTEnergyModelList, DescriptorParamSeTTebd, - DescriptorParamSeTTebdList, + DescriptorParamSeTTebdEnergyModelList, ) from ..fitting.test_fitting import ( FittingParamEnergy, @@ -89,35 +89,47 @@ def skip_model_tests(test_obj): return False, None +ENERGY_DESCRIPTOR_PARAMS = ( + *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAEnergyModelList], + *[(param_func, DescrptSeR) for param_func in DescriptorParamSeREnergyModelList], + *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTEnergyModelList], + *[ + (param_func, DescrptSeTTebd) + for param_func in DescriptorParamSeTTebdEnergyModelList + ], + *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1EnergyModelList], + *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2EnergyModelList], + *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3EnergyModelList], + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamSeTTebd, DescrptSeTTebd), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), + (DescriptorParamDPA3, DescrptDPA3), +) + +SPIN_DESCRIPTOR_PARAMS = ( + *DEFAULT_DESCRIPTOR_PARAMS, + # unsupported for SpinModel to hybrid both mixed_types and no-mixed_types descriptor + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + + @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[ - (param_func, DescrptSeTTebd) - for param_func in DescriptorParamSeTTebdList - ], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + ENERGY_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamSeTTebd, DescrptSeTTebd), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -179,34 +191,11 @@ def setUpClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[ - (param_func, DescrptSeTTebd) - for param_func in DescriptorParamSeTTebdList - ], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - # (DescriptorParamHybrid, DescrptHybrid), - # unsupported for SpinModel to hybrid both mixed_types and no-mixed_types descriptor - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + SPIN_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamSeTTebd, DescrptSeTTebd), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class diff --git a/source/tests/universal/pt/atomc_model/test_atomic_model.py b/source/tests/universal/pt/atomc_model/test_atomic_model.py index 8102eab5dc..67adfaa7ba 100644 --- a/source/tests/universal/pt/atomc_model/test_atomic_model.py +++ b/source/tests/universal/pt/atomc_model/test_atomic_model.py @@ -35,18 +35,18 @@ ) from ...dpmodel.descriptor.test_descriptor import ( DescriptorParamDPA1, - DescriptorParamDPA1List, + DescriptorParamDPA1EnergyModelList, DescriptorParamDPA2, - DescriptorParamDPA2List, + DescriptorParamDPA2EnergyModelList, DescriptorParamHybrid, DescriptorParamHybridMixed, DescriptorParamHybridMixedTTebd, DescriptorParamSeA, - DescriptorParamSeAList, + DescriptorParamSeAEnergyModelList, DescriptorParamSeR, - DescriptorParamSeRList, + DescriptorParamSeREnergyModelList, DescriptorParamSeT, - DescriptorParamSeTList, + DescriptorParamSeTEnergyModelList, ) from ...dpmodel.fitting.test_fitting import ( FittingParamDipole, @@ -67,29 +67,63 @@ PTTestCase, ) +ENERGY_DESCRIPTOR_PARAMS = ( + *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAEnergyModelList], + *[(param_func, DescrptSeR) for param_func in DescriptorParamSeREnergyModelList], + *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTEnergyModelList], + *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1EnergyModelList], + *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2EnergyModelList], + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_VEC_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS = ( + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DPA12_DESCRIPTOR_PARAMS, + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + ENERGY_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -140,26 +174,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDos, DOSFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DOSFittingNet) for param_func in FittingParamDosList], ), # fitting_class_param & class @@ -210,21 +229,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDipole, DipoleFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DipoleFittingNet) for param_func in FittingParamDipoleList], ), # fitting_class_param & class @@ -276,21 +285,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamPolar, PolarFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, PolarFittingNet) for param_func in FittingParamPolarList], ), # fitting_class_param & class @@ -342,19 +341,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -418,21 +409,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamProperty, PropertyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[ (param_func, PropertyFittingNet) diff --git a/source/tests/universal/pt/model/test_model.py b/source/tests/universal/pt/model/test_model.py index 2542b1f6c0..d8272cc229 100644 --- a/source/tests/universal/pt/model/test_model.py +++ b/source/tests/universal/pt/model/test_model.py @@ -53,22 +53,22 @@ ) from ...dpmodel.descriptor.test_descriptor import ( DescriptorParamDPA1, - DescriptorParamDPA1List, + DescriptorParamDPA1EnergyModelList, DescriptorParamDPA2, - DescriptorParamDPA2List, + DescriptorParamDPA2EnergyModelList, DescriptorParamDPA3, - DescriptorParamDPA3List, + DescriptorParamDPA3EnergyModelList, DescriptorParamHybrid, DescriptorParamHybridMixed, DescriptorParamHybridMixedTTebd, DescriptorParamSeA, - DescriptorParamSeAList, + DescriptorParamSeAEnergyModelList, DescriptorParamSeR, - DescriptorParamSeRList, + DescriptorParamSeREnergyModelList, DescriptorParamSeT, - DescriptorParamSeTList, + DescriptorParamSeTEnergyModelList, DescriptorParamSeTTebd, - DescriptorParamSeTTebdList, + DescriptorParamSeTTebdEnergyModelList, ) from ...dpmodel.fitting.test_fitting import ( FittingParamDipole, @@ -108,36 +108,95 @@ FittingParamProperty, ] +ENERGY_DESCRIPTOR_PARAMS = ( + *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAEnergyModelList], + *[(param_func, DescrptSeR) for param_func in DescriptorParamSeREnergyModelList], + *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTEnergyModelList], + *[ + (param_func, DescrptSeTTebd) + for param_func in DescriptorParamSeTTebdEnergyModelList + ], + *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1EnergyModelList], + *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2EnergyModelList], + *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3EnergyModelList], + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamSeTTebd, DescrptSeTTebd), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), + (DescriptorParamDPA3, DescrptDPA3), +) + +DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DPA_DESCRIPTOR_PARAMS = ( + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), + (DescriptorParamDPA3, DescrptDPA3), +) + +DEFAULT_DPA_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DPA_DESCRIPTOR_PARAMS, + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS = ( + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + +DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_DPA12_DESCRIPTOR_PARAMS, + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), + (DescriptorParamDPA3, DescrptDPA3), +) + +DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID = ( + *DEFAULT_VEC_DESCRIPTOR_PARAMS, + (DescriptorParamHybrid, DescrptHybrid), + (DescriptorParamHybridMixed, DescrptHybrid), +) + +DEFAULT_SPIN_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamSeTTebd, DescrptSeTTebd), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), + # unsupported for SpinModel to hybrid both mixed_types and no-mixed_types descriptor + (DescriptorParamHybridMixed, DescrptHybrid), + (DescriptorParamHybridMixedTTebd, DescrptHybrid), +) + @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[ - (param_func, DescrptSeTTebd) - for param_func in DescriptorParamSeTTebdList - ], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + ENERGY_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamSeTTebd, DescrptSeTTebd), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -218,33 +277,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[ - (param_func, DescrptSeTTebd) - for param_func in DescriptorParamSeTTebdList - ], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDos, DOSFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamSeTTebd, DescrptSeTTebd), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DOSFittingNet) for param_func in FittingParamDosList], ), # fitting_class_param & class @@ -326,23 +363,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamDipole, DipoleFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, DipoleFittingNet) for param_func in FittingParamDipoleList], ), # fitting_class_param & class @@ -425,23 +450,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamPolar, PolarFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, PolarFittingNet) for param_func in FittingParamPolarList], ), # fitting_class_param & class @@ -520,19 +533,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_DPA12_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -623,32 +628,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptSeR) for param_func in DescriptorParamSeRList], - *[(param_func, DescrptSeT) for param_func in DescriptorParamSeTList], - *[ - (param_func, DescrptSeTTebd) - for param_func in DescriptorParamSeTTebdList - ], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - # (DescriptorParamHybrid, DescrptHybrid), - # unsupported for SpinModel to hybrid both mixed_types and no-mixed_types descriptor - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_SPIN_DESCRIPTOR_PARAMS, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamSeR, DescrptSeR), - (DescriptorParamSeT, DescrptSeT), - (DescriptorParamSeTTebd, DescrptSeTTebd), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - ), # descrpt_class_param & class + DEFAULT_SPIN_DESCRIPTOR_PARAMS[:6], # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class @@ -754,23 +738,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptSeA) for param_func in DescriptorParamSeAList], - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybrid, DescrptHybrid), - (DescriptorParamHybridMixed, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamProperty, PropertyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamSeA, DescrptSeA), - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_VEC_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[ (param_func, PropertyFittingNet) @@ -852,21 +824,11 @@ def tearDownClass(cls) -> None: @parameterized( des_parameterized=( - ( - *[(param_func, DescrptDPA1) for param_func in DescriptorParamDPA1List], - *[(param_func, DescrptDPA2) for param_func in DescriptorParamDPA2List], - *[(param_func, DescrptDPA3) for param_func in DescriptorParamDPA3List], - (DescriptorParamHybridMixed, DescrptHybrid), - (DescriptorParamHybridMixedTTebd, DescrptHybrid), - ), # descrpt_class_param & class + DEFAULT_DPA_DESCRIPTOR_PARAMS_WITH_HYBRID, # descrpt_class_param & class ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - ( - (DescriptorParamDPA1, DescrptDPA1), - (DescriptorParamDPA2, DescrptDPA2), - (DescriptorParamDPA3, DescrptDPA3), - ), # descrpt_class_param & class + DEFAULT_DPA_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class From 61f954dac4a443f5c9f02e256d4b8ac54dfc0677 Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Tue, 26 May 2026 23:02:50 +0800 Subject: [PATCH 2/4] Update test_descriptor.py --- .../dpmodel/descriptor/test_descriptor.py | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/source/tests/universal/dpmodel/descriptor/test_descriptor.py b/source/tests/universal/dpmodel/descriptor/test_descriptor.py index 038b7f641c..f8f306d703 100644 --- a/source/tests/universal/dpmodel/descriptor/test_descriptor.py +++ b/source/tests/universal/dpmodel/descriptor/test_descriptor.py @@ -573,19 +573,6 @@ def DescriptorParamDPA3( ) -def DescriptorParamDPA3DefaultChgSpin(ntypes, rcut, rcut_smth, sel, type_map, **kwargs): - return DescriptorParamDPA3( - ntypes, - rcut, - rcut_smth, - sel, - type_map, - **kwargs, - add_chg_spin_ebd=True, - default_chg_spin=[5.0, 1.0], - ) - - # to get name for the default function DescriptorParamDPA3 = DescriptorParamDPA3List[0] @@ -814,10 +801,18 @@ def wrapper(*args, **kwargs): _descriptor_param_variant( DescriptorParamDPA3, "DescriptorParamDPA3_no_loc_mapping", use_loc_mapping=False ), + _descriptor_param_variant( + DescriptorParamDPA3, + "DescriptorParamDPA3_default_chg_spin", + add_chg_spin_ebd=True, + default_chg_spin=[5.0, 1.0], + ), # Mixed high-risk combination. _descriptor_param_variant( DescriptorParamDPA3, "DescriptorParamDPA3_mixed_high_risk", + add_chg_spin_ebd=True, + default_chg_spin=[5.0, 1.0], exclude_types=[[0, 1]], optim_update=False, edge_init_use_dist=False, From c9a509a7f69cce6fca71ba28bf29bb63cc65b5c0 Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Wed, 27 May 2026 18:52:50 +0800 Subject: [PATCH 3/4] resolve comments --- .../universal/dpmodel/descriptor/test_descriptor.py | 2 +- source/tests/universal/pt/model/test_model.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/tests/universal/dpmodel/descriptor/test_descriptor.py b/source/tests/universal/dpmodel/descriptor/test_descriptor.py index f8f306d703..84e00ad9e7 100644 --- a/source/tests/universal/dpmodel/descriptor/test_descriptor.py +++ b/source/tests/universal/dpmodel/descriptor/test_descriptor.py @@ -579,7 +579,7 @@ def DescriptorParamDPA3( def _descriptor_param_variant(param_func, name: str, **fixed_kwargs: Any): def wrapper(*args, **kwargs): - return param_func(*args, **{**fixed_kwargs, **kwargs}) + return param_func(*args, **{**kwargs, **fixed_kwargs}) wrapper.__name__ = name wrapper.__qualname__ = name diff --git a/source/tests/universal/pt/model/test_model.py b/source/tests/universal/pt/model/test_model.py index d8272cc229..ddf74472f7 100644 --- a/source/tests/universal/pt/model/test_model.py +++ b/source/tests/universal/pt/model/test_model.py @@ -189,6 +189,15 @@ (DescriptorParamHybridMixedTTebd, DescrptHybrid), ) +DEFAULT_SPIN_FIT_DESCRIPTOR_PARAMS = ( + (DescriptorParamSeA, DescrptSeA), + (DescriptorParamSeR, DescrptSeR), + (DescriptorParamSeT, DescrptSeT), + (DescriptorParamSeTTebd, DescrptSeTTebd), + (DescriptorParamDPA1, DescrptDPA1), + (DescriptorParamDPA2, DescrptDPA2), +) + @parameterized( des_parameterized=( @@ -632,7 +641,7 @@ def tearDownClass(cls) -> None: ((FittingParamEnergy, EnergyFittingNet),), # fitting_class_param & class ), fit_parameterized=( - DEFAULT_SPIN_DESCRIPTOR_PARAMS[:6], # descrpt_class_param & class + DEFAULT_SPIN_FIT_DESCRIPTOR_PARAMS, # descrpt_class_param & class ( *[(param_func, EnergyFittingNet) for param_func in FittingParamEnergyList], ), # fitting_class_param & class From 7d80d36bebd146c538ad576ea00e2e681664217b Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Fri, 29 May 2026 00:26:48 +0800 Subject: [PATCH 4/4] Update test_descriptor.py --- source/tests/universal/dpmodel/descriptor/test_descriptor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/tests/universal/dpmodel/descriptor/test_descriptor.py b/source/tests/universal/dpmodel/descriptor/test_descriptor.py index 84e00ad9e7..56ebc65cde 100644 --- a/source/tests/universal/dpmodel/descriptor/test_descriptor.py +++ b/source/tests/universal/dpmodel/descriptor/test_descriptor.py @@ -703,7 +703,7 @@ def wrapper(*args, **kwargs): DescriptorParamDPA1, "DescriptorParamDPA1_strip", tebd_input_mode="strip" ), _descriptor_param_variant( - DescriptorParamDPA1, "DescriptorParamDPA1_no_attention", attn_layer=0 + DescriptorParamDPA1, "DescriptorParamDPA1_with_attention", attn_layer=2 ), _descriptor_param_variant( DescriptorParamDPA1, "DescriptorParamDPA1_exclude_types", exclude_types=[[0, 1]] @@ -724,6 +724,7 @@ def wrapper(*args, **kwargs): DescriptorParamDPA1, "DescriptorParamDPA1_mixed_high_risk", tebd_input_mode="strip", + attn_layer=2, exclude_types=[[0, 1]], temperature=1.0, smooth_type_embedding=False,