Beispiel #1
0
 def gen_division_with_result(self, result, depth=0):
     """Generate a, b with a / b = result."""
     left, right = self._gen_division_operand(result)
     return Division(
         self.gen_expr_with_result(left, depth + 1, [2, 2, 1, 1]),
         self.gen_expr_with_result(right, depth + 1, [2, 2, 1, 1]),
     )
Beispiel #2
0
 def gen_expr_with_result(self, result, depth=0, op_weight=None):
     """Generate a random expression with given result."""
     if op_weight is None:
         op_weight = [1, 1, 1, 1]
     if random.random() < self._ending_prob(depth):
         if result.denominator == 1:
             return Integer(result.numerator)
         return Division(
             Integer(result.numerator),
             Integer(result.denominator),
         )
     ans = None
     while ans is None:
         meth = weighted_choice(list(zip(self.op_gen_methods, op_weight)))
         ans = meth(result, depth)
     return ans