def process(self): if not self.outputs[0].is_linked: return # if the user specifies a variable, they must also link a value into that socket, this will prevent Exception self.ui_message = "" if not self.all_inputs_connected(): self.ui_message = "node not fully connected" return var_names = self.get_variables() inputs = self.get_input() results = [] if var_names: input_values = [inputs.get(name) for name in var_names] parameters = match_long_repeat(input_values) for objects in zip(*parameters): object_results = [] for values in zip_long_repeat(*objects): variables = dict(zip(var_names, values)) vector = [] for formula in self.formulas(): if formula: value = safe_eval(formula, variables) vector.append(value) if self.separate: object_results.append(vector) else: object_results.extend(vector) results.append(object_results) else: def joined_formulas(f1, f2, f3, f4): built_string = "" if f1: built_string += f1 if f2: built_string += f",{f2}" if f3: built_string += f",{f3}" if f4: built_string += f",{f4}" return list(ast.literal_eval(built_string)) if self.use_ast: results = joined_formulas(*self.formulas()) else: vector = [] for formula in self.formulas(): if formula: value = safe_eval(formula, dict()) vector.append(value) results.extend(vector) if self.wrapping == "+1": results = [results] elif self.wrapping == "-1": results = results[0] if len(results) else results self.outputs['Result'].sv_set(results)
def make_points(self, variables): control_points = [] for item in self.control_points: x = safe_eval(item.x, variables) y = safe_eval(item.y, variables) control_points.append((x, y, 0)) control_points.sort(key=lambda p: p[0]) return control_points
def make_points(self, variables): control_points = [] for item in self.control_points: x = safe_eval(item.x, variables) y = safe_eval(item.y, variables) sharp = item.sharp point = ControlPoint(x, y, sharp) control_points.append(point) control_points.sort(key=lambda p: p.x) return split_points(control_points)
def process(self): if not self.outputs[0].is_linked: return var_names = self.get_variables() inputs = self.get_input() results = [] if var_names: input_values = [inputs.get(name, [[0]]) for name in var_names] parameters = match_long_repeat(input_values) else: parameters = [[[None]]] for objects in zip(*parameters): object_results = [] for values in zip_long_repeat(*objects): variables = dict(zip(var_names, values)) vector = [] for formula in self.formulas(): if formula: value = safe_eval(formula, variables) vector.append(value) if self.separate: object_results.append(vector) else: object_results.extend(vector) results.append(object_results) if self.wrap: results = [results] self.outputs['Result'].sv_set(results)
def process(self): if not self.outputs[0].is_linked: return # if the user specifies a variable, they must also link a value into that socket, this will prevent Exception self.ui_message = "" if not self.all_inputs_connected(): self.ui_message = "node not fully connected" return var_names = self.get_variables() inputs = self.get_input() results = [] if var_names: input_values = [inputs.get(name) for name in var_names] matching_f = list_match_func[self.list_match] parameters = matching_f(input_values) desired_levels = [s.depth for s in self.inputs] ops = [ self.formulas(), self.separate, var_names, [s.transform for s in self.inputs], self.as_list ] results = recurse_f_level_control(parameters, ops, formula_func, matching_f, desired_levels) else: def joined_formulas(f1, f2, f3, f4): built_string = "" if f1: built_string += f1 if f2: built_string += f",{f2}" if f3: built_string += f",{f3}" if f4: built_string += f",{f4}" return list(ast.literal_eval(built_string)) if self.use_ast: results = joined_formulas(*self.formulas()) else: vector = [] for formula in self.formulas(): if formula: value = safe_eval(formula, dict()) vector.append(value) results.extend(vector) if self.wrapping == "+1": results = [results] elif self.wrapping == "-1": results = results[0] if len(results) else results self.outputs['Result'].sv_set(results)
def formula_func(parameters, constant, matching_f): formulas, separate, var_names, transformations, as_list = constant object_results = [] for values in zip(*matching_f(parameters)): vals = [transform_data(d, tr) for d, tr in zip(values, transformations)] variables = dict(zip(var_names, vals)) vector = [] for formula in formulas: if formula: value = safe_eval(formula, variables) if as_list: vector.append(ensure_list(value)) else: vector.append(value) if separate: object_results.append(vector) else: object_results.extend(vector) return object_results