def bandit_mutate_core_fp_ops(self, primary, new_op, n, indx=0, depth=0): if isinstance(primary, str): return primary, indx, False, False op = primary.op sig = self.funcs[op] ret_form = SExpr() if sig[-1] != 'Bool' and indx == n: new_sig = self.funcs[new_op] if op == new_op: return primary, indx, True, True ret_form.op = new_op start = 0 if sig[0] == "Mode" and new_sig[0] == "Mode": ret_form.append(primary.args[0]) start = 1 elif sig[0] == "Mode": start = 1 elif new_sig[0] == "Mode": ret_form.append(choice(self.rounding_modes)) while len(ret_form.args) < len(new_sig) - 1: if start < len(sig) - 1: ret_form.append(primary.args[start]) start += 1 else: ret_form.append(self.gen_rand_sexpr(depth + 1)) return ret_form, indx, True, False elif depth != 0: indx += 1 start = 0 ret_form.op = op if sig[0] == "Mode": start = 1 ret_form.append(primary.args[0]) done = False fail = False for i in range(start, len(sig) - 1): if not done: arg, indx, done, fail = self.bandit_mutate_core_fp_ops( primary.args[i], new_op, n, indx, depth + 1) ret_form.append(arg) else: ret_form.append(primary.args[i]) return ret_form, indx, done, fail
def bandit_mutate_core_bool_ops(self, primary, new_op): if primary.op == new_op: return primary, 0, True, True ret_form = SExpr() ret_form.op = new_op new_sig = self.funcs[ret_form.op] start = 0 while len(ret_form.args) < len(new_sig) - 1: if start < len(primary.args): ret_form.append(primary.args[start]) start += 1 else: ret_form.append(self.gen_rand_sexpr(1)) return ret_form, 0, True, False