+
    i                     |    ^ RI Ht ^ RIHtHt ^ RIHt ^ RIHu H	t	 ^ RIH
t
 ]3R lt]3R lt]
3R lt]3R	 ltR# )
    )partial)chainminimize)identityN)yieldifyc                    V F;  p\        W4      '       g   K  W,          ! \        \        \        WR7      V 4      !  u # 	  V! V 4      # )a>  Apply functions onto recursive containers (tree).

Explanation
===========

join - a dictionary mapping container types to functions
  e.g. ``{list: minimize, tuple: chain}``

Keys are containers/iterables.  Values are functions [a] -> a.

Examples
========

>>> from sympy.strategies.tree import treeapply
>>> tree = [(3, 2), (4, 1)]
>>> treeapply(tree, {list: max, tuple: min})
2

>>> add = lambda *args: sum(args)
>>> def mul(*args):
...     total = 1
...     for arg in args:
...         total *= arg
...     return total
>>> treeapply(tree, {list: mul, tuple: add})
25
)joinleaf)
isinstancemapr   	treeapply)treer	   r
   typs   &&& u/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/strategies/tree.pyr   r      sG    8 d  9c')$"J"&( ) )  :    c                ^    \        \        VR7      p\        V \        V\        \
        /3/ VB # )a   Execute a strategic tree.  Select alternatives greedily

Trees
-----

Nodes in a tree can be either

function - a leaf
list     - a selection among operations
tuple    - a sequence of chained operations

Textual examples
----------------

Text: Run f, then run g, e.g. ``lambda x: g(f(x))``
Code: ``(f, g)``

Text: Run either f or g, whichever minimizes the objective
Code: ``[f, g]``

Textx: Run either f or g, whichever is better, then run h
Code: ``([f, g], h)``

Text: Either expand then simplify or try factor then foosimp. Finally print
Code: ``([(expand, simplify), (factor, foosimp)], print)``

Objective
---------

"Better" is determined by the objective keyword.  This function makes
choices to minimize the objective.  It defaults to the identity.

Examples
========

>>> from sympy.strategies.tree import greedy
>>> inc    = lambda x: x + 1
>>> dec    = lambda x: x - 1
>>> double = lambda x: 2*x

>>> tree = [inc, (dec, double)] # either inc or dec-then-double
>>> fn = greedy(tree)
>>> fn(4)  # lowest value comes from the inc
5
>>> fn(1)  # lowest value comes from dec then double
0

This function selects between options in a tuple.  The result is chosen
that minimizes the objective function.

>>> fn = greedy(tree, objective=lambda x: -x)  # maximize
>>> fn(4)  # highest value comes from the dec then double
6
>>> fn(1)  # highest value comes from the inc
2

Greediness
----------

This is a greedy algorithm.  In the example:

    ([a, b], c)  # do either a or b, then do c

the choice between running ``a`` or ``b`` is made without foresight to c
)	objective)r   r   r   listtupler   )r   r   kwargsoptimizes   &&, r   greedyr   +   s,    D x95HTD(E59DVDDr   c                n    \        V \        \        P                  \        \        P
                  /VR7      # )as  Execute a strategic tree.  Return all possibilities.

Returns a lazy iterator of all possible results

Exhaustiveness
--------------

This is an exhaustive algorithm.  In the example

    ([a, b], [c, d])

All of the results from

    (a, c), (b, c), (a, d), (b, d)

are returned.  This can lead to combinatorial blowup.

See sympy.strategies.greedy for details on input
)r
   )r   r   branch	multiplexr   r   )r   r
   s   &&r   
allresultsr   q   s+    ( TD&"2"2E6<<H   r   c                    a aa VVV 3R  l# )c           	      P   < \        \        \        S3/ SB ! V 4      4      SR 7      # ))key)minr   r   )exprr   r   r   s   &r   <lambda>brute.<locals>.<lambda>   s#    E*T"<V"<T"BC )+r    )r   r   r   s   fflr   bruter%      s    + +r   )	functoolsr   sympy.strategiesr   r   sympy.strategies.corer   sympy.strategies.branch
strategiesr   r   r   r   r   r%   r$   r   r   <module>r+      sC     , * ( ( ,  (  F $ CEL #  0 # +r   