refactor(MO): Separate value and tree in MOs
This commit is contained in:
@@ -183,22 +183,22 @@ def mofraction_mofraction(left, right):
|
||||
num = Tree("+", left.numerator, right.numerator)
|
||||
return Tree("/", num, left.denominator)
|
||||
|
||||
denom_lcm = lcm(left.denominator, right.denominator)
|
||||
denom_lcm = lcm(left.denominator.value, right.denominator.value)
|
||||
|
||||
if left.denominator == denom_lcm:
|
||||
if left.denominator.value == denom_lcm:
|
||||
left_frac = left
|
||||
else:
|
||||
multiply_by = denom_lcm // left.denominator
|
||||
left_num = Tree("*", left.numerator, MO.factory(multiply_by))
|
||||
left_denom = Tree("*", left.denominator, MO.factory(multiply_by))
|
||||
multiply_by = MO.factory(denom_lcm // left.denominator.value)
|
||||
left_num = Tree("*", left.numerator, multiply_by)
|
||||
left_denom = Tree("*", left.denominator, multiply_by)
|
||||
left_frac = Tree("/", left_num, left_denom)
|
||||
|
||||
if right.denominator == denom_lcm:
|
||||
if right.denominator.value == denom_lcm:
|
||||
right_frac = right
|
||||
else:
|
||||
multiply_by = denom_lcm // right.denominator
|
||||
right_num = Tree("*", right.numerator, MO.factory(multiply_by))
|
||||
right_denom = Tree("*", right.denominator, MO.factory(multiply_by))
|
||||
multiply_by = MO.factory(denom_lcm // right.denominator.value)
|
||||
right_num = Tree("*", right.numerator, multiply_by)
|
||||
right_denom = Tree("*", right.denominator, multiply_by)
|
||||
right_frac = Tree("/", right_num, right_denom)
|
||||
|
||||
return Tree("+", left_frac, right_frac)
|
||||
|
@@ -80,7 +80,7 @@ def monumber_monumber(left, right):
|
||||
"""
|
||||
if type(left.value) in [float, Decimal] or \
|
||||
type(right.value) in [float, Decimal]:
|
||||
return MO.factory(left / right)
|
||||
return MO.factory(left.value / right.value)
|
||||
else:
|
||||
raise NotImplementedError("Can't divide 2 int. Need to create a Fraction instead")
|
||||
|
||||
|
@@ -78,14 +78,14 @@ def mofraction(left, right):
|
||||
return MOFraction(right._numerator, right._denominator)
|
||||
|
||||
try:
|
||||
if right._numerator < 0:
|
||||
return MOFraction(-right._numerator, right._denominator)
|
||||
if right._numerator.value < 0:
|
||||
return MOFraction(-right._numerator.value, right._denominator)
|
||||
except TypeError:
|
||||
pass
|
||||
try:
|
||||
|
||||
if right._denominator < 0:
|
||||
return MOFraction(right._numerator, -right._denominator)
|
||||
if right._denominator.value < 0:
|
||||
return MOFraction(right._numerator, -right._denominator.value)
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
|
@@ -206,7 +206,7 @@ def mostr_mostrpower(left, right):
|
||||
if left.variable != right.variable:
|
||||
raise MultiplyError("Can't multiply MOstr and MOstrPower if they don't"
|
||||
f"have same variable (got {left.variable} and {right.variable})")
|
||||
return MOstrPower(left.variable, right.power+1)
|
||||
return MOstrPower(left.variable, right.power.value+1)
|
||||
|
||||
@multiply.register(MOstrPower, MOstr)
|
||||
@special_case(multiply_filter)
|
||||
@@ -227,7 +227,7 @@ def mostr_mostrpower(left, right):
|
||||
if left.variable != right.variable:
|
||||
raise MultiplyError("Can't multiply MOstr and MOstrPower if they don't"
|
||||
f"have same variable (got {left.variable} and {right.variable})")
|
||||
return MOstrPower(left.variable, left.power+1)
|
||||
return MOstrPower(left.variable, left.power.value+1)
|
||||
|
||||
@multiply.register(MOstrPower, MOstrPower)
|
||||
@special_case(multiply_filter)
|
||||
|
Reference in New Issue
Block a user