Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion formulate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@

from .backends import from_numexpr, to_numexpr
from .backends import from_root, to_root
from .expression import Expression
from .expression import ExpressionComponent, SingleComponent, Expression, Variable, Constant
from .parser import ParsingException
from .version import __version__


__all__ = [
'ExpressionComponent',
'SingleComponent',
'Expression',
'Variable',
'Constant',
'ParsingException',
# numexpr
'from_numexpr',
Expand Down
106 changes: 62 additions & 44 deletions formulate/backends/ROOT.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from __future__ import division
from __future__ import print_function

from ..identifiers import IDs
from ..parser import Operator, Function, Parser
from ..identifiers import IDs, ConstantIDs
from ..parser import POperator, PFunction, Parser, PConstant


__all__ = [
Expand All @@ -13,54 +13,72 @@


config = [
Operator(IDs.MINUS, '-', rhs_only=True),
Operator(IDs.PLUS, '+', rhs_only=True),
Operator(IDs.ADD, '+'),
Operator(IDs.SUB, '-'),
Operator(IDs.MUL, '*'),
Operator(IDs.DIV, '/'),
Operator(IDs.MOD, '%'),
POperator(IDs.MINUS, '-', rhs_only=True),
POperator(IDs.PLUS, '+', rhs_only=True),
POperator(IDs.ADD, '+'),
POperator(IDs.SUB, '-'),
POperator(IDs.MUL, '*'),
POperator(IDs.DIV, '/'),
POperator(IDs.MOD, '%'),

Operator(IDs.EQ, '=='),
Operator(IDs.NEQ, '!='),
Operator(IDs.GT, '>'),
Operator(IDs.GTEQ, '>='),
Operator(IDs.LT, '<'),
Operator(IDs.LTEQ, '<='),
POperator(IDs.EQ, '=='),
POperator(IDs.NEQ, '!='),
POperator(IDs.GT, '>'),
POperator(IDs.GTEQ, '>='),
POperator(IDs.LT, '<'),
POperator(IDs.LTEQ, '<='),

Operator(IDs.AND, '&&'),
Operator(IDs.OR, '||'),
Operator(IDs.NOT, '!', rhs_only=True),
POperator(IDs.AND, '&&'),
POperator(IDs.OR, '||'),
POperator(IDs.NOT, '!', rhs_only=True),

Function(IDs.SQRT, 'sqrt'),
Function(IDs.SQRT, 'TMath::Sqrt'),
Function(IDs.ABS, 'TMath::Abs'),
PFunction(IDs.SQRT, 'sqrt'),
PFunction(IDs.SQRT, 'TMath::Sqrt'),
PFunction(IDs.ABS, 'TMath::Abs'),

Function(IDs.LOG, 'log'),
Function(IDs.LOG, 'TMath::Log'),
Function(IDs.LOG2, 'log2'),
Function(IDs.LOG2, 'TMath::Log2'),
Function(IDs.LOG10, 'log10'),
Function(IDs.LOG10, 'TMath::Log10'),
PFunction(IDs.LOG, 'log'),
PFunction(IDs.LOG, 'TMath::Log'),
PFunction(IDs.LOG2, 'log2'),
PFunction(IDs.LOG2, 'TMath::Log2'),
PFunction(IDs.LOG10, 'log10'),
PFunction(IDs.LOG10, 'TMath::Log10'),

Function(IDs.EXP, 'exp'),
Function(IDs.EXP, 'TMath::Exp'),
PFunction(IDs.EXP, 'exp'),
PFunction(IDs.EXP, 'TMath::Exp'),

Function(IDs.SIN, 'sin'),
Function(IDs.SIN, 'TMath::Sin'),
Function(IDs.ASIN, 'arcsin'),
Function(IDs.ASIN, 'TMath::ASin'),
Function(IDs.COS, 'cos'),
Function(IDs.COS, 'TMath::Cos'),
Function(IDs.ACOS, 'arccos'),
Function(IDs.ACOS, 'TMath::ACos'),
Function(IDs.TAN, 'tan'),
Function(IDs.TAN, 'TMath::Tan'),
Function(IDs.ATAN, 'arctan'),
Function(IDs.ATAN, 'TMath::ATan'),
Function(IDs.ATAN2, 'arctan2', 2),
Function(IDs.ATAN2, 'TMath::ATan2', 2),
PFunction(IDs.SIN, 'sin'),
PFunction(IDs.SIN, 'TMath::Sin'),
PFunction(IDs.ASIN, 'arcsin'),
PFunction(IDs.ASIN, 'TMath::ASin'),
PFunction(IDs.COS, 'cos'),
PFunction(IDs.COS, 'TMath::Cos'),
PFunction(IDs.ACOS, 'arccos'),
PFunction(IDs.ACOS, 'TMath::ACos'),
PFunction(IDs.TAN, 'tan'),
PFunction(IDs.TAN, 'TMath::Tan'),
PFunction(IDs.ATAN, 'arctan'),
PFunction(IDs.ATAN, 'TMath::ATan'),
PFunction(IDs.ATAN2, 'arctan2', 2),
PFunction(IDs.ATAN2, 'TMath::ATan2', 2),
]

constants = [
PConstant(ConstantIDs.TRUE, 'true'),
PConstant(ConstantIDs.FALSE, 'false'),

root_parser = Parser('ROOT', config)
PConstant(ConstantIDs.SQRT2, 'sqrt2'),
PConstant(ConstantIDs.SQRT2, 'TMath::Sqrt2()'),
PConstant(ConstantIDs.E, 'e'),
PConstant(ConstantIDs.E, 'TMath::E()'),
PConstant(ConstantIDs.PI, 'pi'),
PConstant(ConstantIDs.PI, 'TMath::Pi()'),
PConstant(ConstantIDs.INVPI, 'TMath::InvPi()'),
PConstant(ConstantIDs.PIOVER2, 'TMath::PiOver2()'),
PConstant(ConstantIDs.PIOVER4, 'TMath::PiOver4()'),
PConstant(ConstantIDs.TAU, 'TMath::TwoPi()'),
PConstant(ConstantIDs.LN10, 'ln10'),
PConstant(ConstantIDs.LN10, 'TMath::Ln10()'),
PConstant(ConstantIDs.LOG10E, 'TMath::LogE()'),
]

root_parser = Parser('ROOT', config, constants)
113 changes: 66 additions & 47 deletions formulate/backends/numexpr.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
from __future__ import division
from __future__ import print_function

from ..identifiers import IDs
from ..parser import Operator, Function, Parser
import math

from ..identifiers import IDs, ConstantIDs
from ..parser import POperator, PFunction, Parser, PConstant


__all__ = [
Expand All @@ -13,51 +15,68 @@


config = [
Operator(IDs.MINUS, '-', rhs_only=True),
Operator(IDs.PLUS, '+', rhs_only=True),
Operator(IDs.ADD, '+'),
Operator(IDs.SUB, '-'),
Operator(IDs.MUL, '*'),
Operator(IDs.DIV, '/'),
Operator(IDs.MOD, '%'),

Operator(IDs.EQ, '=='),
Operator(IDs.NEQ, '!='),
Operator(IDs.GT, '>'),
Operator(IDs.GTEQ, '>='),
Operator(IDs.LT, '<'),
Operator(IDs.LTEQ, '<='),

Operator(IDs.AND, '&'),
Operator(IDs.OR, '|'),
Operator(IDs.NOT, '~', rhs_only=True),

Function(IDs.SQRT, 'sqrt'),
Function(IDs.ABS, 'abs'),
Function(IDs.WHERE, 'where', 3),

Function(IDs.LOG, 'log'),
Function(IDs.LOG10, 'log10'),
Function(IDs.LOG1p, 'log1p'),

Function(IDs.EXP, 'exp'),
Function(IDs.EXPM1, 'expm1'),

Function(IDs.SIN, 'sin'),
Function(IDs.ASIN, 'arcsin'),
Function(IDs.COS, 'cos'),
Function(IDs.ACOS, 'arccos'),
Function(IDs.TAN, 'tan'),
Function(IDs.ATAN, 'arctan'),
Function(IDs.ATAN2, 'arctan2', 2),

Function(IDs.SINH, 'sinh'),
Function(IDs.ASINH, 'arcsinh'),
Function(IDs.COSH, 'cosh'),
Function(IDs.ACOSH, 'arccosh'),
Function(IDs.TANH, 'tanh'),
Function(IDs.ATANH, 'arctanh'),
POperator(IDs.MINUS, '-', rhs_only=True),
POperator(IDs.PLUS, '+', rhs_only=True),
POperator(IDs.ADD, '+'),
POperator(IDs.SUB, '-'),
POperator(IDs.MUL, '*'),
POperator(IDs.DIV, '/'),
POperator(IDs.MOD, '%'),

POperator(IDs.EQ, '=='),
POperator(IDs.NEQ, '!='),
POperator(IDs.GT, '>'),
POperator(IDs.GTEQ, '>='),
POperator(IDs.LT, '<'),
POperator(IDs.LTEQ, '<='),

POperator(IDs.AND, '&'),
POperator(IDs.OR, '|'),
POperator(IDs.XOR, '^'),
POperator(IDs.NOT, '~', rhs_only=True),

PFunction(IDs.SQRT, 'sqrt'),
PFunction(IDs.ABS, 'abs'),
PFunction(IDs.WHERE, 'where', 3),

PFunction(IDs.LOG, 'log'),
PFunction(IDs.LOG10, 'log10'),
PFunction(IDs.LOG1p, 'log1p'),

PFunction(IDs.EXP, 'exp'),
PFunction(IDs.EXPM1, 'expm1'),

PFunction(IDs.SIN, 'sin'),
PFunction(IDs.ASIN, 'arcsin'),
PFunction(IDs.COS, 'cos'),
PFunction(IDs.ACOS, 'arccos'),
PFunction(IDs.TAN, 'tan'),
PFunction(IDs.ATAN, 'arctan'),
PFunction(IDs.ATAN2, 'arctan2', 2),

PFunction(IDs.SINH, 'sinh'),
PFunction(IDs.ASINH, 'arcsinh'),
PFunction(IDs.COSH, 'cosh'),
PFunction(IDs.ACOSH, 'arccosh'),
PFunction(IDs.TANH, 'tanh'),
PFunction(IDs.ATANH, 'arctanh'),
]


constants = [
PConstant(ConstantIDs.TRUE, 'True'),
PConstant(ConstantIDs.FALSE, 'False'),

PConstant(ConstantIDs.SQRT2, math.sqrt(2)),
PConstant(ConstantIDs.E, math.e),
PConstant(ConstantIDs.PI, math.pi),
PConstant(ConstantIDs.INVPI, 1/math.pi),
PConstant(ConstantIDs.PIOVER2, math.pi/2),
PConstant(ConstantIDs.PIOVER4, math.pi/4),
PConstant(ConstantIDs.TAU, 2*math.pi),
PConstant(ConstantIDs.LN10, math.log(10)),
PConstant(ConstantIDs.LOG10E, math.log10(math.e)),
]


numexpr_parser = Parser('numexpr', config)
numexpr_parser = Parser('numexpr', config, constants)
Loading