Exemple #1
0
    def test_extend_frame_props(self):
        lattice = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
        species = ["Si", "Si"]
        frac_coords = [
            [[0, 0, 0], [0.5, 0.5, 0.5]],
            [[0.1, 0.1, 0.1], [0.6, 0.6, 0.6]],
            [[0.2, 0.2, 0.2], [0.7, 0.7, 0.7]],
        ]

        # Trajectories with constant site properties
        frame_properties_1 = {"energy": [-3, -3.9, -4.1]}
        traj_1 = Trajectory(lattice, species, frac_coords, frame_properties=frame_properties_1)

        frame_properties_2 = {"energy": [-4.2, -4.25, -4.3]}
        traj_2 = Trajectory(lattice, species, frac_coords, frame_properties=frame_properties_2)

        # Test combining two trajectories with similar site_properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        expected_frame_properties = {"energy": [-3, -3.9, -4.1, -4.2, -4.25, -4.3]}
        self.assertEqual(traj_combined.frame_properties, expected_frame_properties)

        # Mismatched frame propertied
        frame_properties_3 = {"energy": [-4.2, -4.25, -4.3], "pressure": [2, 2.5, 2.5]}
        traj_3 = Trajectory(lattice, species, frac_coords, frame_properties=frame_properties_3)
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_3)
        expected_frame_properties = {
            "energy": [-3, -3.9, -4.1, -4.2, -4.25, -4.3],
            "pressure": [None, None, None, 2, 2.5, 2.5],
        }
        self.assertEqual(traj_combined.frame_properties, expected_frame_properties)
Exemple #2
0
    def test_extend_equivalent_site_props(self):
        lattice = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
        species = ["Si", "Si"]
        frac_coords = [
            [[0, 0, 0], [0.5, 0.5, 0.5]],
            [[0.1, 0.1, 0.1], [0.6, 0.6, 0.6]],
            [[0.2, 0.2, 0.2], [0.7, 0.7, 0.7]],
        ]

        # Trajectories with constant site properties
        site_properties_1 = [
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            }
        ]
        traj_1 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_1)

        site_properties_2 = [
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            }
        ]
        traj_2 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_2)

        # Test combining two trajectories with similar site_properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        self.assertEqual(traj_combined.site_properties, site_properties_1)
Exemple #3
0
    def test_extend_no_frame_props(self):
        lattice = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
        species = ['Si', 'Si']
        frac_coords = [[[0, 0, 0], [0.5, 0.5, 0.5]],
                       [[0.1, 0.1, 0.1], [0.6, 0.6, 0.6]],
                       [[0.2, 0.2, 0.2], [0.7, 0.7, 0.7]]]

        # Trajectory with no site_properties
        traj_1 = Trajectory(lattice, species, frac_coords)
        traj_2 = Trajectory(lattice, species, frac_coords)

        # Test combining two trajectories with no site properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        self.assertEqual(traj_combined.frame_properties, None)
Exemple #4
0
    def test_extend_inequivalent_site_props(self):
        lattice = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
        species = ["Si", "Si"]
        frac_coords = [
            [[0, 0, 0], [0.5, 0.5, 0.5]],
            [[0.1, 0.1, 0.1], [0.6, 0.6, 0.6]],
            [[0.2, 0.2, 0.2], [0.7, 0.7, 0.7]],
        ]

        # Trajectories with constant site properties
        site_properties_1 = [
            {
                "selective_dynamics": [[False, False, False], [False, False, False]],
                "magmom": [5, 5],
            }
        ]
        traj_1 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_1)

        site_properties_2 = [
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            }
        ]
        traj_2 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_2)

        # Test combining two trajectories with similar site_properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        expected_site_props = [
            {
                "selective_dynamics": [[False, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[False, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[False, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        self.assertEqual(traj_combined.site_properties, expected_site_props)

        # Trajectory with const site_properties and trajectory with changing site properties
        site_properties_1 = [
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            }
        ]
        traj_1 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_1)

        site_properties_2 = [
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        traj_2 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_2)

        # Test combining two trajectories with similar site_properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        expected_site_props = [
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        self.assertEqual(traj_combined.site_properties, expected_site_props)

        # The other way around
        traj_combined = traj_2.copy()
        traj_combined.extend(traj_1)
        expected_site_props = [
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, False], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        self.assertEqual(traj_combined.site_properties, expected_site_props)

        # Trajectory with no and trajectory with changing site properties
        site_properties_1 = None
        traj_1 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_1)

        site_properties_2 = [
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        traj_2 = Trajectory(lattice, species, frac_coords, site_properties=site_properties_2)

        # Test combining two trajectories with similar site_properties
        traj_combined = traj_1.copy()
        traj_combined.extend(traj_2)
        expected_site_props = [
            None,
            None,
            None,
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
        ]
        self.assertEqual(traj_combined.site_properties, expected_site_props)

        # The other way around
        traj_combined = traj_2.copy()
        traj_combined.extend(traj_1)
        expected_site_props = [
            {
                "selective_dynamics": [[False, True, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, False, True], [False, False, False]],
                "magmom": [5, 5],
            },
            {
                "selective_dynamics": [[True, True, False], [False, False, False]],
                "magmom": [5, 5],
            },
            None,
            None,
            None,
        ]
        self.assertEqual(traj_combined.site_properties, expected_site_props)