Rewrite compute and remove reference to computing in OPERATORS

This commit is contained in:
2018-03-13 05:46:14 +03:00
parent 832946ed49
commit e9046c49ff
2 changed files with 24 additions and 28 deletions

View File

@@ -12,6 +12,15 @@ Computing with MO
from ..operator import OPERATORS
from .exceptions import ComputeError
from .add import add
from .minus import minus
from .multiply import multiply
OPERATIONS = {
"+": add,
"-": minus,
"*": multiply,
}
def compute(node, left_v, right_v):
"""
@@ -19,28 +28,24 @@ def compute(node, left_v, right_v):
:example:
>>> compute("+", 1, 2)
3
>>> compute("-", None, 2)
-2
>>> compute("-", 1, 2)
>>> from ..MO.mo import MOnumber
>>> compute("+", MOnumber(1), MOnumber(2))
<MOnumber 3>
>>> compute("-", None, MOnumber(2))
<MOnumber - 2>
>>> compute("*", MOnumber(1), MOnumber(2))
<MOnumber 2>
>>> compute("~", MOnumber(1), MOnumber(2))
Traceback (most recent call last):
...
mapytex.calculus.core.compute.exceptions.ComputeError: left_v need to be None for operator with arity 1
mapytex.calculus.core.compute.exceptions.ComputeError: Unknown operation (~)
"""
op = OPERATORS[node]
lv = left_v
rv = right_v
if op['arity'] == 1:
if lv is None:
return op["operate"](rv)()
else:
raise ComputeError("left_v need to be None for operator with arity 1")
else:
try:
return op["operate"](lv)(rv)
except NotImplemented:
return op["roperate"](rv)(lv)
try:
operation = OPERATIONS[node]
except KeyError:
raise ComputeError(f"Unknown operation ({node})")
return operation(left_v, right_v)
# -----------------------------