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