__repr__ for *Polynom

This commit is contained in:
Benjamin Bertrand 2016-03-07 14:29:08 +03:00
parent 976cbbdf03
commit 04099040d4
3 changed files with 37 additions and 34 deletions

View File

@ -126,7 +126,10 @@ class AbstractPolynom(Explicable):
return str(Expression(self.postfix_tokens)) return str(Expression(self.postfix_tokens))
def __repr__(self): def __repr__(self):
return "< " + str(self.__class__) + " " + str(self._coef) + ">" return "< {cls} {letter} {coefs}>".format(
cls = str(self.__class__).split('.')[-1][:-2],
letter = str(self._letter),
coefs = str(self._coef))
def coef_postfix(self, a, i): def coef_postfix(self, a, i):
"""Return the postfix display of a coeficient """Return the postfix display of a coeficient
@ -275,9 +278,9 @@ class AbstractPolynom(Explicable):
>>> P = AbstractPolynom([1,2,3]) >>> P = AbstractPolynom([1,2,3])
>>> P.conv2poly(1) >>> P.conv2poly(1)
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1]> < AbstractPolynom x [1]>
>>> P.conv2poly(0) >>> P.conv2poly(0)
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0]> < AbstractPolynom x [0]>
""" """
if isNumber(other) and not isPolynom(other): if isNumber(other) and not isPolynom(other):
@ -296,13 +299,13 @@ class AbstractPolynom(Explicable):
>>> P = AbstractPolynom([1,2,3]) >>> P = AbstractPolynom([1,2,3])
>>> Q = P.reduce() >>> Q = P.reduce()
>>> Q >>> Q
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1, 2, 3]> < AbstractPolynom x [1, 2, 3]>
>>> Q.steps >>> Q.steps
[] []
>>> P = AbstractPolynom([[1,2], [3,4,5], 6]) >>> P = AbstractPolynom([[1,2], [3,4,5], 6])
>>> Q = P.reduce() >>> Q = P.reduce()
>>> Q >>> Q
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [3, 12, 6]> < AbstractPolynom x [3, 12, 6]>
>>> for i in Q.explain(): >>> for i in Q.explain():
... print(i) ... print(i)
6 x^{ 2 } + 3 x + 4 x + 5 x + 1 + 2 6 x^{ 2 } + 3 x + 4 x + 5 x + 1 + 2
@ -310,7 +313,7 @@ class AbstractPolynom(Explicable):
6 x^{ 2 } + ( 7 + 5 ) x + 3 6 x^{ 2 } + ( 7 + 5 ) x + 3
6 x^{ 2 } + 12 x + 3 6 x^{ 2 } + 12 x + 3
>>> Q.steps >>> Q.steps
[< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [[1, 2], [3, 4, 5], 6]>, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [< <class 'pymath.calculus.expression.Expression'> [1, 2, +] >, < <class 'pymath.calculus.expression.Expression'> [3, 4, +, 5, +] >, 6]>, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [3, < <class 'pymath.calculus.expression.Expression'> [7, 5, +] >, 6]>] [< AbstractPolynom x [[1, 2], [3, 4, 5], 6]>, < AbstractPolynom x [< <class 'pymath.calculus.expression.Expression'> [1, 2, +] >, < <class 'pymath.calculus.expression.Expression'> [3, 4, +, 5, +] >, 6]>, < AbstractPolynom x [3, < <class 'pymath.calculus.expression.Expression'> [7, 5, +] >, 6]>]
""" """
# TODO: It doesn't not compute quick enough |ven. févr. 27 18:04:01 CET # TODO: It doesn't not compute quick enough |ven. févr. 27 18:04:01 CET
@ -382,7 +385,7 @@ class AbstractPolynom(Explicable):
>>> Q = AbstractPolynom([4,5]) >>> Q = AbstractPolynom([4,5])
>>> R = P+Q >>> R = P+Q
>>> R >>> R
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [5, 7, 3]> < AbstractPolynom x [5, 7, 3]>
>>> for i in R.explain(): >>> for i in R.explain():
... print(i) ... print(i)
3 x^{ 2 } + 2 x + 1 + 5 x + 4 3 x^{ 2 } + 2 x + 1 + 5 x + 4
@ -390,7 +393,7 @@ class AbstractPolynom(Explicable):
3 x^{ 2 } + ( 2 + 5 ) x + 1 + 4 3 x^{ 2 } + ( 2 + 5 ) x + 1 + 4
3 x^{ 2 } + 7 x + 5 3 x^{ 2 } + 7 x + 5
>>> R.steps >>> R.steps
[< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 5, 'x', *, 4, +, +] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [[1, 4], [2, 5], 3]>, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [< <class 'pymath.calculus.expression.Expression'> [1, 4, +] >, < <class 'pymath.calculus.expression.Expression'> [2, 5, +] >, 3]>] [< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 5, 'x', *, 4, +, +] >, < AbstractPolynom x [[1, 4], [2, 5], 3]>, < AbstractPolynom x [< <class 'pymath.calculus.expression.Expression'> [1, 4, +] >, < <class 'pymath.calculus.expression.Expression'> [2, 5, +] >, 3]>]
""" """
o_poly = self.conv2poly(other) o_poly = self.conv2poly(other)
@ -413,7 +416,7 @@ class AbstractPolynom(Explicable):
>>> P = AbstractPolynom([1,2,3]) >>> P = AbstractPolynom([1,2,3])
>>> Q = -P >>> Q = -P
>>> Q >>> Q
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [-1, -2, -3]> < AbstractPolynom x [-1, -2, -3]>
>>> Q.steps >>> Q.steps
[< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, -] >] [< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, -] >]
""" """
@ -430,7 +433,7 @@ class AbstractPolynom(Explicable):
>>> Q = AbstractPolynom([4,5,6]) >>> Q = AbstractPolynom([4,5,6])
>>> R = P - Q >>> R = P - Q
>>> R >>> R
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [-3, -3, -3]> < AbstractPolynom x [-3, -3, -3]>
>>> for i in R.explain(): >>> for i in R.explain():
... print(i) ... print(i)
3 x^{ 2 } + 2 x + 1 - ( 6 x^{ 2 } + 5 x + 4 ) 3 x^{ 2 } + 2 x + 1 - ( 6 x^{ 2 } + 5 x + 4 )
@ -439,7 +442,7 @@ class AbstractPolynom(Explicable):
( 3 - 6 ) x^{ 2 } + ( 2 - 5 ) x + 1 - 4 ( 3 - 6 ) x^{ 2 } + ( 2 - 5 ) x + 1 - 4
- 3 x^{ 2 } - 3 x - 3 - 3 x^{ 2 } - 3 x - 3
>>> R.steps >>> R.steps
[< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 6, 'x', 2, ^, *, 5, 'x', *, +, 4, +, -] >, < <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 6, 'x', 2, ^, *, -, 5, 'x', *, -, 4, -, +] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [[1, -4], [2, -5], [3, -6]]>, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [< <class 'pymath.calculus.expression.Expression'> [1, -4, +] >, < <class 'pymath.calculus.expression.Expression'> [2, -5, +] >, < <class 'pymath.calculus.expression.Expression'> [3, -6, +] >]>] [< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 6, 'x', 2, ^, *, 5, 'x', *, +, 4, +, -] >, < <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, 'x', *, +, 1, +, 6, 'x', 2, ^, *, -, 5, 'x', *, -, 4, -, +] >, < AbstractPolynom x [[1, -4], [2, -5], [3, -6]]>, < AbstractPolynom x [< <class 'pymath.calculus.expression.Expression'> [1, -4, +] >, < <class 'pymath.calculus.expression.Expression'> [2, -5, +] >, < <class 'pymath.calculus.expression.Expression'> [3, -6, +] >]>]
""" """
o_poly = self.conv2poly(other) o_poly = self.conv2poly(other)
ini_step = [Expression(self.postfix_tokens + ini_step = [Expression(self.postfix_tokens +
@ -461,34 +464,34 @@ class AbstractPolynom(Explicable):
>>> p = AbstractPolynom([1,2]) >>> p = AbstractPolynom([1,2])
>>> p*3 >>> p*3
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [3, 6]> < AbstractPolynom x [3, 6]>
>>> for i in (p*3).explain(): >>> for i in (p*3).explain():
... print(i) ... print(i)
( 2 x + 1 ) \times 3 ( 2 x + 1 ) \times 3
2 \times 3 x + 3 2 \times 3 x + 3
6 x + 3 6 x + 3
>>> (p*3).steps >>> (p*3).steps
[< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 3, *] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [3, < <class 'pymath.calculus.expression.Expression'> [2, 3, *] >]>] [< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 3, *] >, < AbstractPolynom x [3, < <class 'pymath.calculus.expression.Expression'> [2, 3, *] >]>]
>>> q = AbstractPolynom([0,0,4]) >>> q = AbstractPolynom([0,0,4])
>>> q*3 >>> q*3
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 12]> < AbstractPolynom x [0, 0, 12]>
>>> (q*3).steps >>> (q*3).steps
[< <class 'pymath.calculus.expression.Expression'> [4, 'x', 2, ^, *, 3, *] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, < <class 'pymath.calculus.expression.Expression'> [4, 3, *] >]>] [< <class 'pymath.calculus.expression.Expression'> [4, 'x', 2, ^, *, 3, *] >, < AbstractPolynom x [0, 0, < <class 'pymath.calculus.expression.Expression'> [4, 3, *] >]>]
>>> r = AbstractPolynom([0,1]) >>> r = AbstractPolynom([0,1])
>>> r*3 >>> r*3
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 3]> < AbstractPolynom x [0, 3]>
>>> (r*3).steps >>> (r*3).steps
[< <class 'pymath.calculus.expression.Expression'> ['x', 3, *] >] [< <class 'pymath.calculus.expression.Expression'> ['x', 3, *] >]
>>> p*q >>> p*q
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 4, 8]> < AbstractPolynom x [0, 0, 4, 8]>
>>> (p*q).steps >>> (p*q).steps
[< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 4, 'x', 2, ^, *, *] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 4, < <class 'pymath.calculus.expression.Expression'> [2, 4, *] >]>] [< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 4, 'x', 2, ^, *, *] >, < AbstractPolynom x [0, 0, 4, < <class 'pymath.calculus.expression.Expression'> [2, 4, *] >]>]
>>> p*r >>> p*r
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 1, 2]> < AbstractPolynom x [0, 1, 2]>
>>> P = AbstractPolynom([1,2,3]) >>> P = AbstractPolynom([1,2,3])
>>> Q = AbstractPolynom([4,5,6]) >>> Q = AbstractPolynom([4,5,6])
>>> P*Q >>> P*Q
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [4, 13, 28, 27, 18]> < AbstractPolynom x [4, 13, 28, 27, 18]>
""" """
o_poly = self.conv2poly(other) o_poly = self.conv2poly(other)
@ -531,20 +534,20 @@ class AbstractPolynom(Explicable):
>>> p = AbstractPolynom([0,0,3]) >>> p = AbstractPolynom([0,0,3])
>>> p**2 >>> p**2
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 0, 0, 9]> < AbstractPolynom x [0, 0, 0, 0, 9]>
>>> (p**2).steps >>> (p**2).steps
[< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, ^] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 0, 0, < <class 'pymath.calculus.expression.Expression'> [3, 2, ^] >]>] [< <class 'pymath.calculus.expression.Expression'> [3, 'x', 2, ^, *, 2, ^] >, < AbstractPolynom x [0, 0, 0, 0, < <class 'pymath.calculus.expression.Expression'> [3, 2, ^] >]>]
>>> p = AbstractPolynom([1,2]) >>> p = AbstractPolynom([1,2])
>>> p**2 >>> p**2
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1, 4, 4]> < AbstractPolynom x [1, 4, 4]>
>>> (p**2).steps >>> (p**2).steps
[< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 2, ^] >, < <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 2, 'x', *, 1, +, *] >, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1, [2, 2], < <class 'pymath.calculus.expression.Expression'> [2, 2, *] >]>, < <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1, < <class 'pymath.calculus.expression.Expression'> [2, 2, +] >, 4]>] [< <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 2, ^] >, < <class 'pymath.calculus.expression.Expression'> [2, 'x', *, 1, +, 2, 'x', *, 1, +, *] >, < AbstractPolynom x [1, [2, 2], < <class 'pymath.calculus.expression.Expression'> [2, 2, *] >]>, < AbstractPolynom x [1, < <class 'pymath.calculus.expression.Expression'> [2, 2, +] >, 4]>]
>>> p = AbstractPolynom([0,0,1]) >>> p = AbstractPolynom([0,0,1])
>>> p**3 >>> p**3
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [0, 0, 0, 0, 0, 0, 1]> < AbstractPolynom x [0, 0, 0, 0, 0, 0, 1]>
>>> p = AbstractPolynom([1,2,3]) >>> p = AbstractPolynom([1,2,3])
>>> p**2 >>> p**2
< <class 'pymath.calculus.abstract_polynom.AbstractPolynom'> [1, 4, 10, 12, 9]> < AbstractPolynom x [1, 4, 10, 12, 9]>
""" """
if not type(power): if not type(power):

