Convert between different style of formulae
Project description
Easy conversions between different styles of expressions. Formulate currently supports converting between ROOT and numexpr style expressions.
Installation
Install formulate like any other Python package:
pip install --user formulate
or similar (use `sudo, `virtualenv, or `conda` if you wish).
Usage
Command line usage
$ 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
The most basic usage involves calling from_$BACKEND and then to_$BACKEND, for example when starting with a ROOT style expression:
>>> 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)))'
Similarly, when starting with a numexpr style expression:
>>> 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))'
If the the type of expression isn’t known in advance formulate can also auto detect it:
>>> my_sum = formulate.from_auto('True + False')
>>> my_sum.to_root()
'true + false'
>>> my_sum.to_numexpr()
'True + False'
The Expression Object
When calling from_* the returned object is derived from formulate.ExpressionComponent. From this object you can inspect the expression to find it’s dependencies:
>>> 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'}
Additionally ExpressionComponent s can be combined using both operators and numpy functions:
>>> 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)'
As the == operator returns a new expression, it can’t be used to check for equality. Instead the .equivalent method should be used:
TODO: Implement this using expression.equivalent !
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file formulate-0.1.1.tar.gz
.
File metadata
- Download URL: formulate-0.1.1.tar.gz
- Upload date:
- Size: 26.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ce3b7a785f40157619c2ea3a5722af323e30f3f3540d57a9317823ad1149afd |
|
MD5 | b9fb5ddcbb67f8b412bafc16659660b4 |
|
BLAKE2b-256 | c5397c55af7fafbdc40d09ae7e21728f95bcbb077ab28b45c511aafbf8deebec |
File details
Details for the file formulate-0.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: formulate-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2524c3bd5072e6de3ad61701cff06c8230a38eb8bc881e6415bdd8a0c2971ed5 |
|
MD5 | b5ee5c4518f7865933d2d68103717835 |
|
BLAKE2b-256 | fadb136dfc9cff8c220d4752f47ef312d8631c2a308d63666925a978874f5d2a |