Example #1
0
 def field(self, model, field_schema, field):
     if field_schema[
             1] == 'RPNValue' and elegant_lattice_importer.is_rpn_value(
                 model[field]):
         if model[field] not in self.result:
             v, err = _parse_expr(model[field], self.rpn_variables)
             if not err:
                 self.result[model[field]] = v
Example #2
0
def _iterator_rpn_values(state, model, element_schema=None, field_name=None):
    if element_schema:
        if element_schema[
                1] == 'RPNValue' and elegant_lattice_importer.is_rpn_value(
                    model[field_name]):
            v, err = _parse_expr(model[field_name], state['rpnVariables'])
            if not err:
                state['cache'][model[field_name]] = v
Example #3
0
def prepare_for_client(data):
    if 'models' not in data:
        return data
    # evaluate rpn values into model.rpnCache
    variables = _variables_to_postfix(data.models.rpnVariables)
    cache = LatticeUtil(data, _SCHEMA).iterate_models(
        RPNValueIterator(variables)).result
    data.models.rpnCache = cache
    for rpn_var in data.models.rpnVariables:
        v, err = _parse_expr(rpn_var.value, variables)
        if not err:
            cache[rpn_var.name] = v
            if elegant_lattice_importer.is_rpn_value(rpn_var.value):
                cache[rpn_var.value] = v
    return data
Example #4
0
def prepare_for_client(data):
    if "models" not in data:
        return data
    # evaluate rpn values into model.rpnCache
    cache = {}
    data["models"]["rpnCache"] = cache
    state = {"cache": cache, "rpnVariables": data["models"]["rpnVariables"]}
    _iterate_model_fields(data, state, _iterator_rpn_values)

    for rpn_var in data["models"]["rpnVariables"]:
        v, err = elegant_lattice_importer.parse_rpn_value(rpn_var["value"], data["models"]["rpnVariables"])
        if not err:
            cache[rpn_var["name"]] = v
            if elegant_lattice_importer.is_rpn_value(rpn_var["value"]):
                cache[rpn_var["value"]] = v
    return data
Example #5
0
def _iterator_commands(state, model, element_schema=None, field_name=None):
    # only interested in commands, not elements
    if '_type' not in model:
        return
    if element_schema:
        state['field_index'] += 1
        value = model[field_name]
        default_value = element_schema[2]
        if value is not None and default_value is not None:
            if str(value) != str(default_value):
                if element_schema[
                        1] == 'RPNValue' and elegant_lattice_importer.is_rpn_value(
                            value):
                    state['commands'] += '  {} = "({})",'.format(
                        field_name, value) + "\n"
                elif element_schema[1] == 'StringArray':
                    state['commands'] += '  {}[0] = {},'.format(
                        field_name, value) + "\n"
                else:
                    #TODO(pjm): combine with lattice file input formatting below
                    if element_schema[1] == 'OutputFile':
                        value = state['filename_map']['{}-{}'.format(
                            model['_id'], state['field_index'])]
                    elif element_schema[1].startswith('InputFile'):
                        value = 'command_{}-{}.{}'.format(
                            model['_type'], field_name, value)
                    elif element_schema[1] == 'BeamInputFile':
                        value = 'bunchFile-sourceFile.{}'.format(value)
                    elif element_schema[1] == 'ElegantBeamlineList':
                        value = state['beamline_map'][int(value)]
                    elif element_schema[1] == 'ElegantLatticeList':
                        if value and value == 'Lattice':
                            value = 'elegant.lte'
                        else:
                            value = value + '.filename.lte'
                    state['commands'] += '  {} = "{}",'.format(
                        field_name, value) + "\n"
    else:
        state['field_index'] = 0
        if state['commands']:
            state['commands'] += '&end' + "\n"
        state['commands'] += "\n" + '&{}'.format(model['_type']) + "\n"
        if model['_type'] == 'run_setup':
            state['commands'] += '  semaphore_file = {},'.format(
                _ELEGANT_SEMAPHORE_FILE) + "\n"
