Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions dpgen2/exploration/task/make_task_group_from_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,7 @@ def config_strip_confidx(


def make_calypso_task_group_from_config(config):
config = config.copy()
config.pop("type", None)
config = caly_normalize(config)

Expand Down Expand Up @@ -657,9 +658,11 @@ def make_lmp_task_group_from_config(
mass_map,
config,
):
# Work around the required conf_idx.
# May not be a good design!!!
config["conf_idx"] = [] if "conf_idx" not in config else None
# Configuration selection is handled by the caller, outside this helper.
# Supply the required normalization key only if neither spelling is present.
config = config.copy()
if "conf_idx" not in config and "sys_idx" not in config:
config["conf_idx"] = []
config = lmp_normalize(config)
config = config_strip_confidx(config)
if config["type"] == "lmp-md":
Expand Down
50 changes: 50 additions & 0 deletions tests/exploration/test_make_task_group_from_config.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import copy
import itertools
import os
import textwrap
Expand All @@ -11,6 +12,9 @@
)

import numpy as np
from dargs.dargs import (
ArgumentTypeError,
)

try:
from exploration.context import (
Expand Down Expand Up @@ -57,12 +61,49 @@ def test_npt(self):
self.numb_models, self.mass_map, self.config_npt
)
self.assertTrue(isinstance(tgroup, NPTTaskGroup))
self.assertNotIn("conf_idx", self.config_npt)
self.assertEqual(self.config_npt, {"type": "lmp-md", "Ts": [100]})

def test_npt_accepts_explicit_conf_idx_without_mutating_caller(self):
"""Accept the explicit normalization key without changing the caller dict."""
config = {
"type": "lmp-md",
"Ts": [100],
"conf_idx": [2],
}

tgroup = make_lmp_task_group_from_config(
self.numb_models, self.mass_map, config
)

self.assertTrue(isinstance(tgroup, NPTTaskGroup))
self.assertEqual(config, {"type": "lmp-md", "Ts": [100], "conf_idx": [2]})
# This helper does not select configurations; set_conf is called later.
self.assertFalse(tgroup.conf_set)

def test_npt_accepts_sys_idx_alias_without_mutating_caller(self):
config = dict(self.config_npt, sys_idx=[2])
before = copy.deepcopy(config)
tgroup = make_lmp_task_group_from_config(
self.numb_models, self.mass_map, config
)
self.assertIsInstance(tgroup, NPTTaskGroup)
self.assertEqual(config, before)
self.assertFalse(tgroup.conf_set)

def test_invalid_conf_idx_does_not_mutate_caller(self):
config = dict(self.config_npt, conf_idx="invalid")
before = copy.deepcopy(config)
with self.assertRaises(ArgumentTypeError):
make_lmp_task_group_from_config(self.numb_models, self.mass_map, config)
self.assertEqual(config, before)

def test_template(self):
tgroup = make_lmp_task_group_from_config(
self.numb_models, self.mass_map, self.config_template
)
self.assertTrue(isinstance(tgroup, LmpTemplateTaskGroup))
self.assertNotIn("conf_idx", self.config_template)
self.assertFalse(tgroup.strict_revisions)

def test_template_strict_revisions(self):
Expand Down Expand Up @@ -137,3 +178,12 @@ def test_make_caly_input(self):
def test_caly_task_group(self):
tgroup = make_calypso_task_group_from_config(self.config)
self.assertTrue(isinstance(tgroup, CalyTaskGroup))

def test_caly_does_not_mutate_caller(self):
config = dict(self.config, type="calypso")
before = copy.deepcopy(config)
tgroup = make_calypso_task_group_from_config(config)
self.assertIsInstance(tgroup, CalyTaskGroup)
self.assertEqual(config, before)
tgroup.name_of_atoms[0] = "Na"
self.assertEqual(config, before)
Loading