Create MOstrPower and start adding it into multiply
This commit is contained in:
@@ -13,42 +13,83 @@ from ..renders import tree2txt, tree2tex
|
||||
|
||||
__all__ = ["MOMonomial"]
|
||||
|
||||
class MOstrPower(MO):
|
||||
|
||||
""" Power of a MOstr """
|
||||
|
||||
def __init__(self, variable, power):
|
||||
""" Initiate a MOstrPower
|
||||
|
||||
:param variable: variable of the monomial (a MOstr or later a MOSqrt)
|
||||
:param power: non negative interger (MOnumber type)
|
||||
|
||||
>>> MOstrPower("x", 2)
|
||||
<MOstrPower x^2>
|
||||
>>> MOstrPower(3, 1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The variable of a monomial should be convertible into MOstr
|
||||
>>> MOstrPower("x", 0)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a MOstrPower should be greater than 1
|
||||
>>> MOstrPower("x", 1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a MOstrPower should be greater than 1
|
||||
>>> MOstrPower("x", -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a MOstrPower should be greater than 1
|
||||
>>> MOstrPower("x", 2.4)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a monomial should be a integer
|
||||
|
||||
"""
|
||||
_variable = MO.factory(variable)
|
||||
if not isinstance(_variable, MOstr):
|
||||
raise MOError("The variable of a monomial should be convertible into MOstr")
|
||||
self._variable = _variable
|
||||
|
||||
_power = MO.factory(power)
|
||||
if power <= 1:
|
||||
raise MOError("The power of a MOstrPower should be greater than 1")
|
||||
elif not isinstance(_power.value, int):
|
||||
raise MOError("The power of a monomial should be a integer")
|
||||
self._power = _power
|
||||
|
||||
value = Tree("^",
|
||||
self._variable,
|
||||
self._power
|
||||
)
|
||||
MO.__init__(self, value)
|
||||
|
||||
@property
|
||||
def variable(self):
|
||||
return self._variable
|
||||
|
||||
@property
|
||||
def power(self):
|
||||
return self._power
|
||||
|
||||
class MOMonomial(MO):
|
||||
|
||||
""" Monomial math object"""
|
||||
|
||||
def __init__(self, coefficient, variable, power = 1):
|
||||
def __init__(self, coefficient, variable):
|
||||
""" Initiate the MOMonomial
|
||||
|
||||
:param coefficient: coefficient of the monomial (a non zero constant)
|
||||
:param variable: varaible of the monomial (a MOstr or later a MOSqrt)
|
||||
:param power: non negative interger (MOnumber type)
|
||||
:param variable: variable of the monomial (a MOstr or later a MOSqrt)
|
||||
|
||||
>>> MOMonomial(4, "x", 2)
|
||||
<MOMonomial 4x^2>
|
||||
>>> MOMonomial(4, "x", 1)
|
||||
>>> x = MOstr('x')
|
||||
>>> MOMonomial(4, x)
|
||||
<MOMonomial 4x>
|
||||
>>> MOMonomial(1, "x", 2)
|
||||
<MOMonomial x^2>
|
||||
>>> MOMonomial(1, "x", 1)
|
||||
<MOMonomial x>
|
||||
>>> MOMonomial(4, 3, 1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The variable of a monomial should be convertible into MOstr
|
||||
>>> MOMonomial(4, "x", 0)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a monomial should be greater than 0
|
||||
>>> MOMonomial(4, "x", -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a monomial should be greater than 0
|
||||
>>> MOMonomial(4, "x", 2.4)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The power of a monomial should be a integer
|
||||
>>> MOMonomial(0, "x", 1)
|
||||
>>> x = MOstrPower('x', 2)
|
||||
>>> MOMonomial(4, x)
|
||||
<MOMonomial 4x^2>
|
||||
>>> MOMonomial(0, x)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
mapytex.calculus.core.MO.exceptions.MOError: The coefficient of a monomial should not be 0
|
||||
@@ -58,64 +99,39 @@ class MOMonomial(MO):
|
||||
raise MOError("The coefficient of a monomial should not be 0")
|
||||
self._coefficient = _coefficient
|
||||
|
||||
_variable = MO.factory(variable)
|
||||
if not isinstance(_variable, MOstr):
|
||||
raise MOError("The variable of a monomial should be convertible into MOstr")
|
||||
self._variable = _variable
|
||||
if not isinstance(variable, (MOstr, MOstrPower)):
|
||||
raise
|
||||
self._variable = variable
|
||||
|
||||
_power = MO.factory(power)
|
||||
if power <= 0:
|
||||
raise MOError("The power of a monomial should be greater than 0")
|
||||
elif not isinstance(_power.value, int):
|
||||
raise MOError("The power of a monomial should be a integer")
|
||||
self._power = _power
|
||||
value = Tree("*",
|
||||
self._coefficient,
|
||||
self._variable
|
||||
|
||||
if self._power > 1:
|
||||
self.value = Tree("*",
|
||||
self._coefficient,
|
||||
Tree("^",
|
||||
self._variable,
|
||||
self._power
|
||||
)
|
||||
)
|
||||
else:
|
||||
self.value = Tree("*",
|
||||
self._coefficient,
|
||||
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)
|
||||
MO.__init__(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
|
||||
def coefficient(self):
|
||||
return self._coefficient
|
||||
|
||||
try:
|
||||
return tree2tex(self.value)
|
||||
except AttributeError:
|
||||
return str(self.value)
|
||||
@property
|
||||
def strpower(self):
|
||||
if isinstance(self._variable, MOstr):
|
||||
return self._variable
|
||||
return self._variable
|
||||
|
||||
@property
|
||||
def variable(self):
|
||||
if isinstance(self._variable, MOstr):
|
||||
return self._variable
|
||||
return self._variable.variable
|
||||
|
||||
@property
|
||||
def power(self):
|
||||
if isinstance(self._variable, MOstr):
|
||||
return 1
|
||||
return self._variable.power
|
||||
|
||||
# -----------------------------
|
||||
# Reglages pour 'vim'
|
||||
|
Reference in New Issue
Block a user