Overload operators for MOnumbers in order to use gcd
This commit is contained in:
parent
3c133250ec
commit
d1c6e2d3da
@ -154,6 +154,128 @@ class MOnumber(MO):
|
|||||||
|
|
||||||
return f"- {abs(self.value)}"
|
return f"- {abs(self.value)}"
|
||||||
|
|
||||||
|
def __add__(self, other):
|
||||||
|
""" Adding a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value + other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value + other
|
||||||
|
|
||||||
|
def __radd__(self, other):
|
||||||
|
""" rAdding a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value + other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value + other
|
||||||
|
|
||||||
|
def __sub__(self, other):
|
||||||
|
""" Subing a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value - other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value - other
|
||||||
|
|
||||||
|
def __rsub__(self, other):
|
||||||
|
""" rSubing a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value - other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value - other
|
||||||
|
|
||||||
|
def __mul__(self, other):
|
||||||
|
""" Multiply a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value * other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value * other
|
||||||
|
|
||||||
|
def __rmul__(self, other):
|
||||||
|
""" rMultiply a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value * other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value * other
|
||||||
|
|
||||||
|
def __truediv__(self, other):
|
||||||
|
""" Divide a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value / other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value / other
|
||||||
|
|
||||||
|
def __rtruediv__(self, other):
|
||||||
|
""" rDivide a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value / other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value / other
|
||||||
|
|
||||||
|
def __floordiv__(self, other):
|
||||||
|
""" Integer Division a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value // other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value // other
|
||||||
|
|
||||||
|
def __rfloordiv__(self, other):
|
||||||
|
""" rInteger Division a MOnumber """
|
||||||
|
try:
|
||||||
|
return other.value // self.value
|
||||||
|
except AttributeError:
|
||||||
|
return other // self.value
|
||||||
|
|
||||||
|
def __mod__(self, other):
|
||||||
|
""" Moduling a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value % other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value % other
|
||||||
|
|
||||||
|
def __rmod__(self, other):
|
||||||
|
""" rModuling a MOnumber """
|
||||||
|
try:
|
||||||
|
return other.value % self.value
|
||||||
|
except AttributeError:
|
||||||
|
return other % self.value
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
""" == a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value == other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value == other
|
||||||
|
|
||||||
|
def __lt__(self, other):
|
||||||
|
""" < a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value < other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value < other
|
||||||
|
|
||||||
|
def __le__(self, other):
|
||||||
|
""" <= a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value <= other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value <= other
|
||||||
|
|
||||||
|
def __gt__(self, other):
|
||||||
|
""" > a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value > other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value > other
|
||||||
|
|
||||||
|
def __ge__(self, other):
|
||||||
|
""" >= a MOnumber """
|
||||||
|
try:
|
||||||
|
return self.value >= other.value
|
||||||
|
except AttributeError:
|
||||||
|
return self.value >= other
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return self.value.__hash__()
|
||||||
|
|
||||||
class MOstr(MO):
|
class MOstr(MO):
|
||||||
|
|
||||||
""" Unknown math object like x or n"""
|
""" Unknown math object like x or n"""
|
||||||
|
@ -14,11 +14,13 @@ from .exceptions import ComputeError
|
|||||||
from .add import add
|
from .add import add
|
||||||
from .minus import minus
|
from .minus import minus
|
||||||
from .multiply import multiply
|
from .multiply import multiply
|
||||||
|
from .divide import divide
|
||||||
|
|
||||||
OPERATIONS = {
|
OPERATIONS = {
|
||||||
"+": add,
|
"+": add,
|
||||||
"-": minus,
|
"-": minus,
|
||||||
"*": multiply,
|
"*": multiply,
|
||||||
|
"/": divide,
|
||||||
}
|
}
|
||||||
|
|
||||||
def compute(node, left_v, right_v):
|
def compute(node, left_v, right_v):
|
||||||
|
@ -24,10 +24,15 @@ def gcd(a, b):
|
|||||||
2
|
2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
try:
|
||||||
pos_a, _a = (a >= 0), abs(a)
|
pos_a, _a = (a >= 0), abs(a)
|
||||||
pos_b, _b = (b >= 0), abs(b)
|
pos_b, _b = (b >= 0), abs(b)
|
||||||
|
|
||||||
gcd_sgn = (-1 + 2 * (pos_a or pos_b))
|
gcd_sgn = (-1 + 2 * (pos_a or pos_b))
|
||||||
|
except TypeError:
|
||||||
|
_a = a
|
||||||
|
_b = b
|
||||||
|
gcd_sgn = 1
|
||||||
|
|
||||||
if _a > _b:
|
if _a > _b:
|
||||||
c = _a % _b
|
c = _a % _b
|
||||||
|
Loading…
Reference in New Issue
Block a user