View File

@ -67,15 +67,15 @@ class Polynom(AbstractPolynom):
/!\ variables need to be in brackets {} /!\ variables need to be in brackets {}
>>> Polynom.random(["{b}", "{a}"]) # doctest:+ELLIPSIS >>> Polynom.random(["{b}", "{a}"]) # doctest:+ELLIPSIS
< <class 'pymath.calculus.polynom.Polynom'> ... < Polynom x ...
>>> Polynom.random(degree = 2) # doctest:+ELLIPSIS >>> Polynom.random(degree = 2) # doctest:+ELLIPSIS
< <class 'pymath.calculus.polynomDeg2.Polynom_deg2'> ... < Polynom_deg2 x ...>
>>> Polynom.random(degree = 3) # doctest:+ELLIPSIS >>> Polynom.random(degree = 3) # doctest:+ELLIPSIS
< <class 'pymath.calculus.polynom.Polynom'> ... < Polynom x ...>
>>> Polynom.random(degree = 2, conditions=["{b**2-4*a*c}>0"]) # Polynom deg 2 with positive Delta (ax^2 + bx + c) >>> Polynom.random(degree = 2, conditions=["{b**2-4*a*c}>0"]) # Polynom deg 2 with positive Delta (ax^2 + bx + c)
< <class 'pymath.calculus.polynomDeg2.Polynom_deg2'> ... < Polynom_deg2 x ...>
>>> Polynom.random(["{c}", "{b}", "{a}"], conditions=["{b**2-4*a*c}>0"]) # Same as above >>> Polynom.random(["{c}", "{b}", "{a}"], conditions=["{b**2-4*a*c}>0"]) # Same as above
< <class 'pymath.calculus.polynomDeg2.Polynom_deg2'> ... < Polynom_deg2 x ...>
""" """
if (degree > 0 and degree < 26): if (degree > 0 and degree < 26):
@ -161,7 +161,7 @@ class Polynom(AbstractPolynom):
>>> P = Polynom([1, 2, 3]) >>> P = Polynom([1, 2, 3])
>>> Q = P.derivate() >>> Q = P.derivate()
>>> Q >>> Q
< <class 'pymath.calculus.polynom.Polynom'> [2, 6]> < Polynom x [2, 6]>
>>> print(Q.name) >>> print(Q.name)
P' P'
>>> for i in Q.explain(): >>> for i in Q.explain():

View File

@ -17,7 +17,7 @@ def str2tokens(exp):
>>> str2tokens('2*3+4') >>> str2tokens('2*3+4')
[2, 3, *, 4, +] [2, 3, *, 4, +]
>>> str2tokens('2x+4') >>> str2tokens('2x+4')
[2, < <class 'pymath.calculus.polynom.Polynom'> [0, 1]>, *, 4, +] [2, < Polynom x [0, 1]>, *, 4, +]
""" """
in_tokens = str2in_tokens(exp) in_tokens = str2in_tokens(exp)
post_tokens = in2post_fix(in_tokens) post_tokens = in2post_fix(in_tokens)
@ -40,7 +40,7 @@ def str2in_tokens(exp):
>>> str2in_tokens('2.3*3+4') >>> str2in_tokens('2.3*3+4')
[Decimal('2.3'), '*', 3, '+', 4] [Decimal('2.3'), '*', 3, '+', 4]
>>> str2in_tokens('a*3+4') >>> str2in_tokens('a*3+4')
[< <class 'pymath.calculus.polynom.Polynom'> [0, 1]>, '*', 3, '+', 4] [< Polynom a [0, 1]>, '*', 3, '+', 4]
""" """
tokens = ['', ''] tokens = ['', '']