diff --git a/CHANGES b/CHANGES index 720de5092..a8366b64e 100644 --- a/CHANGES +++ b/CHANGES @@ -26,6 +26,7 @@ Pint Changelog - Add `pint.testing` with functions to compare pint objects in tests (Issue #1421). - Fix handling modulo & floordiv operator in pint_eval (Issue #1470) - Fix `to_compact` and `infer_base_unit` for non-float non_int_type. +- Fix `to_reduced_units` to work with dimensionless units. (Issue #919) ### Breaking Changes diff --git a/pint/registry.py b/pint/registry.py index 6f8ff4039..af39e33cb 100644 --- a/pint/registry.py +++ b/pint/registry.py @@ -830,6 +830,8 @@ def _get_dimensionality_ratio(self, unit1, unit2): return 1 dim1, dim2 = (self.get_dimensionality(unit) for unit in (unit1, unit2)) + if dim1 == dim2: + return 1 if not dim1 or not dim2 or dim1.keys() != dim2.keys(): # not comparable return None diff --git a/pint/testsuite/test_quantity.py b/pint/testsuite/test_quantity.py index c29fd19f5..520ccc6fe 100644 --- a/pint/testsuite/test_quantity.py +++ b/pint/testsuite/test_quantity.py @@ -664,6 +664,13 @@ def test_to_reduced_units(self): q = self.Q_(0.5, "g*t/kg") helpers.assert_quantity_equal(q.to_reduced_units(), self.Q_(0.5, "kg")) + def test_to_reduced_units_dimensionless(self): + ureg = UnitRegistry(preprocessors=[lambda x: x.replace("%", " percent ")]) + ureg.define("percent = 0.01 count = %") + Q_ = ureg.Quantity + reduced_quantity = (Q_("1 s") * Q_("5 %") / Q_("1 count")).to_reduced_units() + assert reduced_quantity == ureg.Quantity(0.05, ureg.second) + # TODO: do not subclass from QuantityTestCase class TestQuantityToCompact(QuantityTestCase):