Line data Source code
1 : # SPDX-FileCopyrightText: 2024 PairInteraction Developers 2 : # SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : """Tests for atomic unit conversions using pint.""" 5 : 6 1 : from __future__ import annotations 7 : 8 1 : from typing import TYPE_CHECKING 9 : 10 1 : import pytest 11 : 12 1 : from tests.constants import ( 13 : GAUSS_IN_ATOMIC_UNITS, 14 : HARTREE_IN_GHZ, 15 : HARTREE_IN_INVERSE_CM, 16 : HARTREE_IN_JOULES, 17 : VOLT_PER_CM_IN_ATOMIC_UNITS, 18 : ) 19 : 20 : if TYPE_CHECKING: 21 : from pint import UnitRegistry 22 : 23 : 24 1 : def test_hartree_to_joules(ureg: UnitRegistry) -> None: 25 : """Test conversion from Hartree to Joules.""" 26 1 : one_hartree = 1 * ureg.hartree 27 1 : one_hartree_in_joules = one_hartree.to("joule") 28 1 : assert pytest.approx(one_hartree_in_joules.magnitude, rel=1e-12) == HARTREE_IN_JOULES # NOSONAR 29 : 30 : 31 1 : def test_joules_to_hartree(ureg: UnitRegistry) -> None: 32 : """Test conversion from Joules to Hartree.""" 33 1 : one_hartree_in_joules = HARTREE_IN_JOULES * ureg.joule 34 1 : result = one_hartree_in_joules.to_base_units() 35 1 : assert pytest.approx(result.magnitude, rel=1e-12) == 1.0 # NOSONAR 36 : 37 : 38 1 : def test_hartree_to_thz(ureg: UnitRegistry) -> None: 39 : """Test conversion from Hartree to THz.""" 40 1 : one_hartree = 1 * ureg.hartree 41 1 : one_hartree_in_ghz = one_hartree.to("gigahertz", "spectroscopy") 42 1 : assert pytest.approx(one_hartree_in_ghz.magnitude, rel=1e-12) == HARTREE_IN_GHZ # NOSONAR 43 : 44 : 45 1 : def test_hartree_to_inverse_cm(ureg: UnitRegistry) -> None: 46 : """Test conversion from Hartree to inverse cm.""" 47 1 : one_hartree = 1 * ureg.hartree 48 1 : one_hartree_in_inverse_cm = one_hartree.to("1/cm", "spectroscopy") 49 1 : assert pytest.approx(one_hartree_in_inverse_cm.magnitude, rel=1e-12) == HARTREE_IN_INVERSE_CM # NOSONAR 50 : 51 : 52 1 : def test_electric_field_to_atomic_units(ureg: UnitRegistry) -> None: 53 : """Test conversion from V/cm to atomic units of electric field.""" 54 1 : one_v_per_cm = 1 * ureg.volt / ureg.centimeter 55 1 : one_v_per_cm_in_atomic_units = one_v_per_cm.to_base_units() 56 1 : assert pytest.approx(one_v_per_cm_in_atomic_units.magnitude, rel=1e-12) == VOLT_PER_CM_IN_ATOMIC_UNITS # NOSONAR 57 : 58 : 59 1 : def test_magnetic_field_to_atomic_units(ureg: UnitRegistry) -> None: 60 : """Test conversion from Gauss to atomic units of magnetic field.""" 61 1 : one_gauss = 1e-4 * ureg.tesla 62 1 : one_gauss_in_atomic_units = one_gauss.to_base_units() 63 1 : assert pytest.approx(one_gauss_in_atomic_units.magnitude, rel=1e-12) == GAUSS_IN_ATOMIC_UNITS # NOSONAR