diff --git a/mapytex/calculus/core/compute/__init__.py b/mapytex/calculus/core/compute/__init__.py index 4b3d8c8..4abac57 100644 --- a/mapytex/calculus/core/compute/__init__.py +++ b/mapytex/calculus/core/compute/__init__.py @@ -20,11 +20,12 @@ from .power import power from ..MO.mo import MOnumber, MOstr from ..MO.fraction import MOFraction from ..MO.monomial import MOstrPower, MOMonomial +from ..MO.polynomial import MOpolynomial from itertools import product from tabulate import tabulate -MOS = [ MOnumber, MOstr, MOFraction, MOstrPower, MOMonomial ] +MOS = [ MOnumber, MOstr, MOFraction, MOstrPower, MOMonomial, MOpolynomial] OPERATIONS = { "+": add, @@ -67,7 +68,7 @@ def compute_capacities(node): :example: >>> compute_capacities("+") - [['+', 'MOnumber', 'MOstr', 'MOFraction', 'MOstrPower', 'MOMonomial'], ['MOnumber', True, False, True, False, False], ['MOstr', False, True, False, False, True], ['MOFraction', True, False, True, False, False], ['MOstrPower', False, False, False, True, True], ['MOMonomial', False, True, False, True, True]] + [['+', 'MOnumber', 'MOstr', 'MOFraction', 'MOstrPower', 'MOMonomial', 'MOpolynomial'], ['MOnumber', True, False, True, False, False, True], ['MOstr', False, True, False, False, True, True], ['MOFraction', True, False, True, False, False, True], ['MOstrPower', False, False, False, True, True, True], ['MOMonomial', False, True, False, True, True, True], ['MOpolynomial', True, True, True, True, True, True]] """ op = OPERATIONS[node] diff --git a/mapytex/calculus/core/typing/__init__.py b/mapytex/calculus/core/typing/__init__.py index 7c56f73..32d6fb5 100644 --- a/mapytex/calculus/core/typing/__init__.py +++ b/mapytex/calculus/core/typing/__init__.py @@ -13,23 +13,24 @@ Computing with MO from .exceptions import TypingError from .add import add # from .minus import minus -# from .multiply import multiply +from .multiply import multiply from .divide import divide from .power import power from ..MO.mo import MOnumber, MOstr from ..MO.fraction import MOFraction from ..MO.monomial import MOstrPower, MOMonomial +from ..MO.polynomial import MOpolynomial from itertools import product from tabulate import tabulate -MOS = [ MOnumber, MOstr, MOFraction, MOstrPower, MOMonomial ] +MOS = [ MOnumber, MOstr, MOFraction, MOstrPower, MOMonomial, MOpolynomial] OPERATIONS = { "+": add, # "-": minus, - # "*": multiply, + "*": multiply, "/": divide, "^": power, } @@ -46,7 +47,10 @@ def typing(node, left_v, right_v): operation = OPERATIONS[node] except KeyError: raise TypingError(f"Unknown operation ({node}) in typing") - return operation(left_v, right_v) + try: + return operation(left_v, right_v) + except NotImplementedError: + raise TypingError(f"Can't create new MO with {node}, {type(left_v)} and {type(right_v)}") def typing_capacities(node): """ Test an operation through all MOs @@ -54,6 +58,10 @@ def typing_capacities(node): :param operation: string which represent an (mo, mo) -> mo :returns: { (motype, motype): True/False } when it's implemented + :example: + >>> typing_capacities("*") + [['*', 'MOnumber', 'MOstr', 'MOFraction', 'MOstrPower', 'MOMonomial', 'MOpolynomial'], ['MOnumber', False, True, False, True, False, False], ['MOstr', True, False, True, False, False, False], ['MOFraction', False, True, False, True, False, False], ['MOstrPower', True, False, True, False, False, False], ['MOMonomial', False, False, False, False, False, False], ['MOpolynomial', False, False, False, False, False, False]] + """ op = OPERATIONS[node] lines = [[node] + [mo.__name__ for mo in MOS]]