Example #1
0
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,
        ), ),
    )
Example #3
0
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,
    )
Example #4
0
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())