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

1""" Test the class TrajectoryIO. """ 

2 

3import pytest 

4@pytest.mark.gamdpy_cpu 

5def test_TrajectoryIO(): 

6 import os 

7 import pytest 

8 import h5py 

9 import gamdpy as gp 

10 

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) 

18 

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) 

24 

25 # Setup integrator 

26 integrator = gp.integrators.NVT(temperature=temperature, tau=0.2, dt=0.001) 

27 

28 # Setup runtime actions, i.e. actions performed during simulation of timeblocks 

29 runtime_actions = [gp.TrajectorySaver(), 

30 gp.ScalarSaver(), 

31 gp.MomentumReset(100)] 

32 

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') 

37 

38 # Run simulation 

39 sim.run(verbose=False) 

40 sim.run(verbose=False) 

41 

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") 

47 

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") 

54 

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" 

60 

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" 

64 

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" 

68 

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() 

71 

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") 

75 

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" 

79 

80if __name__ == '__main__': 

81 test_TrajectoryIO()