Skip to content
Snippets Groups Projects
Commit 0d771720 authored by Martin Lange's avatar Martin Lange
Browse files

slightly optimize tool function `equivalent_units`

parent 2f8530f6
No related branches found
No related tags found
1 merge request!222Xarray optimizations
......@@ -226,11 +226,20 @@ class TestUnitsTools(unittest.TestCase):
_result = self.benchmark(is_quantified, xdata=xdata)
@pytest.mark.benchmark(group="data-tools")
def test_equivalent_units(self):
def test_equivalent_units_true(self):
time = dt.datetime(2000, 1, 1)
info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="mm")
xdata = full(0.0, "test", info, time)
_result = self.benchmark(equivalent_units, unit1=xdata, unit2="L/m^2")
result = self.benchmark(equivalent_units, unit1=xdata, unit2="L/m^2")
self.assertTrue(result)
@pytest.mark.benchmark(group="data-tools")
def test_equivalent_units_False(self):
time = dt.datetime(2000, 1, 1)
info = fm.Info(time=time, grid=fm.UniformGrid((2, 1)), units="mm")
xdata = full(0.0, "test", info, time)
result = self.benchmark(equivalent_units, unit1=xdata, unit2="m")
self.assertFalse(result)
@pytest.mark.benchmark(group="data-tools")
def test_compatible_units(self):
......
......@@ -686,8 +686,10 @@ def equivalent_units(unit1, unit2):
Unit equivalence.
"""
unit1, unit2 = _get_pint_units(unit1), _get_pint_units(unit2)
ratio = ((1 * unit1) / (1 * unit2)).to_base_units()
return ratio.dimensionless and np.isclose(ratio.magnitude, 1)
try:
return np.isclose((1.0 * unit1).to(unit2).magnitude, 1.0)
except pint.errors.DimensionalityError:
return False
def assert_type(cls, slot, obj, types):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment