def get_application_data(data, **kwargs): assert 'method' in data assert data.method in _METHODS, \ 'unknown application data method: {}'.format(data.method) cv = code_variable.CodeVar( data.variables, code_variable.PurePythonEval(_MADX_CONSTANTS), case_insensitive=True, ) if data.method == 'rpn_value': # accept array of values enclosed in curly braces if re.search(r'^\{.*\}$', data.value): data.result = '' return data v, err = cv.eval_var(data.value) if err: data.error = err else: data.result = v return data if data.method == 'recompute_rpn_cache_values': cv.recompute_cache(data.cache) return data if data.method == 'validate_rpn_delete': model_data = simulation_db.read_json( simulation_db.sim_data_file(data.simulationType, data.simulationId)) data.error = cv.validate_var_delete( data.name, model_data, _SCHEMA ) return data
def elegant_code_var(variables): _PI = 4 * math.atan(1) class _P(code_variable.PurePythonEval): _OPS = PKDict({ '<': operator.lt, '>': operator.gt, 'beta.p': lambda a: a / (math.sqrt((1 + (a * a)))), 'dacos': lambda a: math.acos(a) * 180 / _PI, 'dasin': lambda a: math.asin(a) * 180 / _PI, 'datan': lambda a: math.atan(a) * 180 / _PI, 'dcos': lambda a: math.cos(a * _PI / 180), 'dsin': lambda a: math.sin(a * _PI / 180), 'dtan': lambda a: math.tan(a * _PI / 180), 'gamma.beta': lambda a: 1 / math.sqrt(1 - (a * a)), 'gamma.p': lambda a: math.sqrt(1 + (a * a)), # TODO(e-carlin): Should not need lambda. # https://bugs.python.org/issue29299 'ln': lambda a: math.log(a), 'mod': operator.mod, 'mult': operator.mul, 'p.beta': lambda a: a / math.sqrt(1 - (a * a)), 'p.gamma': lambda a: math.sqrt((a * a) - 1), 'sqr': lambda a: a * a, **code_variable.PurePythonEval._OPS }) def eval_var(self, expr, depends, variables): if re.match(r'^\{.+\}$', expr): # It is a shell command return expr, None return super().eval_var(expr, depends, variables) return code_variable.CodeVar( variables, _P(constants=PKDict( c_gs=2.99792458e10, c_mks=2.99792458e8, e_cgs=4.80325e-10, e_mks=1.60217733e-19, hbar_MeVs=6.582173e-22, hbar_mks=1.0545887e-34, kb_cgs=1.380658e-16, kb_mks=1.380658e-23, me_cgs=9.1093897e-28, me_mks=9.1093897e-31, mev=0.51099906, mp_mks=1.6726485e-27, pi=_PI, re_cgs=2.81794092e-13, re_mks=2.81794092e-15, ), ), )
def code_var(variables): class _P(code_variable.PurePythonEval): #TODO(pjm): parse from opal files into schema _OPAL_PI = 3.14159265358979323846 _OPAL_CONSTANTS = PKDict( pi=_OPAL_PI, twopi=_OPAL_PI * 2.0, raddeg=180.0 / _OPAL_PI, degrad=_OPAL_PI / 180.0, e=2.7182818284590452354, emass=0.51099892e-03, pmass=0.93827204e+00, hmmass=0.939277e+00, umass=238 * 0.931494027e+00, cmass=12 * 0.931494027e+00, mmass=0.10565837, dmass=2*0.931494027e+00, xemass=124*0.931494027e+00, clight=299792458.0, p0=1, seed=123456789, ) def __init__(self): super().__init__(self._OPAL_CONSTANTS) def eval_var(self, expr, depends, variables): if re.match(r'^\{.+\}$', expr): # It is an array of values return expr, None return super().eval_var(expr, depends, variables) return code_variable.CodeVar( variables, _P(), case_insensitive=True, )
def _code_var(variables): return code_variable.CodeVar( variables, code_variable.PurePythonEval(_OPAL_CONSTANTS), case_insensitive=True, )
def elegant_code_var(variables): return code_variable.CodeVar(variables, ElegantRPNEval())