-
Notifications
You must be signed in to change notification settings - Fork 490
Open
Description
I'm not sure why this occurs, but:
foo = pint.Quantity(20, "%") * pint.Quantity(5, "%") / pint.Quantity(1, "%")
foo
<Quantity(100.0, 'percent')>
Is not the same as:
foo = 20 * ureg.percent * 5 * ureg.percent / 1 * ureg.percent
foo
<Quantity(100.0, 'percent ** 3')>
In addition, .to_reduced_units() scales and reduces to 'dimensionless' when not combining with other units:
ratio = 20 * ureg.percent * 5
ratio
<Quantity(100, 'percent')>
ratio.to_reduced_units()
<Quantity(1.0, 'dimensionless')>
But when combining they don't 'scale' or reduce to dimensionless:
foo = ratio * 1 * ureg.meter
foo
<Quantity(100.0, 'percent * meter')>
foo.to_reduced_units()
<Quantity(100.0, 'percent * meter')>
Finally, if I define my own 'percent' units like: ureg.define("percent = 0.01 * dimensionless = % = pct")
I get errors on accessing the dimensionality of the result:
foo = 20 * ureg.percent * 5 * ureg.percent * 1 * ureg.meter
foo
<Quantity(100, 'percent ** 2 * meter')>
foo.dimensionality
Traceback (most recent call last):
File "/Volumes/Data/Projects/Rangekeeper/src/.venv/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3579, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-42-6e4a081873fb>", line 1, in <module>
foo.dimensionality
File "/Volumes/Data/Projects/Rangekeeper/src/.venv/lib/python3.10/site-packages/pint/facets/plain/quantity.py", line 354, in dimensionality
self._dimensionality = self._REGISTRY._get_dimensionality(self._units)
File "/Volumes/Data/Projects/Rangekeeper/src/.venv/lib/python3.10/site-packages/pint/facets/plain/registry.py", line 722, in _get_dimensionality
self._get_dimensionality_recurse(input_units, 1, accumulator)
File "/Volumes/Data/Projects/Rangekeeper/src/.venv/lib/python3.10/site-packages/pint/facets/plain/registry.py", line 754, in _get_dimensionality_recurse
self._get_dimensionality_recurse(reg.reference, exp2, accumulator)
File "/Volumes/Data/Projects/Rangekeeper/src/.venv/lib/python3.10/site-packages/pint/facets/plain/registry.py", line 752, in _get_dimensionality_recurse
reg = self._units[self.get_name(key)]
File "/Users/daniel/.pyenv/versions/3.10.15/lib/python3.10/collections/__init__.py", line 986, in __getitem__
return self.__missing__(key) # support subclasses that define __missing__
File "/Users/daniel/.pyenv/versions/3.10.15/lib/python3.10/collections/__init__.py", line 978, in __missing__
raise KeyError(key)
KeyError: ''
What would be the best way to have 'percent' units act as proper 1/100s of dimensionless units?
Metadata
Metadata
Assignees
Labels
No labels