Пример #1
0
    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)
Пример #2
0
    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 )