Fix(Core): Change append_bot to respect natural computing order
This commit is contained in:
parent
e37a8a5a2e
commit
4999e80ec3
@ -608,6 +608,10 @@ def str2(sink, convert_to_mo=True):
|
|||||||
>>> t = str2nestedlist(exp)
|
>>> t = str2nestedlist(exp)
|
||||||
>>> print(t)
|
>>> print(t)
|
||||||
[1, '+', '-', [3, '+', 4]]
|
[1, '+', '-', [3, '+', 4]]
|
||||||
|
>>> exp = "1+3x^2"
|
||||||
|
>>> t = str2nestedlist(exp)
|
||||||
|
>>> print(t)
|
||||||
|
[1, '+', 3, '*', 'x', '^', 2]
|
||||||
|
|
||||||
>>> from .tree import MutableTree
|
>>> from .tree import MutableTree
|
||||||
>>> str2tree = str2(MutableTree.sink)
|
>>> str2tree = str2(MutableTree.sink)
|
||||||
@ -679,6 +683,41 @@ def str2(sink, convert_to_mo=True):
|
|||||||
| > +
|
| > +
|
||||||
| | > 3
|
| | > 3
|
||||||
| | > 4
|
| | > 4
|
||||||
|
>>> exp = "2*4-1"
|
||||||
|
>>> t = str2tree(exp)
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> *
|
||||||
|
| > 2
|
||||||
|
| > 4
|
||||||
|
> -1
|
||||||
|
>>> exp = "3+4x"
|
||||||
|
>>> t = str2tree(exp)
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> 3
|
||||||
|
> *
|
||||||
|
| > 4
|
||||||
|
| > x
|
||||||
|
>>> exp = "3x^2"
|
||||||
|
>>> t = str2tree(exp)
|
||||||
|
>>> print(t)
|
||||||
|
*
|
||||||
|
> 3
|
||||||
|
> ^
|
||||||
|
| > x
|
||||||
|
| > 2
|
||||||
|
>>> exp = "3+4x^5"
|
||||||
|
>>> t = str2tree(exp)
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> 3
|
||||||
|
> *
|
||||||
|
| > 4
|
||||||
|
| > ^
|
||||||
|
| | > x
|
||||||
|
| | > 5
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
lfop = lookfor(is_operator)
|
lfop = lookfor(is_operator)
|
||||||
|
@ -15,7 +15,7 @@ from .tree_tools import (to_nested_parenthesis,
|
|||||||
)
|
)
|
||||||
from .coroutine import coroutine, STOOOP
|
from .coroutine import coroutine, STOOOP
|
||||||
from .str2 import str2
|
from .str2 import str2
|
||||||
from .operator import OPERATORS
|
from .operator import OPERATORS, is_operator
|
||||||
|
|
||||||
__all__ = ["Tree", "MutableTree"]
|
__all__ = ["Tree", "MutableTree"]
|
||||||
|
|
||||||
@ -683,17 +683,83 @@ class Tree(object):
|
|||||||
| | > +
|
| | > +
|
||||||
| | | > 8
|
| | | > 8
|
||||||
| | | > 9
|
| | | > 9
|
||||||
>>> t = Tree.from_str("1+2+3+4+5*6*7*8*9")
|
|
||||||
|
>>> t = Tree.from_str("0*1*2*3*4+5+6+7+8+9")
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> +
|
||||||
|
| > +
|
||||||
|
| | > +
|
||||||
|
| | | > +
|
||||||
|
| | | | > *
|
||||||
|
| | | | | > *
|
||||||
|
| | | | | | > *
|
||||||
|
| | | | | | | > *
|
||||||
|
| | | | | | | | > 0
|
||||||
|
| | | | | | | | > 1
|
||||||
|
| | | | | | | > 2
|
||||||
|
| | | | | | > 3
|
||||||
|
| | | | | > 4
|
||||||
|
| | | | > 5
|
||||||
|
| | | > 6
|
||||||
|
| | > 7
|
||||||
|
| > 8
|
||||||
|
> 9
|
||||||
|
>>> bal_t = t.balance()
|
||||||
|
>>> print(bal_t)
|
||||||
|
+
|
||||||
|
> *
|
||||||
|
| > *
|
||||||
|
| | > *
|
||||||
|
| | | > 0
|
||||||
|
| | | > 1
|
||||||
|
| | > 2
|
||||||
|
| > *
|
||||||
|
| | > 3
|
||||||
|
| | > 4
|
||||||
|
> +
|
||||||
|
| > +
|
||||||
|
| | > 5
|
||||||
|
| | > 6
|
||||||
|
| > +
|
||||||
|
| | > 7
|
||||||
|
| | > +
|
||||||
|
| | | > 8
|
||||||
|
| | | > 9
|
||||||
|
|
||||||
|
>>> t = Tree.from_str("0+1+2+3+4+5*6*7*8*9")
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> +
|
||||||
|
| > +
|
||||||
|
| | > +
|
||||||
|
| | | > +
|
||||||
|
| | | | > 0
|
||||||
|
| | | | > 1
|
||||||
|
| | | > 2
|
||||||
|
| | > 3
|
||||||
|
| > 4
|
||||||
|
> *
|
||||||
|
| > *
|
||||||
|
| | > *
|
||||||
|
| | | > *
|
||||||
|
| | | | > 5
|
||||||
|
| | | | > 6
|
||||||
|
| | | > 7
|
||||||
|
| | > 8
|
||||||
|
| > 9
|
||||||
>>> bal_t = t.balance()
|
>>> bal_t = t.balance()
|
||||||
>>> print(bal_t)
|
>>> print(bal_t)
|
||||||
+
|
+
|
||||||
> +
|
> +
|
||||||
| > +
|
| > +
|
||||||
| | > +
|
| | > +
|
||||||
|
| | | > 0
|
||||||
| | | > 1
|
| | | > 1
|
||||||
| | | > 2
|
| | > 2
|
||||||
|
| > +
|
||||||
| | > 3
|
| | > 3
|
||||||
| > 4
|
| | > 4
|
||||||
> *
|
> *
|
||||||
| > *
|
| > *
|
||||||
| | > *
|
| | > *
|
||||||
@ -703,14 +769,15 @@ class Tree(object):
|
|||||||
| > *
|
| > *
|
||||||
| | > 8
|
| | > 8
|
||||||
| | > 9
|
| | > 9
|
||||||
>>> t = Tree.from_str("1+2+3+4+5/6/7/8/9")
|
>>> t = Tree.from_str("0+1+2+3+4+5/6/7/8/9")
|
||||||
>>> bal_t = t.balance(exclude_nodes=['/'])
|
>>> print(t)
|
||||||
>>> print(bal_t)
|
|
||||||
+
|
+
|
||||||
> +
|
> +
|
||||||
| > +
|
| > +
|
||||||
| | > +
|
| | > +
|
||||||
| | | > 1
|
| | | > +
|
||||||
|
| | | | > 0
|
||||||
|
| | | | > 1
|
||||||
| | | > 2
|
| | | > 2
|
||||||
| | > 3
|
| | > 3
|
||||||
| > 4
|
| > 4
|
||||||
@ -723,6 +790,28 @@ class Tree(object):
|
|||||||
| | | > 7
|
| | | > 7
|
||||||
| | > 8
|
| | > 8
|
||||||
| > 9
|
| > 9
|
||||||
|
>>> bal_t = t.balance(exclude_nodes=['/'])
|
||||||
|
>>> print(bal_t)
|
||||||
|
+
|
||||||
|
> +
|
||||||
|
| > +
|
||||||
|
| | > +
|
||||||
|
| | | > 0
|
||||||
|
| | | > 1
|
||||||
|
| | > 2
|
||||||
|
| > +
|
||||||
|
| | > 3
|
||||||
|
| | > 4
|
||||||
|
> /
|
||||||
|
| > /
|
||||||
|
| | > /
|
||||||
|
| | | > /
|
||||||
|
| | | | > 5
|
||||||
|
| | | | > 6
|
||||||
|
| | | > 7
|
||||||
|
| | > 8
|
||||||
|
| > 9
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
l_depth = self.left_value.depth()
|
l_depth = self.left_value.depth()
|
||||||
@ -819,6 +908,26 @@ class MutableTree(Tree):
|
|||||||
> +
|
> +
|
||||||
| > -2
|
| > -2
|
||||||
| > 3
|
| > 3
|
||||||
|
>>> t = MutableTree.from_str("1+2*3+4*5")
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> +
|
||||||
|
| > 1
|
||||||
|
| > *
|
||||||
|
| | > 2
|
||||||
|
| | > 3
|
||||||
|
> *
|
||||||
|
| > 4
|
||||||
|
| > 5
|
||||||
|
>>> t = MutableTree.from_str("1+2*3*4")
|
||||||
|
>>> print(t)
|
||||||
|
+
|
||||||
|
> 1
|
||||||
|
> *
|
||||||
|
| > *
|
||||||
|
| | > 2
|
||||||
|
| | > 3
|
||||||
|
| > 4
|
||||||
"""
|
"""
|
||||||
str_2_mut_tree = str2(cls.sink, convert_to_mo)
|
str_2_mut_tree = str2(cls.sink, convert_to_mo)
|
||||||
return str_2_mut_tree(expression)
|
return str_2_mut_tree(expression)
|
||||||
@ -861,6 +970,19 @@ class MutableTree(Tree):
|
|||||||
| > None
|
| > None
|
||||||
| > 1
|
| > 1
|
||||||
> 2
|
> 2
|
||||||
|
>>> sink = MutableTree.sink()
|
||||||
|
>>> for i in ["1", "+", "2", "*", "x", "^", "3"]:
|
||||||
|
... sink.send(i)
|
||||||
|
>>> a = sink.throw(STOOOP)
|
||||||
|
>>> print(a)
|
||||||
|
+
|
||||||
|
> 1
|
||||||
|
> *
|
||||||
|
| > 2
|
||||||
|
| > ^
|
||||||
|
| | > x
|
||||||
|
| | > 3
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ans = cls()
|
ans = cls()
|
||||||
@ -868,7 +990,7 @@ class MutableTree(Tree):
|
|||||||
while True:
|
while True:
|
||||||
c = yield
|
c = yield
|
||||||
if c is not None:
|
if c is not None:
|
||||||
if c in OPERATORS.keys():
|
if is_operator(c):
|
||||||
try:
|
try:
|
||||||
ans.set_node(c)
|
ans.set_node(c)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -1043,9 +1165,32 @@ class MutableTree(Tree):
|
|||||||
> +
|
> +
|
||||||
| > 2
|
| > 2
|
||||||
| > None
|
| > None
|
||||||
|
>>> t.append(3)
|
||||||
|
>>> print(t)
|
||||||
|
*
|
||||||
|
> 1
|
||||||
|
> +
|
||||||
|
| > 2
|
||||||
|
| > 3
|
||||||
|
>>> t.append_bot("+")
|
||||||
|
>>> print(t)
|
||||||
|
*
|
||||||
|
> 1
|
||||||
|
> +
|
||||||
|
| > +
|
||||||
|
| | > 2
|
||||||
|
| | > 3
|
||||||
|
| > None
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
rv = self.right_value
|
rv = self.right_value
|
||||||
|
try:
|
||||||
|
if value == rv.node:
|
||||||
|
rv.append_top(value)
|
||||||
|
else:
|
||||||
|
rv.append_bot(value)
|
||||||
|
except AttributeError:
|
||||||
nright_value = MutableTree()
|
nright_value = MutableTree()
|
||||||
nright_value.set_node(value)
|
nright_value.set_node(value)
|
||||||
nright_value.set_left_value(rv)
|
nright_value.set_left_value(rv)
|
||||||
|
Loading…
Reference in New Issue
Block a user