Exemple #1
0
 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
Exemple #2
0
    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