@@ -1663,6 +1663,10 @@ def __init__(self, ex):
1663
1663
1664
1664
sage: from sage.symbolic.expression_conversions import ExpressionTreeWalker
1665
1665
sage: from sage.symbolic.random_tests import random_expr
1666
+ sage: ex = sin(atan(0,hold=True)+hypergeometric((1,),(1,),x))
1667
+ sage: s = ExpressionTreeWalker(ex)
1668
+ sage: bool(s() == ex)
1669
+ True
1666
1670
sage: foo = random_expr(20, nvars=2)
1667
1671
sage: s = ExpressionTreeWalker(foo)
1668
1672
sage: bool(s() == foo)
@@ -1725,12 +1729,16 @@ def composition(self, ex, operator):
1725
1729
1726
1730
sage: from sage.symbolic.expression_conversions import ExpressionTreeWalker
1727
1731
sage: foo = function('foo')
1728
- sage: f = foo(foo(x ))
1732
+ sage: f = foo(atan2(0, 0, hold=True ))
1729
1733
sage: s = ExpressionTreeWalker(f)
1730
1734
sage: bool(s.composition(f, f.operator()) == f)
1731
1735
True
1732
1736
"""
1733
- return operator (* map (self , ex .operands ()))
1737
+ from sage .symbolic .function import Function
1738
+ if isinstance (operator , Function ):
1739
+ return operator (* map (self , ex .operands ()), hold = True )
1740
+ else :
1741
+ return operator (* map (self , ex .operands ()))
1734
1742
1735
1743
def derivative (self , ex , operator ):
1736
1744
"""
@@ -1745,6 +1753,18 @@ def derivative(self, ex, operator):
1745
1753
"""
1746
1754
return operator (* map (self , ex .operands ()))
1747
1755
1756
+ def tuple (self , ex ):
1757
+ """
1758
+ EXAMPLES::
1759
+
1760
+ sage: from sage.symbolic.expression_conversions import ExpressionTreeWalker
1761
+ sage: foo = function('foo')
1762
+ sage: f = hypergeometric((1,2,3,),(x,),x)
1763
+ sage: s = ExpressionTreeWalker(f)
1764
+ sage: bool(s() == f)
1765
+ True
1766
+ """
1767
+ return ex .operands ()
1748
1768
1749
1769
class SubstituteFunction (ExpressionTreeWalker ):
1750
1770
def __init__ (self , ex , original , new ):
0 commit comments