Fix: simplify rendering by expanding tree. still bugs with set_render
This commit is contained in:
@@ -108,12 +108,52 @@ x^7
|
||||
(6 + 6) * x + 4x^2 + 9
|
||||
4x^2 + 12x + 9
|
||||
|
||||
>>> e = Expression.from_str("(2x+3)(-x+1)")
|
||||
>>> e_simplified = e.simplify()
|
||||
>>> e_simplified
|
||||
<Quadratic - 2x^2 - x + 3>
|
||||
>>> for s in e_simplified.explain():
|
||||
... print(s)
|
||||
|
||||
"""
|
||||
|
||||
from .expression import Expression
|
||||
from .tokens import Token
|
||||
from .tokens.number import Integer, Decimal
|
||||
|
||||
|
||||
def set_render(render):
|
||||
"""
|
||||
:example:
|
||||
>>> e = Expression.from_str("2+3*4")
|
||||
>>> print(e)
|
||||
2 + 3 * 4
|
||||
>>> e = Expression.from_str("2+3/4")
|
||||
>>> print(e)
|
||||
2 + 3 / 4
|
||||
>>> es = e.simplify()
|
||||
>>> print(es)
|
||||
11 / 4
|
||||
>>> set_render('tex')
|
||||
>>> Expression.RENDER
|
||||
'tex'
|
||||
>>> Token.RENDER
|
||||
'tex'
|
||||
>>> e = Expression.from_str("2+3*4")
|
||||
>>> print(e)
|
||||
2 + 3 \\times 4
|
||||
>>> e = Expression.from_str("2+3/4")
|
||||
>>> print(e)
|
||||
2 + \\dfrac{3}{4}
|
||||
>>> es = e.simplify()
|
||||
>>> print(es)
|
||||
\\dfrac{11}{4}
|
||||
>>> set_render('txt')
|
||||
"""
|
||||
Expression.set_render(render)
|
||||
Token.set_render(render)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
e = Expression.from_str("1+2/3/4/5")
|
||||
et = e._typing()
|
||||
|
@@ -56,33 +56,7 @@ class Expression(object):
|
||||
|
||||
:param render: render name (txt or tex)
|
||||
|
||||
:example:
|
||||
>>> e = Expression.from_str("2+3*4")
|
||||
>>> print(e)
|
||||
2 + 3 * 4
|
||||
>>> e = Expression.from_str("2+3/4")
|
||||
>>> print(e)
|
||||
2 + 3 / 4
|
||||
>>> es = e.simplify()
|
||||
>>> print(es)
|
||||
11 / 4
|
||||
>>> Expression.set_render('tex')
|
||||
>>> Expression.RENDER
|
||||
'tex'
|
||||
>>> e = Expression.from_str("2+3*4")
|
||||
>>> print(e)
|
||||
2 + 3 \\times 4
|
||||
>>> e = Expression.from_str("2+3/4")
|
||||
>>> print(e)
|
||||
2 + \\dfrac{3}{4}
|
||||
>>> es = e.simplify()
|
||||
>>> print(es)
|
||||
\\dfrac{11}{4}
|
||||
>>> Expression.set_render('txt')
|
||||
"""
|
||||
from .tokens.token import Token
|
||||
|
||||
Token.set_render(render)
|
||||
cls.RENDER = render
|
||||
|
||||
@classmethod
|
||||
@@ -183,7 +157,7 @@ class Expression(object):
|
||||
""" Order the expression base on types
|
||||
|
||||
:example:
|
||||
|
||||
|
||||
>>> e = Expression.from_str("1 + 2x + 3 + 4x")
|
||||
>>> print(e)
|
||||
1 + 2x + 3 + 4x
|
||||
@@ -204,7 +178,8 @@ class Expression(object):
|
||||
return type(leaf)
|
||||
else:
|
||||
try:
|
||||
typed_leaf = typing(leaf.node, leaf.left_value, leaf.right_value)
|
||||
typed_leaf = typing(
|
||||
leaf.node, leaf.left_value, leaf.right_value)
|
||||
return typed_leaf.signature
|
||||
except (AttributeError, NotImplementedError, TypingError):
|
||||
return type(leaf)
|
||||
@@ -221,7 +196,7 @@ class Expression(object):
|
||||
|
||||
def _optimize(self, exclude_nodes=["/", "**"]):
|
||||
""" Return a copy of self with an optimize tree
|
||||
|
||||
|
||||
:example:
|
||||
>>> e = Expression.from_str("2x^2+2x+3x")
|
||||
>>> print(e._tree)
|
||||
@@ -262,7 +237,7 @@ class Expression(object):
|
||||
|
||||
def _typing(self):
|
||||
""" Build a copy of self with as much typing as possible
|
||||
|
||||
|
||||
:example:
|
||||
>>> e = Expression.from_str("2x", typing=False)
|
||||
>>> print(e._tree.map_on_leaf(lambda x: type(x).__name__))
|
||||
@@ -307,7 +282,7 @@ class Expression(object):
|
||||
|
||||
def _compute(self):
|
||||
"""" Compute one step of self
|
||||
|
||||
|
||||
"""
|
||||
try:
|
||||
return Expression(self._tree.apply_on_last_level(compute))
|
||||
@@ -372,7 +347,7 @@ class Expression(object):
|
||||
|
||||
def explain(self):
|
||||
""" Yield every calculus step which have lead to self
|
||||
|
||||
|
||||
:example:
|
||||
>>> e = Expression.from_str("2+3*4")
|
||||
>>> f = e.simplify()
|
||||
|
@@ -246,8 +246,8 @@ class Token(object):
|
||||
>>> c = a ** 2
|
||||
>>> c
|
||||
<Decimal 5.29>
|
||||
"""
|
||||
|
||||
"""
|
||||
return self._operate(other, "^")
|
||||
|
||||
def _roperate(self, other, operation):
|
||||
|
Reference in New Issue
Block a user