在不同样式的公式之间转换
项目描述
不同表达式的简单转换。Formulate目前支持在ROOT和numexpr风格的表达式之间转换。
安装
像安装其他Python包一样安装制定
pip install --user formulate
或类似(如果您愿意,可以使用`sudo、`virtualenv或`conda`)。
使用方法
命令行使用
$ python -m formulate --from-root '(A && B) || TMath::Sqrt(A)' --to-numexpr
(A & B) | sqrt(A)
$ python -m formulate --from-numexpr '(A & B) | sqrt(A)' --to-root
(A && B) || TMath::Sqrt(A)
$ python -m formulate --from-root '(A && B) || TMath::Sqrt(1.23) * e**1.2 + 5*pi' --variables
A
B
$ python -m formulate --from-root '(A && B) || TMath::Sqrt(1.23) * e**1.2 + 5*pi' --named-constants
E
PI
$ python -m formulate --from-root '(A && B) || TMath::Sqrt(1.23) * e**1.2 + 5*pi' --unnamed-constants
1.2
1.23
5
API
最基本的使用方法包括调用from_$BACKEND然后调用to_$BACKEND,例如使用ROOT风格的表达式开始时
>>> import formulate
>>> momentum = formulate.from_root('TMath::Sqrt(X_PX**2 + X_PY**2 + X_PZ**2)')
>>> momentum
Expression<SQRT>(Expression<ADD>(Expression<POW>(Variable(X_PX), UnnamedConstant(2)), Expression<POW>(Variable(X_PY), UnnamedConstant(2)), Expression<POW>(Variable(X_PZ), UnnamedConstant(2))))
>>> momentum.to_numexpr()
'sqrt(((X_PX ** 2) + (X_PY ** 2) + (X_PZ ** 2)))'
>>> momentum.to_root()
'TMath::Sqrt(((X_PX ** 2) + (X_PY ** 2) + (X_PZ ** 2)))'
类似地,当使用numexpr风格的表达式开始时
>>> my_selection = formulate.from_numexpr('X_PT > 5 & (Mu_NHits > 3 | Mu_PT > 10)')
>>> my_selection.to_root()
'(X_PT > 5) && ((Mu_NHits > 3) || (Mu_PT > 10))'
>>> my_selection.to_numexpr()
'(X_PT > 5) & ((Mu_NHits > 3) | (Mu_PT > 10))'
如果事先不知道表达式的类型,formulate也可以自动检测
>>> my_sum = formulate.from_auto('True + False')
>>> my_sum.to_root()
'true + false'
>>> my_sum.to_numexpr()
'True + False'
表达式对象
当调用from_*时,返回的对象是从formulate.ExpressionComponent派生出来的。从这个对象中,您可以检查表达式以找到它的依赖项
>>> my_check = formulate.from_auto('(X_THETA*TMath::DegToRad() > pi/4) && D_PE > 9.2')
>>> my_check.variables
{'D_PE', 'X_THETA'}
>>> my_check.named_constants
{'DEG2RAD', 'PI'}
>>> my_check.unnamed_constants
{'4', '9.2'}
此外,ExpressionComponent可以使用操作符和numpy函数进行组合
>>> new_selection = (momentum > 100) and (my_check or (numpy.sqrt(my_sum) < 1))
>>> new_selection.to_numexpr()
'((X_THETA * 0.017453292519943295) > (3.141592653589793 / 4)) & (D_PE > 9.2)'
由于==操作符返回一个新的表达式,因此不能用它来检查相等性。相反,应该使用.equivalent方法
待办事项:使用 expression.equivalent 实现此功能!
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源代码分发
formulate-0.1.1.tar.gz (26.4 kB 查看散列)
构建分发
formulate-0.1.1-py2.py3-none-any.whl (21.5 kB 查看散列)
关闭
formulate-0.1.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8ce3b7a785f40157619c2ea3a5722af323e30f3f3540d57a9317823ad1149afd |
|
MD5 | b9fb5ddcbb67f8b412bafc16659660b4 |
|
BLAKE2b-256 | c5397c55af7fafbdc40d09ae7e21728f95bcbb077ab28b45c511aafbf8deebec |
关闭
formulate-0.1.1-py2.py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 2524c3bd5072e6de3ad61701cff06c8230a38eb8bc881e6415bdd8a0c2971ed5 |
|
MD5 | b5ee5c4518f7865933d2d68103717835 |
|
BLAKE2b-256 | fadb136dfc9cff8c220d4752f47ef312d8631c2a308d63666925a978874f5d2a |