"register" 一个单位和带有 sympy 的前缀?

"register" a unit and prefix with sympy?

import sympy.physics.units as u
u.find_unit('cm')  # -->  'cm' found
u.find_unit('km')  # -->  'km' found

# so I can do
float(u.convert_to(2 * u.cm, u.km) / u.km)

现在我想注册 nF(纳法拉)、pF(皮法拉)和 uF(微法拉) 所以我可以像这样进行快速转换(以及其他复杂的计算):

float(u.convert_to(2 * u.uF, u.nF) / u.nF)

我的一个想法是这样做:

u.uF = 1e-6 * u.F
u.nF = 1e-9 * u.F
float(u.convert_to(36 * u.uF, u.nF) / u.nF)

这样做有什么坏处吗?我看到的一个问题是,如果我保留该单位,它只会以基数 (F) 表示。我还需要检查以确保我没有覆盖 u 的任何属性。此外,u.find_unit("nF") returns 一个空白列表。

关于如何在我们的单元中应用前缀的好参考并不多。

如果您查看 sympy.physics.units.definitions.unit_definitions.py,您将看到有关如何设置定义的示例,例如

mg = milligram = milligrams = Quantity("milligram", abbrev="mg")
mg.set_global_relative_scale_factor(milli, gram)

所以

>>> from sympy.physics.units import *
>>> nf=Quantity('nanoFarad', abbrev='nF')
>>> nf.set_global_relative_scale_factor(nano, farad)
>>> nf
nF
>>> nf.convert_to(farad)
F/1000000000