Feat(Core): Compute with power
This commit is contained in:
parent
2551037b65
commit
80305671de
@ -15,6 +15,7 @@ from ..tree import Tree
|
|||||||
from ..MO.mo import MO, MOnumber, MOstr
|
from ..MO.mo import MO, MOnumber, MOstr
|
||||||
from ..MO.fraction import MOFraction
|
from ..MO.fraction import MOFraction
|
||||||
from ..MO.monomial import MOstrPower, MOMonomial
|
from ..MO.monomial import MOstrPower, MOMonomial
|
||||||
|
from ..MO.polynomial import MOpolynomial
|
||||||
from .filters import special_case
|
from .filters import special_case
|
||||||
|
|
||||||
power_doc = """ Power of MOs
|
power_doc = """ Power of MOs
|
||||||
@ -92,6 +93,80 @@ def mofraction_monumber(left, right):
|
|||||||
denom = Tree("^", left.denominator, right)
|
denom = Tree("^", left.denominator, right)
|
||||||
return Tree("/", num, denom)
|
return Tree("/", num, denom)
|
||||||
|
|
||||||
|
@power.register(MOstrPower, MOnumber)
|
||||||
|
@special_case(power_filter)
|
||||||
|
def mostrpower_monumber(left, right):
|
||||||
|
""" Multiply powers
|
||||||
|
|
||||||
|
>>> P = MOstrPower("x", 4)
|
||||||
|
>>> a = MOnumber(2)
|
||||||
|
>>> print(power(P, a))
|
||||||
|
^
|
||||||
|
> x
|
||||||
|
> *
|
||||||
|
| > 4
|
||||||
|
| > 2
|
||||||
|
"""
|
||||||
|
power = Tree("*", left.power, right)
|
||||||
|
return Tree("^", left.variable, power)
|
||||||
|
|
||||||
|
@power.register(MOMonomial, MOnumber)
|
||||||
|
@special_case(power_filter)
|
||||||
|
def mostrpower_monumber(left, right):
|
||||||
|
""" Multiply powers and raise coef to the power
|
||||||
|
|
||||||
|
>>> P = MOMonomial(3,"x", 4)
|
||||||
|
>>> a = MOnumber(2)
|
||||||
|
>>> print(power(P, a))
|
||||||
|
*
|
||||||
|
> ^
|
||||||
|
| > 3
|
||||||
|
| > 2
|
||||||
|
> ^
|
||||||
|
| > x
|
||||||
|
| > *
|
||||||
|
| | > 4
|
||||||
|
| | > 2
|
||||||
|
"""
|
||||||
|
coef = Tree("^", left.coefficient, right)
|
||||||
|
power = Tree("*", left.power, right)
|
||||||
|
strpower = Tree("^", left.variable, power)
|
||||||
|
return Tree("*", coef, strpower)
|
||||||
|
|
||||||
|
@power.register(MOpolynomial, MOnumber)
|
||||||
|
@special_case(power_filter)
|
||||||
|
def mopolynomial_monumber(left, right):
|
||||||
|
""" Expand power to products of polynomials
|
||||||
|
|
||||||
|
>>> P = MOpolynomial('x', [1, -2, 3])
|
||||||
|
>>> a = MOnumber(2)
|
||||||
|
>>> print(power(P, a))
|
||||||
|
*
|
||||||
|
> +
|
||||||
|
| > *
|
||||||
|
| | > 3
|
||||||
|
| | > ^
|
||||||
|
| | | > x
|
||||||
|
| | | > 2
|
||||||
|
| > +
|
||||||
|
| | > *
|
||||||
|
| | | > -2
|
||||||
|
| | | > x
|
||||||
|
| | > 1
|
||||||
|
> +
|
||||||
|
| > *
|
||||||
|
| | > 3
|
||||||
|
| | > ^
|
||||||
|
| | | > x
|
||||||
|
| | | > 2
|
||||||
|
| > +
|
||||||
|
| | > *
|
||||||
|
| | | > -2
|
||||||
|
| | | > x
|
||||||
|
| | > 1
|
||||||
|
"""
|
||||||
|
return Tree.from_list("*", [left]*right.value)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user