def execute(self): """ Run each parameter set. """ # Prepare parameters and responses. exprs = {} case_paths = {} inputs = [] values = [] for path in self.get_parameters(): if isinstance(path, tuple): for target in path: inputs.append(target) if not is_legal_name(target): exprs[target] = ExprEvaluator(target) path = path[0] else: inputs.append(path) if not is_legal_name(path): exprs[path] = ExprEvaluator(path) path = make_legal_path(path) values.append(self.get('case_inputs.' + path)) for path in self.get_responses(): if not is_legal_name(path): exprs[path] = ExprEvaluator(path) case_paths[path] = make_legal_path(path) length = len(values[0]) if values else 0 self.init_responses(length) # Run each parameter set. for i in range(length): # Set inputs. for j, path in enumerate(inputs): value = values[j][i] expr = exprs.get(path) if expr: expr.set(value, self.parent) else: self.parent.set(path, value) # Run workflow. self.workflow.run() # Get outputs. for path in self.get_responses(): expr = exprs.get(path) if expr: value = expr.evaluate(self.parent) else: value = self.parent.get(path) path = case_paths[path] self.set('case_outputs.' + path, value, index=(i, ), force=True)
def execute(self): """ Run each parameter set. """ # Prepare parameters and responses. exprs = {} case_paths = {} inputs = [] values = [] for path in self.get_parameters(): if isinstance(path, tuple): for target in path: inputs.append(target) if not is_legal_name(target): exprs[target] = ExprEvaluator(target) path = path[0] else: inputs.append(path) if not is_legal_name(path): exprs[path] = ExprEvaluator(path) path = make_legal_path(path) values.append(self.get('case_inputs.'+path)) for path in self.get_responses(): if not is_legal_name(path): exprs[path] = ExprEvaluator(path) case_paths[path] = make_legal_path(path) length = len(values[0]) if values else 0 self.init_responses(length) # Run each parameter set. for i in range(length): # Set inputs. for j, path in enumerate(inputs): value = values[j][i] expr = exprs.get(path) if expr: expr.set(value, self.parent) else: self.parent.set(path, value) # Run workflow. self.workflow.run() # Get outputs. for path in self.get_responses(): expr = exprs.get(path) if expr: value = expr.evaluate(self.parent) else: value = self.parent.get(path) path = case_paths[path] self.set('case_outputs.'+path, value, index=(i,), force=True)
def _split_expr(text): """Take an expression string and return varpath, expr""" if text.startswith('@') or is_legal_name(text): return text, text expr = ExprEvaluator(text) return expr.get_referenced_varpaths().pop(), text
def _translate_up(self, text, node): if is_legal_name(text): return '.'.join([node, text]) expr = ExprEvaluator(text) varpath = expr.get_referenced_varpaths().pop() return transform_expression(text, { varpath: '.'.join([node, varpath]) })
def _translate_up(self, text, node): """Upscoping""" if is_legal_name(text): return '.'.join([node, text]) expr = ExprEvaluator(text) varpath = expr.get_referenced_varpaths().pop() return transform_expression(text, { varpath: '.'.join([node, varpath]) })
def _register_expr(self, s): """If the given string contains an expression, create an ExprEvaluator and store it in self._exprs. """ if not is_legal_name(s): expr = ExprEvaluator(s) if self._exprs is None: self._exprs = {} self._exprs[s] = expr
def _register_expr(self, s): """If the given string contains an expression, create an ExprEvaluator and store it in self._exprs. """ if not is_legal_name(s): expr = ExprEvaluator(s) if self._exprs is None: self._exprs = {} self._exprs[s] = expr