def testAppend(self): """ Test appending to the trajectory. """ # Setup input. sites = [[0.0, 1.0, 2.3], [1.0, 0.0, 2.3], [1.0, 1.0, 0.3], [1.0, 1.0, 2.3], [3.4, 4.5, 4.3], [3.4, 4.3, 4.3], [3.4, 5.5, 4.3], [3.7, 7.5, 6.5]] name = os.path.abspath(os.path.dirname(__file__)) name = os.path.join(name, "..", "..") name = os.path.join(name, "TestUtilities", "Scratch") trajectory_filename = os.path.join(name, "tmp_trajectory_file.py") if MPICommons.isMaster(): self.__files_to_remove.append(trajectory_filename) class DummyConfig: def types(self): return site_types # Construct. t = LatticeTrajectory(trajectory_filename, Config(sites)) # Append times, steps and typers. site_types = ["A", "A", "A", "A", "A", "A"] t.append(1.10045, 12, DummyConfig()) # Since this was the first time it should have triggered a dump to file. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check the types. ret_types = local_dict['types'] ref_types = [["A", "A", "A", "A", "A", "A"]] self.assertEqual(ret_types, ref_types) # Check the steps. ret_steps = local_dict['steps'] ref_steps = [12] self.assertEqual(ret_steps, ref_steps) # Check the times. ret_times = local_dict['times'] ref_times = [1.10045] self.assertEqual(ret_times, ref_times) # Appending again directly makes no dump. site_types = ["B", "B", "B", "B", "B", "B"] t.append(1.1993, 14, DummyConfig()) if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check. ret_types = local_dict['types'] self.assertEqual(ret_types, ref_types) ret_steps = local_dict['steps'] self.assertEqual(ret_steps, ref_steps) ret_times = local_dict['times'] self.assertEqual(ret_times, ref_times) # But if we dump again and set the time limit to zero we will trigger a dump. t._Trajectory__max_buffer_time = 0.0 site_types = ["C", "C", "C", "C", "C", "C"] t.append(1.199, 19, DummyConfig()) # Reset the time to some thing large. t._Trajectory__max_buffer_time = 100000000000.0 if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check the types. ret_types = local_dict['types'] ref_types = [["A", "A", "A", "A", "A", "A"], ["B", "B", "B", "B", "B", "B"], ["C", "C", "C", "C", "C", "C"]] self.assertEqual(ret_types, ref_types) # Check the steps. ret_steps = local_dict['steps'] ref_steps = [12, 14, 19] self.assertEqual(ret_steps, ref_steps) # Check the times. ret_times = local_dict['times'] ref_times = [1.10045, 1.1993, 1.199] self.assertEqual(ret_times, ref_times) # The buffers are reset after each dump. If we make the # max size limit smaller than the size of the appended types # list this must trigger a dump. size = sys.getsizeof(site_types) t._Trajectory__max_buffer_size = size # Append. site_types = ["A", "A", "A", "A", "A", "B"] t.append(1.1995, 43, DummyConfig()) # Check. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) ret_types = local_dict['types'] ref_types = [["A", "A", "A", "A", "A", "A"], ["B", "B", "B", "B", "B", "B"], ["C", "C", "C", "C", "C", "C"], ["A", "A", "A", "A", "A", "B"]] self.assertEqual(ret_types, ref_types) # Append. t.append(1.1995, 43, DummyConfig()) t.append(1.1995, 43, DummyConfig()) t.append(1.1995, 43, DummyConfig()) # This last one triggers the dump. t.append(1.1995, 43, DummyConfig()) # Check. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) ret_types = local_dict['types'] ref_types = [["A", "A", "A", "A", "A", "A"], ["B", "B", "B", "B", "B", "B"], ["C", "C", "C", "C", "C", "C"], ["A", "A", "A", "A", "A", "B"], ["A", "A", "A", "A", "A", "B"], ["A", "A", "A", "A", "A", "B"], ["A", "A", "A", "A", "A", "B"], ["A", "A", "A", "A", "A", "B"]] self.assertEqual(ret_types, ref_types)
def testAppend(self): """ Test appending to the trajectory. """ # Setup input. sites = [[0.0,1.0,2.3], [1.0,0.0,2.3], [1.0,1.0,0.3], [1.0,1.0,2.3], [3.4,4.5,4.3], [3.4,4.3,4.3], [3.4,5.5,4.3], [3.7,7.5,6.5]] name = os.path.abspath(os.path.dirname(__file__)) name = os.path.join(name, "..", "..") name = os.path.join(name, "TestUtilities", "Scratch") trajectory_filename = os.path.join(name, "tmp_trajectory_file.py") if MPICommons.isMaster(): self.__files_to_remove.append(trajectory_filename) class DummyConfig: def types(self): return site_types # Construct. t = LatticeTrajectory(trajectory_filename, Config(sites)) # Append times, steps and typers. site_types = ["A", "A", "A", "A", "A", "A"] t.append(1.10045, 12, DummyConfig()) # Since this was the first time it should have triggered a dump to file. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check the types. ret_types = local_dict['types'] ref_types = [["A", "A", "A", "A", "A", "A"]] self.assertEqual( ret_types, ref_types ) # Check the steps. ret_steps = local_dict['steps'] ref_steps = [12] self.assertEqual( ret_steps, ref_steps ) # Check the times. ret_times = local_dict['times'] ref_times = [1.10045] self.assertEqual( ret_times, ref_times ) # Appending again directly makes no dump. site_types = ["B", "B", "B", "B", "B", "B"] t.append(1.1993, 14, DummyConfig()) if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check. ret_types = local_dict['types'] self.assertEqual( ret_types, ref_types ) ret_steps = local_dict['steps'] self.assertEqual( ret_steps, ref_steps ) ret_times = local_dict['times'] self.assertEqual( ret_times, ref_times ) # But if we dump again and set the time limit to zero we will trigger a dump. t._Trajectory__max_buffer_time = 0.0 site_types = ["C", "C", "C", "C", "C", "C"] t.append(1.199, 19, DummyConfig()) # Reset the time to some thing large. t._Trajectory__max_buffer_time = 100000000000.0 if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) # Check the types. ret_types = local_dict['types'] ref_types = [["A","A","A","A","A","A"], ["B","B","B","B","B","B"], ["C","C","C","C","C","C"]] self.assertEqual( ret_types, ref_types ) # Check the steps. ret_steps = local_dict['steps'] ref_steps = [12,14,19] self.assertEqual( ret_steps, ref_steps ) # Check the times. ret_times = local_dict['times'] ref_times = [1.10045, 1.1993, 1.199] self.assertEqual( ret_times, ref_times ) # The buffers are reset after each dump. If we make the # max size limit smaller than the size of the appended types # list this must trigger a dump. size = sys.getsizeof(site_types) t._Trajectory__max_buffer_size = size # Append. site_types = ["A","A","A","A","A","B"] t.append(1.1995, 43, DummyConfig()) # Check. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) ret_types = local_dict['types'] ref_types = [["A","A","A","A","A","A"], ["B","B","B","B","B","B"], ["C","C","C","C","C","C"], ["A","A","A","A","A","B"]] self.assertEqual( ret_types, ref_types ) # Append. t.append(1.1995, 43, DummyConfig() ) t.append(1.1995, 43, DummyConfig() ) t.append(1.1995, 43, DummyConfig() ) # This last one triggers the dump. t.append(1.1995, 43, DummyConfig() ) # Check. if MPICommons.isMaster(): global_dict = {} local_dict = {} execfile(trajectory_filename, global_dict, local_dict) ret_types = local_dict['types'] ref_types = [["A","A","A","A","A","A"], ["B","B","B","B","B","B"], ["C","C","C","C","C","C"], ["A","A","A","A","A","B"], ["A","A","A","A","A","B"], ["A","A","A","A","A","B"], ["A","A","A","A","A","B"], ["A","A","A","A","A","B"]] self.assertEqual( ret_types, ref_types )