Skip to content

Commit b961780

Browse files
authored
Merge pull request #22 from dwhswenson/command_tests
Command tests
2 parents 58520df + f885241 commit b961780

6 files changed

Lines changed: 156 additions & 16 deletions

File tree

‎paths_cli/commands/pathsampling.py‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
@SCHEME.clicked(required=False)
1616
@INIT_CONDS.clicked(required=False)
1717
@N_STEPS_MC
18-
def path_sampling(input_file, output_file, scheme, init_conds, nsteps):
18+
def pathsampling(input_file, output_file, scheme, init_conds, nsteps):
1919
"""General path sampling, using setup in INPUT_FILE"""
2020
storage = INPUT_FILE.get(input_file)
21-
path_sampling_main(output_storage=OUTPUT_FILE.get(output_file),
22-
scheme=SCHEME.get(storage, scheme),
23-
init_conds=INIT_CONDS.get(storage, init_conds),
24-
n_steps=nsteps)
21+
pathsampling_main(output_storage=OUTPUT_FILE.get(output_file),
22+
scheme=SCHEME.get(storage, scheme),
23+
init_conds=INIT_CONDS.get(storage, init_conds),
24+
n_steps=nsteps)
2525

26-
def path_sampling_main(output_storage, scheme, init_conds, n_steps):
26+
def pathsampling_main(output_storage, scheme, init_conds, n_steps):
2727
import openpathsampling as paths
2828
init_conds = scheme.initial_conditions_from_trajectories(init_conds)
2929
simulation = paths.PathSampling(
@@ -37,6 +37,6 @@ def path_sampling_main(output_storage, scheme, init_conds, n_steps):
3737
return simulation.sample_set, simulation
3838

3939

40-
CLI = path_sampling
40+
CLI = pathsampling
4141
SECTION = "Simulation"
4242
REQUIRES_OPS = (1, 0)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import os
2+
import tempfile
3+
import pytest
4+
from unittest.mock import patch
5+
from click.testing import CliRunner
6+
7+
import openpathsampling as paths
8+
9+
from paths_cli.commands.contents import *
10+
11+
def test_contents(tps_fixture):
12+
# we just do a full integration test of this one
13+
scheme, network, engine, init_conds = tps_fixture
14+
runner = CliRunner()
15+
with runner.isolated_filesystem():
16+
storage = paths.Storage("setup.nc", 'w')
17+
for obj in tps_fixture:
18+
storage.save(obj)
19+
storage.tags['initial_conditions'] = init_conds
20+
21+
results = runner.invoke(contents, ['setup.nc'])
22+
cwd = os.getcwd()
23+
expected = [
24+
f"Storage @ '{cwd}/setup.nc'",
25+
"CVs: 1 item", "* x",
26+
"Volumes: 8 items", "* A", "* B", "* plus 6 unnamed items",
27+
"Engines: 2 items", "* flat", "* plus 1 unnamed item",
28+
"Networks: 1 item", "* 1 unnamed item",
29+
"Move Schemes: 1 item", "* 1 unnamed item",
30+
"Simulations: 0 items",
31+
"Tags: 1 item", "* initial_conditions",
32+
"", "Data Objects:",
33+
"Steps: 0 unnamed items",
34+
"Move Changes: 0 unnamed items",
35+
"SampleSets: 1 unnamed item",
36+
"Trajectories: 1 unnamed item",
37+
f"Snapshots: {2*len(init_conds[0])} unnamed items", ""
38+
]
39+
assert results.exit_code == 0
40+
assert results.output.split('\n') == expected
41+
for truth, beauty in zip(expected, results.output.split('\n')):
42+
assert truth == beauty
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import os
2+
import pytest
3+
from unittest.mock import patch
4+
import tempfile
5+
from click.testing import CliRunner
6+
7+
from paths_cli.commands.equilibrate import *
8+
9+
import openpathsampling as paths
10+
11+
def print_test(output_storage, scheme, init_conds, multiplier, extra_steps):
12+
print(isinstance(output_storage, paths.Storage))
13+
print(scheme.__uuid__)
14+
print(init_conds.__uuid__)
15+
print(multiplier, extra_steps)
16+
17+
18+
@patch('paths_cli.commands.equilibrate.equilibrate_main', print_test)
19+
def test_equilibrate(tps_fixture):
20+
# integration test (click and parameters)
21+
scheme, network, engine, init_conds = tps_fixture
22+
runner = CliRunner()
23+
with runner.isolated_filesystem():
24+
storage = paths.Storage("setup.nc", 'w')
25+
for obj in tps_fixture:
26+
storage.save(obj)
27+
storage.tags['initial_conditions'] = init_conds
28+
29+
results = runner.invoke(
30+
equilibrate,
31+
["setup.nc", "-o", "foo.nc"]
32+
)
33+
out_str = "True\n{schemeid}\n{condsid}\n1 0\n"
34+
expected_output = out_str.format(schemeid=scheme.__uuid__,
35+
condsid=init_conds.__uuid__)
36+
assert results.exit_code == 0
37+
assert results.output == expected_output
38+
39+
def test_equilibrate_main(tps_fixture):
40+
# smoke test
41+
tempdir = tempfile.mkdtemp()
42+
store_name = os.path.join(tempdir, "equil.nc")
43+
try:
44+
storage = paths.Storage(store_name, mode='w')
45+
scheme, network, engine, init_conds = tps_fixture
46+
equilibrated, sim = equilibrate_main(storage, scheme, init_conds,
47+
multiplier=1, extra_steps=1)
48+
assert isinstance(equilibrated, paths.SampleSet)
49+
assert isinstance(sim, paths.PathSampling)
50+
finally:
51+
if os.path.exists(store_name):
52+
os.remove(store_name)
53+
os.rmdir(tempdir)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import os
2+
import pytest
3+
from unittest.mock import patch
4+
import tempfile
5+
from click.testing import CliRunner
6+
7+
import openpathsampling as paths
8+
9+
from paths_cli.commands.pathsampling import *
10+
11+
def print_test(output_storage, scheme, init_conds, n_steps):
12+
print(isinstance(output_storage, paths.Storage))
13+
print(scheme.__uuid__)
14+
print(init_conds.__uuid__)
15+
print(n_steps)
16+
17+
@patch('paths_cli.commands.pathsampling.pathsampling_main', print_test)
18+
def test_pathsampling(tps_fixture):
19+
scheme, _, _, init_conds = tps_fixture
20+
runner = CliRunner()
21+
with runner.isolated_filesystem():
22+
storage = paths.Storage("setup.nc", 'w')
23+
for obj in tps_fixture:
24+
storage.save(obj)
25+
storage.tags['initial_conditions'] = init_conds
26+
27+
results = runner.invoke(pathsampling, ['setup.nc', '-o', 'foo.nc',
28+
'-n', '1000'])
29+
assert results.exit_code == 0
30+
expected_output = (f"True\n{scheme.__uuid__}\n{init_conds.__uuid__}"
31+
"\n1000\n")
32+
assert results.output == expected_output
33+
34+
35+
def test_pathsampling_main(tps_fixture):
36+
scheme, _, _, init_conds = tps_fixture
37+
with CliRunner().isolated_filesystem():
38+
storage = paths.Storage("tps.nc", mode='w')
39+
final, sim = pathsampling_main(storage, scheme, init_conds, 10)
40+
assert isinstance(final, paths.SampleSet)
41+
assert isinstance(sim, paths.PathSampling)
42+
assert len(storage.steps) == 11
43+
assert len(storage.schemes) == 1
44+
45+

‎paths_cli/tests/commands/test_visit_all.py‎

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,6 @@ def print_test(output_storage, states, engine, initial_frame):
1717
print(initial_frame.__uuid__)
1818

1919

20-
@pytest.fixture()
21-
def tps_fixture(flat_engine, tps_network_and_traj):
22-
network, traj = tps_network_and_traj
23-
scheme = paths.OneWayShootingMoveScheme(network=network,
24-
selector=paths.UniformSelector(),
25-
engine=flat_engine)
26-
init_conds = scheme.initial_conditions_from_trajectories(traj)
27-
return (scheme, network, flat_engine, init_conds)
28-
2920
@pytest.fixture()
3021
def visit_all_fixture(tps_fixture):
3122
scheme, network, engine, init_conds = tps_fixture

‎paths_cli/tests/conftest.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,12 @@ def tps_network_and_traj():
2323
init_traj = make_1d_traj([-0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1],
2424
[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0])
2525
return (network, init_traj)
26+
27+
@pytest.fixture
28+
def tps_fixture(flat_engine, tps_network_and_traj):
29+
network, traj = tps_network_and_traj
30+
scheme = paths.OneWayShootingMoveScheme(network=network,
31+
selector=paths.UniformSelector(),
32+
engine=flat_engine)
33+
init_conds = scheme.initial_conditions_from_trajectories(traj)
34+
return (scheme, network, flat_engine, init_conds)

0 commit comments

Comments
 (0)