def test_geometry_from_ase_atoms_single(device): """Check single system instances can be instantiated from ase.Atoms objects.""" # Create an ase.Atoms object atoms = molecule('CH4') # Check 1: Ensure that the from_ase_atoms method correctly constructs # a geometry instance. This includes the unit conversion operation. geom_1 = Geometry.from_ase_atoms(atoms, device=device) check_1 = np.allclose(geom_1.positions.sft(), atoms.positions * length_units['angstrom']) assert check_1, 'from_ase_atoms did not correctly parse the positions' # Check 2: Check the tensors were placed on the correct device check_2 = (geom_1.positions.device == device and geom_1.atomic_numbers.device == device) assert check_2, 'from_ase_atoms did not place tensors on the correct device'
def test_geometry_from_ase_atoms_batch(device): """Check batch instances can be instantiated from ase.Atoms objects.""" # Create an ase.Atoms object atoms = [molecule('CH4'), molecule('H2O')] ref_pos = pack([torch.tensor(i.positions) for i in atoms]).sft() ref_pos = ref_pos * length_units['angstrom'] # Check 1: Ensure that the from_ase_atoms method correctly constructs # a geometry instance. This includes the unit conversion operation. geom_1 = Geometry.from_ase_atoms(atoms, device=device) check_1 = np.allclose(geom_1.positions.sft(), ref_pos), assert check_1, 'from_ase_atoms did not correctly parse the positions' # Check 2: Check the tensors were placed on the correct device check_2 = (geom_1.positions.device == device and geom_1.atomic_numbers.device == device) assert check_2, 'from_ase_atoms did not place tensors on the correct device'