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
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
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
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
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"
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
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
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"
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
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
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
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