Skip to content

Commit b146c1b

Browse files
committed
more testing
1 parent c18e010 commit b146c1b

4 files changed

Lines changed: 99 additions & 3 deletions

File tree

CodeEntropy/levels/search.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def get_RAD_neighbors(self, universe, mol_id):
4444
if molecule_index_j != mol_id:
4545
j_position = universe.atoms.fragments[molecule_index_j].center_of_mass()
4646
distances[molecule_index_j] = self.get_distance(
47-
j_position, central_position, universe.dimensions
47+
j_position, central_position, universe.dimensions[:3]
4848
)
4949

5050
# Sort distances smallest to largest
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from types import SimpleNamespace
2+
from unittest.mock import MagicMock
3+
4+
from CodeEntropy.levels.nodes.find_neighbors import ComputeNeighborsNode
5+
6+
7+
def test_compute_find_neighbors_node_runs_and_writes_shared_data():
8+
node = ComputeNeighborsNode()
9+
10+
node._neighbor_analysis.get_neighbors = MagicMock(return_value=({0: 7.8}))
11+
12+
node._neighbor_analysis.get_symmetry = MagicMock(return_value=({0: 2}, {0: False}))
13+
14+
shared = {
15+
"reduced_universe": MagicMock(),
16+
"levels": {0: ["united_atom"]},
17+
"groups": {0: [0]},
18+
"start": 0,
19+
"end": 10,
20+
"step": 1,
21+
"args": SimpleNamespace(search_type="RAD"),
22+
}
23+
24+
out = node.run(shared)
25+
26+
assert "neighbors" in out
27+
assert "symmetry_number" in out
28+
assert "linear" in out
29+
assert shared["neighbors"] == {0: 7.8}
30+
assert shared["symmetry_number"] == {0: 2}
31+
assert shared["linear"] == {0: False}
32+
node._neighbor_analysis.get_neighbors.assert_called_once()
33+
node._neighbor_analysis.get_symmetry.assert_called_once()

tests/unit/CodeEntropy/levels/test_neighbors.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,12 @@ class HybridizationType:
196196
def SP():
197197
return "SP"
198198

199-
rdkit_heavy.GetAtoms = MagicMock(return_value=[a1, a2, a3])
200-
a1.GetHybridization = MagicMock(return_value="SP2")
199+
def _get_atoms():
200+
return [a1, a2, a3]
201+
202+
rdkit_heavy.GetAtoms = MagicMock(side_effect=_get_atoms)
203+
204+
a1.GetHybridization = MagicMock(return_value="SP3")
201205
a2.GetHybridization = MagicMock(return_value="SP")
202206
a3.GetHybridization = MagicMock(return_value="SP3")
203207

tests/unit/CodeEntropy/levels/test_search.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
from pathlib import Path
2+
13
import numpy as np
24
import pytest
5+
import yaml
36

7+
import tests.regression.helpers as Helpers
8+
from CodeEntropy.config.runtime import CodeEntropyRunner
9+
from CodeEntropy.levels.mda import UniverseOperations
410
from CodeEntropy.levels.search import Search
511

612
# some dummy atom positions
@@ -11,6 +17,59 @@
1117
e = np.array([0, 11, 11])
1218
dimensions = np.array([10, 10, 10])
1319

20+
DEFAULT_TESTDATA_BASE_URL = "https://www.ccpbiosim.ac.uk/file-store/codeentropy-testing"
21+
22+
23+
def test_get_RAD_neighbors(tmp_path: Path):
24+
"""
25+
Args:
26+
tmp_path: Pytest provided temporatry directory
27+
"""
28+
args = {}
29+
search = Search()
30+
system = "methane"
31+
repo_root = Path(__file__).resolve().parents[4]
32+
config_path = (
33+
repo_root / "tests" / "regression" / "configs" / system / "config.yaml"
34+
)
35+
36+
tmp_path.mkdir(parents=True, exist_ok=True)
37+
38+
raw = yaml.safe_load(config_path.read_text())
39+
if not isinstance(raw, dict):
40+
raise ValueError(
41+
f"Config must parse to a dict. Got {type(raw)} from {config_path}"
42+
)
43+
44+
cooked = Helpers._abspathify_config_paths(raw, base_dir=config_path.parent)
45+
required: list[Path] = []
46+
run1 = cooked.get("run1")
47+
if isinstance(run1, dict):
48+
ff = run1.get("force_file")
49+
if isinstance(ff, str) and ff:
50+
required.append(Path(ff))
51+
for p in run1.get("top_traj_file") or []:
52+
if isinstance(p, str) and p:
53+
required.append(Path(p))
54+
55+
if required:
56+
Helpers.ensure_testdata_for_system(system, required_paths=required)
57+
58+
runner = CodeEntropyRunner(tmp_path)
59+
parser = runner._config_manager.build_parser()
60+
args, _ = parser.parse_known_args()
61+
args.end = run1.get("end")
62+
args.top_traj_file = run1.get("top_traj_file")
63+
args.file_format = run1.get("file_format")
64+
assert args.end == 1
65+
66+
universe_operations = UniverseOperations()
67+
universe = CodeEntropyRunner._build_universe(args, universe_operations)
68+
69+
neighbors = search.get_RAD_neighbors(universe=universe, mol_id=0)
70+
71+
assert neighbors == [151, 3, 75, 219, 229, 488, 460, 118, 230, 326]
72+
1473

1574
def test_get_angle():
1675
search = Search()

0 commit comments

Comments
 (0)