Skip to content

Commit

Permalink
provide and use normalized electronic conf embedding
Browse files Browse the repository at this point in the history
  • Loading branch information
Han Wang authored and iProzd committed Sep 27, 2024
1 parent b61d65f commit 6b7780e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
4 changes: 3 additions & 1 deletion deepmd/dpmodel/utils/type_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,9 @@ def change_type_map(
def get_econf_tebd(type_map, precision: str = "default"):
from deepmd.utils.econf_embd import (
ECONF_DIM,
electronic_configuration_embedding,
)
from deepmd.utils.econf_embd import (
normalized_electronic_configuration_embedding as electronic_configuration_embedding,
)
from deepmd.utils.econf_embd import type_map as periodic_table

Expand Down
17 changes: 17 additions & 0 deletions deepmd/utils/econf_embd.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
element,
)

__all__ = [
"electronic_configuration_embedding",
"normalized_electronic_configuration_embedding",
"make_econf_embedding",
"transform_to_spin_rep",
]

###
# made by command
# ret = make_econf_embedding(type_map, flatten=True)
Expand Down Expand Up @@ -173,6 +180,16 @@
ECONF_DIM = electronic_configuration_embedding[type_map[0]].shape[0]


def normalize_vec_length(res):
scale = 1.0 / np.sqrt(ECONF_DIM)
return {kk: scale * vv for kk, vv in res.items()}


normalized_electronic_configuration_embedding = normalize_vec_length(
electronic_configuration_embedding
)


def make_empty_list_vec():
ret = {}
for kk in conf_keys:
Expand Down
5 changes: 5 additions & 0 deletions source/tests/common/test_econf_embd.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from deepmd.utils.econf_embd import (
electronic_configuration_embedding,
make_econf_embedding,
normalized_electronic_configuration_embedding,
transform_to_spin_rep,
)

Expand Down Expand Up @@ -55,3 +56,7 @@ def test_dict(self):
expected_res = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
# fmt: on
self.assertEqual(list(res), expected_res)
res = normalized_electronic_configuration_embedding["Fe"]
self.assertEqual(
list(res), [ii / len(expected_res) ** 0.5 for ii in expected_res]
)

0 comments on commit 6b7780e

Please sign in to comment.