Coverage for tests/test_TrajectoryIO.py: 9%
44 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
1""" Test the class TrajectoryIO. """
3import pytest
4@pytest.mark.gamdpy_cpu
5def test_TrajectoryIO():
6 import os
7 import pytest
8 import h5py
9 import gamdpy as gp
11 ## Perform a short simulation
12 # Create a starting configuration
13 temperature, density, npart, D = 0.7, 1.0, 1987, 3
14 configuration = gp.Configuration(D=D)
15 configuration.make_positions(N=npart, rho=density)
16 configuration['m'] = 1.0
17 configuration.randomize_velocities(temperature=temperature)
19 # Setup pair potential: Single component 12-6 Lennard-Jones
20 pair_func = gp.apply_shifted_force_cutoff(gp.LJ_12_6_sigma_epsilon)
21 pair_func = gp.apply_shifted_potential_cutoff(gp.LJ_12_6_sigma_epsilon)
22 sig, eps, cut = 1.0, 1.0, 2.5
23 pair_pot = gp.PairPotential(pair_func, params=[sig, eps, cut], max_num_nbs=1000)
25 # Setup integrator
26 integrator = gp.integrators.NVT(temperature=temperature, tau=0.2, dt=0.001)
28 # Setup runtime actions, i.e. actions performed during simulation of timeblocks
29 runtime_actions = [gp.TrajectorySaver(),
30 gp.ScalarSaver(),
31 gp.MomentumReset(100)]
33 # Setup Simulation # Note: useless reducing steps_per_timeblock, the time is spent by the jit not by the run
34 sim = gp.Simulation(configuration, pair_pot, integrator, runtime_actions,
35 num_timeblocks=1, steps_per_timeblock=128,
36 storage='memory')
38 # Run simulation
39 sim.run(verbose=False)
40 sim.run(verbose=False)
42 ## Save output to .h5 file
43 output = gp.tools.TrajectoryIO()
44 assert output.h5 == None, "Error with no input initialization"
45 output.h5 = sim.output
46 output.save_h5(f"LJ_r{density}_T{temperature}.h5")
48 ## Test read from h5
49 output = gp.tools.TrajectoryIO(f"LJ_r{density}_T{temperature}.h5").get_h5()
50 isinstance(output.file, h5py.File)
51 nblocks, nconfs, N, D = output['trajectory_saver/positions'].shape
52 assert (N, D) == (1987, 3), "Error reading N and D in TrajectoryIO while reading from .h5"
53 os.remove(f"LJ_r{density}_T{temperature}.h5")
55 ## Test read from rumd3
56 # Test read from rumd3 TrajectoryFiles
57 output = gp.tools.TrajectoryIO("examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles").get_h5()
58 nblocks, nconfs, N, D = output['trajectory_saver/positions'].shape
59 assert (N, D) == (4000, 3), "Error reading N and D in TrajectoryIO while reading from examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles"
61 # Test read from rumd3 TrajectoryFiles, trajectory only
62 output = gp.tools.TrajectoryIO("examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles_trajonly").get_h5()
63 assert isinstance(output.file, h5py.File), "Error in TrajectoryIO while reading from rumd3 trajectory only"
65 # Test read from rumd3 TrajectoryFiles, energies only
66 output = gp.tools.TrajectoryIO("examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles_eneronly").get_h5()
67 assert isinstance(output.file, h5py.File), "Error in TrajectoryIO while reading from rumd3 energy only"
69 # Test read from rumd3 TrajectoryFiles but is empty
70 output = gp.tools.TrajectoryIO("examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles_empty").get_h5()
72 # Test read from rumd3 TrajectoryFiles but folder is not there
73 with pytest.raises(Exception):
74 output = gp.tools.TrajectoryIO("examples/Data/NVT_N4000_T2.0_rho1.2_KABLJ_rumd3/TrajectoryFiles_not_here")
76 ## Test read from unsupported format
77 output = gp.tools.TrajectoryIO("file.abc").get_h5()
78 assert output == None, "Error in TrajectoryIO with not recognized input/unsupported format"
80if __name__ == '__main__':
81 test_TrajectoryIO()