Example #6
0
def prepare_for_client(data):
    if 'models' not in data:
        return data
    # evaluate rpn values into model.rpnCache
    cache = {}
    data['models']['rpnCache'] = cache
    state = {
        'cache': cache,
        'rpnVariables': data['models']['rpnVariables'],
    }
    _iterate_model_fields(data, state, _iterator_rpn_values)

    for rpn_var in data['models']['rpnVariables']:
        v, err = elegant_lattice_importer.parse_rpn_value(rpn_var['value'], data['models']['rpnVariables'])
        if not err:
            cache[rpn_var['name']] = v
            if elegant_lattice_importer.is_rpn_value(rpn_var['value']):
                cache[rpn_var['value']] = v
    return data
Example #7
0
def prepare_for_client(data):
    if 'models' not in data:
        return data
    # evaluate rpn values into model.rpnCache
    cache = {}
    data['models']['rpnCache'] = cache
    variables = _variables_to_postfix(data['models']['rpnVariables'])
    state = {
        'cache': cache,
        'rpnVariables': variables,
    }
    _iterate_model_fields(data, state, _iterator_rpn_values)

    for rpn_var in data['models']['rpnVariables']:
        v, err = _parse_expr(rpn_var['value'], variables)
        if not err:
            cache[rpn_var['name']] = v
            if elegant_lattice_importer.is_rpn_value(rpn_var['value']):
                cache[rpn_var['value']] = v
    return data
Example #8
0
def _iterator_commands(state, model, element_schema=None, field_name=None):
    # only interested in commands, not elements
    if "_type" not in model:
        return
    if element_schema:
        state["field_index"] += 1
        value = model[field_name]
        default_value = element_schema[2]
        if value is not None and default_value is not None:
            if str(value) != str(default_value):
                if element_schema[1] == "RPNValue" and elegant_lattice_importer.is_rpn_value(value):
                    state["commands"] += '  {} = "({})",'.format(field_name, value) + "\n"
                elif element_schema[1] == "StringArray":
                    state["commands"] += "  {}[0] = {},".format(field_name, value) + "\n"
                else:
                    # TODO(pjm): combine with lattice file input formatting below
                    if element_schema[1] == "OutputFile":
                        value = state["filename_map"]["{}-{}".format(model["_id"], state["field_index"])]
                    elif element_schema[1].startswith("InputFile"):
                        value = "command_{}-{}.{}".format(model["_type"], field_name, value)
                    elif element_schema[1] == "BeamInputFile":
                        value = "bunchFile-sourceFile.{}".format(value)
                    elif element_schema[1] == "ElegantBeamlineList":
                        value = state["beamline_map"][int(value)]
                    elif element_schema[1] == "ElegantLatticeList":
                        if value and value == "Lattice":
                            value = "elegant.lte"
                        else:
                            value = value + ".filename.lte"
                    state["commands"] += '  {} = "{}",'.format(field_name, value) + "\n"
    else:
        state["field_index"] = 0
        if state["commands"]:
            state["commands"] += "&end" + "\n"
        state["commands"] += "\n" + "&{}".format(model["_type"]) + "\n"
        if model["_type"] == "run_setup":
            state["commands"] += "  semaphore_file = {},".format(_ELEGANT_SEMAPHORE_FILE) + "\n"
Example #9
0
def _format_rpn_value(value, is_command=False):
    if elegant_lattice_importer.is_rpn_value(value):
        value = _infix_to_postfix(value)
        if is_command:
            return '({})'.format(value)
    return value
Example #10
0
def _iterator_rpn_values(state, model, element_schema=None, field_name=None):
    if element_schema:
        if element_schema[1] == "RPNValue" and elegant_lattice_importer.is_rpn_value(model[field_name]):
            v, err = elegant_lattice_importer.parse_rpn_value(model[field_name], state["rpnVariables"])
            if not err:
                state["cache"][model[field_name]] = v
Example #11
0
def _format_rpn_value(value, is_command=False):
    if elegant_lattice_importer.is_rpn_value(value):
        value = _infix_to_postfix(value)
        if is_command:
            return '({})'.format(value)
    return value
Example #12
0
def _iterator_rpn_values(state, model, element_schema=None, field_name=None):
    if element_schema:
        if element_schema[1] == 'RPNValue' and elegant_lattice_importer.is_rpn_value(model[field_name]):
            v, err = _parse_expr(model[field_name], state['rpnVariables'])
            if not err:
                state['cache'][model[field_name]] = v