pint icon indicating copy to clipboard operation
pint copied to clipboard

Can't alias unit with prefix

Open rebeccafair opened this issue 6 years ago • 1 comments

When I try to alias meV , a KeyError is raised.

>>> from pint import UnitRegistry
>>> ureg = UnitRegistry()
>>> ureg.define('@alias meV = DEFAULT_ENERGY_UNIT')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\site-packages\pint\registry.py", line 346, in define
    self._define(Definition.from_string(line))
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\site-packages\pint\registry.py", line 1925, in _define
    definition, d, di = super()._define(definition)
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\site-packages\pint\registry.py", line 1284, in _define
    definition, d, di = super()._define(definition)
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\site-packages\pint\registry.py", line 394, in _define
    self._define_alias(definition, d, di)
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\site-packages\pint\registry.py", line 471, in _define_alias
    unit = unit_dict[definition.name]
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\collections\__init__.py", line 914, in __getitem__
    return self.__missing__(key)            # support subclasses that define __missing__
  File "C:\Users\mll13652\AppData\Local\conda\conda\envs\py37\lib\collections\__init__.py", line 906, in __missing__
    raise KeyError(key)
KeyError: 'meV'

I can work around it by specifying ureg.mDEFAULTENERGYUNIT, but it would be better if I could just alias meV. Is this a bug or are we not supposed to alias prefixed units? I'm using v0.11

rebeccafair avatar Apr 09 '20 11:04 rebeccafair

Seconded. Attemping to define using UnitRegistry.define("@alias centimeter = Centimeters") for a more user-friendly alias will fail.

flexadecimal avatar Jan 11 '22 03:01 flexadecimal