Example #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]),
     )
Example #2
0
 def test_compound(self):
     expr = Division(
         Addition(
             Integer(4),
             Division(Integer(2), Integer(5)),
         ),
         Multiplication(
             Subtraction(
                 Multiplication(Integer(2), Integer(4)),
                 Division(Integer(6), Integer(5)),
             ),
             Addition(
                 Division(Integer(3), Integer(2)),
                 Division(Integer(4), Integer(3)),
             ),
         ),
     )
     self.assertEqual(expr.evaluate(), Fraction(66, 289))
Example #3
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
Example #4
0
 def test_division(self):
     expr = Division(Integer(8), Integer(6))
     self.assertEqual(expr.evaluate(), Fraction(4, 3))