Feat(Compute): Compute with monomials is done

This commit is contained in:
Bertrand Benjamin 2018-11-14 09:00:19 +01:00
parent b23d83b9da
commit a79ffb0cf9
1 changed files with 107 additions and 0 deletions

View File

@ -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: