diff --git a/mapytex/calculus/core/compute/add.py b/mapytex/calculus/core/compute/add.py index 55a6c6a..bf2cdde 100644 --- a/mapytex/calculus/core/compute/add.py +++ b/mapytex/calculus/core/compute/add.py @@ -717,6 +717,113 @@ def mopolynomial_mopolynomial(left, right): return Tree.from_list("+", list(merge_monomials.values())[::-1]) +@add.register(MOstr, MOMonomial) +@special_case(add_filter) +def mostr_momonomial(left, right): + """ Add a str to a Monomial + + :example: + >>> a = MOstr("x") + >>> b = MOMonomial(2, "x") + >>> print(add(a, b)) + * + > + + | > 1 + | > 2 + > x + """ + if right.power != 1: + raise NotImplementedError("Monomial is more than deg 1") + add_scal = Tree("+", 1, right.coefficient) + return Tree("*", add_scal, left) + +@add.register(MOMonomial, MOstr) +@special_case(add_filter) +def momonomial_mostr(left, right): + """ Add a str to a Monomial + + :example: + >>> a = MOMonomial(2, "x") + >>> b = MOstr("x") + >>> print(add(a, b)) + * + > + + | > 2 + | > 1 + > x + """ + if left.power != 1: + raise NotImplementedError("Monomial is more than deg 1") + add_scal = Tree("+", left.coefficient, 1) + return Tree("*", add_scal, right) + +@add.register(MOstrPower, MOMonomial) +@special_case(add_filter) +def mostrpower_momonomial(left, right): + """ Add a strpower to a Monomial + + :example: + >>> a = MOstrPower("x", 2) + >>> b = MOMonomial(3, "x", 2) + >>> print(add(a, b)) + * + > + + | > 1 + | > 3 + > ^ + | > x + | > 2 + """ + if right.power != left.power: + raise NotImplementedError("MOs does not have same degree") + add_scal = Tree("+", 1, right.coefficient) + return Tree("*", add_scal, left) + +@add.register(MOMonomial, MOstrPower) +@special_case(add_filter) +def momonomial_mostrpower(left, right): + """ Add a strpower to a Monomial + + :example: + >>> a = MOMonomial(3, "x", 2) + >>> b = MOstrPower("x", 2) + >>> print(add(a, b)) + * + > + + | > 3 + | > 1 + > ^ + | > x + | > 2 + """ + if left.power != right.power: + raise NotImplementedError("MOs does not have same degree") + add_scal = Tree("+", left.coefficient, 1) + return Tree("*", add_scal, right) + +@add.register(MOMonomial, MOMonomial) +@special_case(add_filter) +def momonomial_momonomial(left, right): + """ Add a Monomial to a Monomial + + :example: + >>> a = MOMonomial(3, "x", 2) + >>> b = MOMonomial(4, "x", 2) + >>> print(add(a, b)) + * + > + + | > 3 + | > 4 + > ^ + | > x + | > 2 + """ + if left.power != right.power: + raise NotImplementedError("MOs does not have same degree") + add_scal = Tree("+", left.coefficient, right.coefficient) + return Tree("*", add_scal, right.strpower) + + # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: