Esempio n. 1
0
    def __init__(self):
        super().__init__()
        modes = [
            [605.3643675, 1, 1],
            [-605.3643675, -1, -1],
            [340.5950575, 2, 2],
            [-340.5950575, -2, -2],
            [-89.09086530649508, 2, 1, 1],
            [-15.590557244410897, 2, 2, 2],
            [1.6512647916666667, 1, 1, 1, 1],
            [5.03965375, 2, 2, 1, 1],
            [0.43840625000000005, 2, 2, 2, 2],
        ]
        self._driver_result = VibrationalStructureDriverResult()
        self._driver_result.num_modes = 2
        sorted_integrals: dict[int, list[tuple[float, tuple[int, ...]]]] = {
            1: [],
            2: [],
            3: []
        }
        for coeff, *indices in modes:
            ints = [int(i) for i in indices]
            num_body = len(set(ints))
            sorted_integrals[num_body].append((coeff, tuple(ints)))

        prop = VibrationalEnergy([
            VibrationalIntegrals(num_body, ints)
            for num_body, ints in sorted_integrals.items()
        ])
        prop.basis = 2
        self._driver_result.add_property(prop)
        prop = OccupiedModals()
        prop.basis = 2
        self._driver_result.add_property(prop)
    def test_from_hdf5(self):
        """Test from_hdf5."""
        with tempfile.TemporaryFile() as tmp_file:
            with h5py.File(tmp_file, "w") as file:
                self.prop.to_hdf5(file)

            with h5py.File(tmp_file, "r") as file:
                read_prop = OccupiedModals.from_hdf5(file["OccupiedModals"])

                self.assertEqual(self.prop, read_prop)
class TestOccupiedModals(PropertyTest):
    """Test OccupiedModals Property"""

    def setUp(self):
        """Setup basis."""
        super().setUp()
        basis = HarmonicBasis([2, 3, 4])
        self.prop = OccupiedModals()
        self.prop.basis = basis

    def test_second_q_ops(self):
        """Test second_q_ops."""
        ops = [self.prop.second_q_ops()["0"]]
        expected = [
            [("NIIIIIIII", (1 + 0j)), ("INIIIIIII", (1 + 0j))],
            [("IINIIIIII", (1 + 0j)), ("IIINIIIII", (1 + 0j)), ("IIIINIIII", (1 + 0j))],
            [
                ("IIIIINIII", (1 + 0j)),
                ("IIIIIINII", (1 + 0j)),
                ("IIIIIIINI", (1 + 0j)),
                ("IIIIIIIIN", (1 + 0j)),
            ],
        ]
        for op, expected_op_list in zip(ops, expected):
            self.assertEqual(op.to_list(), expected_op_list)

    def test_to_hdf5(self):
        """Test to_hdf5."""
        with tempfile.TemporaryFile() as tmp_file:
            with h5py.File(tmp_file, "w") as file:
                self.prop.to_hdf5(file)

    def test_from_hdf5(self):
        """Test from_hdf5."""
        with tempfile.TemporaryFile() as tmp_file:
            with h5py.File(tmp_file, "w") as file:
                self.prop.to_hdf5(file)

            with h5py.File(tmp_file, "r") as file:
                read_prop = OccupiedModals.from_hdf5(file["OccupiedModals"])

                self.assertEqual(self.prop, read_prop)
    def run(self) -> VibrationalStructureDriverResult:
        if self._logfile is not None:
            glr = GaussianLogResult(self._logfile)
        else:
            glr = GaussianLogDriver(jcf=self._jcf).run()

        driver_result = VibrationalStructureDriverResult()
        driver_result.add_property(glr.get_vibrational_energy(self._normalize))
        driver_result.num_modes = len(glr.a_to_h_numbering)
        driver_result.add_property(OccupiedModals())

        return driver_result
    def test_particle_number(self) -> None:
        """Tests the ParticleNumber property."""
        container = ElectronicPropertiesContainer()

        with self.subTest("initially None"):
            self.assertIsNone(container.particle_number)

        with self.subTest("wrong setting type"):
            with self.assertRaises(TypeError):
                container.particle_number = OccupiedModals()  # type: ignore[assignment]

        with self.subTest("successful setting"):
            container.particle_number = ParticleNumber(1, 1)
            self.assertIn(ParticleNumber, container)

        with self.subTest("removal via None setting"):
            container.particle_number = None
            self.assertNotIn(ParticleNumber, container)
    def test_magnetization(self) -> None:
        """Tests the Magnetization property."""
        container = ElectronicPropertiesContainer()

        with self.subTest("initially None"):
            self.assertIsNone(container.magnetization)

        with self.subTest("wrong setting type"):
            with self.assertRaises(TypeError):
                container.magnetization = OccupiedModals()  # type: ignore[assignment]

        with self.subTest("successful setting"):
            container.magnetization = Magnetization(1)
            self.assertIn(Magnetization, container)

        with self.subTest("removal via None setting"):
            container.magnetization = None
            self.assertNotIn(Magnetization, container)
    def test_electronic_dipole_moment(self) -> None:
        """Tests the ElectronicDipoleMoment property."""
        container = ElectronicPropertiesContainer()

        with self.subTest("initially None"):
            self.assertIsNone(container.electronic_dipole_moment)

        with self.subTest("wrong setting type"):
            with self.assertRaises(TypeError):
                container.electronic_dipole_moment = OccupiedModals()  # type: ignore[assignment]

        with self.subTest("successful setting"):
            container.electronic_dipole_moment = ElectronicDipoleMoment()
            self.assertIn(ElectronicDipoleMoment, container)

        with self.subTest("removal via None setting"):
            container.electronic_dipole_moment = None
            self.assertNotIn(ElectronicDipoleMoment, container)
    def test_angular_momentum(self) -> None:
        """Tests the AngularMomentum property."""
        container = ElectronicPropertiesContainer()

        with self.subTest("initially None"):
            self.assertIsNone(container.angular_momentum)

        with self.subTest("wrong setting type"):
            with self.assertRaises(TypeError):
                container.angular_momentum = OccupiedModals()  # type: ignore[assignment]

        with self.subTest("successful setting"):
            container.angular_momentum = AngularMomentum(1)
            self.assertIn(AngularMomentum, container)

        with self.subTest("removal via None setting"):
            container.angular_momentum = None
            self.assertNotIn(AngularMomentum, container)
Esempio n. 9
0
    def test_occupied_modals(self) -> None:
        """Tests the OccupiedModals property."""
        container = VibrationalPropertiesContainer()

        with self.subTest("initially None"):
            self.assertIsNone(container.occupied_modals)

        with self.subTest("wrong setting type"):
            with self.assertRaises(TypeError):
                container.occupied_modals = ElectronicDipoleMoment(
                )  # type: ignore[assignment]

        with self.subTest("successful setting"):
            container.occupied_modals = OccupiedModals()
            self.assertIn(OccupiedModals, container)

        with self.subTest("removal via None setting"):
            container.occupied_modals = None
            self.assertNotIn(OccupiedModals, container)
 def setUp(self):
     """Setup basis."""
     super().setUp()
     basis = HarmonicBasis([2, 3, 4])
     self.prop = OccupiedModals()
     self.prop.basis = basis
Esempio n. 11
0
 def setUp(self) -> None:
     super().setUp()
     self.property = OccupiedModals()
 def test_custom_property(self) -> None:
     """Tests support for custom property objects."""
     container = ElectronicPropertiesContainer()
     container.add(OccupiedModals())
     self.assertIn(OccupiedModals, container)