В частности, я хотел бы хранить созданные величины в их единицах без какого-либо префикса, без преобразования в базовые единицы. Например, 1 миллисименс (мСм) следует хранить как 0,001 С.
Попробуем объяснить это на примере. Следующий фрагмент кода:
Код: Выделить всё
import pint
ureg = pint.UnitRegistry(system="mks")
quantity = ureg.Quantity(1, ureg.Unit("mm")) # Define quantity of 1 millimiter
stored_quantity = quantity.to_base_units()
print(stored_quantity) # print: 0.001 meter OK
Но когда я пытаюсь использовать производные количества, Pint преобразует их в базовые единицы, или ( используя другой метод to_xxx), он сохраняет полученное количество, а также префикс. Давайте посмотрим на примере:
Код: Выделить всё
quantity = ureg.Quantity(1, ureg.Unit("mJ"))
print(quantity) # 1 millijoule
print(quantity.to_root_units()) # 1.0 gram * meter ** 2 / second ** 2
print(quantity.to_base_units()) # 0.001 kilogram * meter ** 2 / second ** 2
print(quantity.to_reduced_units()) # 1 millijoule -> Preserves derived unit but also "milli"
print(quantity.to_compact()) # 1 millijoule -> Preserves derived unit but also "milli"
Конечно, можно явно вызвать:
Код: Выделить всё
stored_quantity = quantity.to(ureg.joule)
но я не смог найти способ получить информацию о ureg.joule программно.
Другой можно было бы вызвать метод to_preferred(), добавив список предпочтительных единиц измерения в ureg:
Код: Выделить всё
ureg.default_preferred_units = [ureg.siemens, ...]
print(quantity.to_preferred()) # gives 0.001J
Это приводит к тому, что метод работает очень медленно (порядка секунд для идеи).
Есть ли способ достичь этой цели ?
Подробнее здесь: https://stackoverflow.com/questions/790 ... it-to-base