pint icon indicating copy to clipboard operation
pint copied to clipboard

Check on percentage fails

Open simutisernestas opened this issue 10 months ago • 1 comments

>>> from pint import Quantity
>>> pq = Quantity(1, "%")
>>> pq.check("%")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/facets/plain/quantity.py", line 360, in check
    return self.dimensionality == self._REGISTRY.get_dimensionality(dimension)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/facets/plain/registry.py", line 717, in get_dimensionality
    input_units = to_units_container(input_units)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/util.py", line 1060, in to_units_container
    return ParserHelper.from_string(unit_like)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/util.py", line 774, in from_string
    ret = build_eval_tree(gen).evaluate(
          ^^^^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/pint_eval.py", line 565, in build_eval_tree
    result, _ = _build_eval_tree(tokens, op_priority, 0, 0)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/pint_eval.py", line 490, in _build_eval_tree
    right, index = _build_eval_tree(
                   ^^^^^^^^^^^^^^^^^
  File "/home/ernie/code/costmodels/.pixi/envs/test/lib/python3.12/site-packages/pint/pint_eval.py", line 514, in _build_eval_tree
    assert result is not None
           ^^^^^^^^^^^^^^^^^^
AssertionError
>>> pq = Quantity(1, "km")
>>> pq.check("m")
True
>>> 

simutisernestas avatar Mar 05 '25 10:03 simutisernestas

this is insteresting, it's because % is converted using a preprocessor so isn't recognised as a unit. so I suppose the preprocessors should be applied anywhere there is a text input

andrewgsavage avatar Aug 01 '25 11:08 andrewgsavage