Skip to content
Snippets Groups Projects
Commit 17862fb9 authored by Taddeus Kroes's avatar Taddeus Kroes
Browse files

Added rule for subtracting addition terms from both sides of an equation.

parent d32ba062
No related branches found
No related tags found
No related merge requests found
from .utils import find_variable
from ..node import Scope, OP_EQ, OP_ADD, OP_MUL, eq
from ..possibilities import Possibility as P, MESSAGES
from ..translate import _
def match_subtract_addition_term(node):
"""
x + a = b -> x + a - a = b - a
x = b + cx -> x + - cx = b + cx - cx
"""
assert node.is_op(OP_EQ)
x = find_variable(node)
p = []
left, right = node
if left.is_op(OP_ADD):
scope = Scope(left)
for n in scope:
# Bring terms without x to the right
if not n.contains(x):
p.append(P(node, subtract_addition_term, (n,)))
if right.is_op(OP_ADD):
scope = Scope(right)
for n in scope:
# Bring terms with x to the left
if n.contains(x):
p.append(P(node, subtract_addition_term, (n,)))
return p
def subtract_addition_term(root, args):
"""
x + a = b -> x + a - a = b - a
x = b + cx -> x + - cx = b + cx - cx
"""
left, right = root
term = args[0]
return eq(left - term, right - term)
MESSAGES[subtract_addition_term] = \
_('Subtract {1} from both sides of the equation.')
from src.rules.lineq import match_subtract_addition_term, \
subtract_addition_term
from src.node import Scope
from src.possibilities import Possibility as P
from tests.rulestestcase import RulesTestCase, tree
class TestRulesLineq(RulesTestCase):
def test_match_subtract_addition_term(self):
root, a = tree('x + a = b, a')
self.assertEqualPos(match_subtract_addition_term(root),
[P(root, subtract_addition_term, (a,))])
root, cx = tree('x = b + cx, cx')
self.assertEqualPos(match_subtract_addition_term(root),
[P(root, subtract_addition_term, (cx,))])
def test_subtract_addition_term(self):
root, a, expect = tree('x + a = b, a, x + a - a = b - a')
self.assertEqual(subtract_addition_term(root, (a,)), expect)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment