From 0cef131c419552b433f6478937d7fb3e70fc8c20 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Sat, 17 Mar 2018 08:45:23 +0300 Subject: [PATCH] Render momonial and multiply with scalar --- mapytex/calculus/core/MO/monomial.py | 38 ++++++++++++++++++++ mapytex/calculus/core/compute/multiply.py | 43 ++++++++++++++++++++++- 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/mapytex/calculus/core/MO/monomial.py b/mapytex/calculus/core/MO/monomial.py index a995862..06322ed 100644 --- a/mapytex/calculus/core/MO/monomial.py +++ b/mapytex/calculus/core/MO/monomial.py @@ -9,6 +9,7 @@ from mapytex.calculus.core.tree import Tree from .mo import MO, MOnumber, MOstr from .exceptions import MOError +from ..renders import tree2txt, tree2tex __all__ = ["MOMonomial"] @@ -27,6 +28,10 @@ class MOMonomial(MO): >>> MOMonomial(4, "x", 1) + >>> MOMonomial(1, "x", 2) + + >>> MOMonomial(1, "x", 1) + >>> MOMonomial(4, 3, 1) Traceback (most recent call last): ... @@ -79,6 +84,39 @@ class MOMonomial(MO): self._variable, ) + @property + def __txt__(self): + try: + if self._coefficient == 1: + try: + return tree2txt(self.value.right_value) + except AttributeError: + return str(self.value.right_value) + except TypeError: + pass + + try: + return tree2txt(self.value) + except AttributeError: + return str(self.value) + + @property + def __tex__(self): + try: + if self._coefficient == 1: + try: + return tree2tex(self.value.right_value) + except AttributeError: + return str(self.value.right_value) + except TypeError: + pass + + try: + return tree2tex(self.value) + except AttributeError: + return str(self.value) + + # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: diff --git a/mapytex/calculus/core/compute/multiply.py b/mapytex/calculus/core/compute/multiply.py index 8990b23..2d3bffc 100644 --- a/mapytex/calculus/core/compute/multiply.py +++ b/mapytex/calculus/core/compute/multiply.py @@ -11,8 +11,9 @@ Multiply MO """ from ..tree import Tree -from ..MO.mo import MO, MOnumber +from ..MO.mo import MO, MOnumber, MOstr from ..MO.fraction import MOFraction +from ..MO.monomial import MOMonomial from .exceptions import MultiplyError from .type_filter import args_are @@ -145,6 +146,46 @@ def mofraction_mofraction(left, right): denom = Tree("*", left.denominator, right.denominator) return Tree("/", num, denom) +@args_are((MOnumber, MOFraction), MOstr) +def moscalar_mostr(left, right): + """ Multiply a scalar with a letter + + >>> a = MOnumber(2) + >>> b = MOstr('x') + >>> moscalar_mostr(a, b) + + >>> a = MOFraction(1, 5) + >>> moscalar_mostr(a, b) + + """ + return MOMonomial(left, right) + +@args_are(MOstr, (MOnumber, MOFraction)) +def mostr_moscalar(left, right): + """ Multiply a scalar with a letter + + >>> a = MOstr('x') + >>> b = MOnumber(2) + >>> mostr_moscalar(a, b) + + >>> b = MOFraction(1, 5) + >>> mostr_moscalar(a, b) + + """ + return MOMonomial(right, left) + +@args_are((MOnumber, MOFraction), MOMonomial) +def moscalar_monomonial(left, right): + """ Multiply a scalar with a monomial + + >>> a = MOnumber(4) + >>> b = MOMonomial(5, 'x', 3) + + # >>> print(moscalar_monomonial(a, b)) + """ + coefficient = Tree('*', left, right._coefficient) + return Tree('*', coefficient, MOMonomial(1, right._variable, right._power)) + # TODO: Faire un décorateur pour un enregistrement automatique |dim. mars 11 18:24:32 EAT 2018 MULFUNCTIONS = { (MOnumber, MOnumber): monumber_monumber,