� ��g���t�ddlmZddlmZmZddlmZddlmcm Z ddlm Z efd�Z efd�Z e fd�Z efd �ZdS) �)�partial)�chain�minimize)�identityN)�yieldifyc ��|D]B}t||��r0||ttt||���|���cS�C||��S)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 �e/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/sympy/strategies/tree.pyr r sw��8�)�)�� �d�C� � � )��4��9�c�'�)�$�T�"J�"J�"J�"&�(�(�)� )� )� )� )� �4��:�:��c �p�tt|���}t|t|tt ifi|��S)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)rrr �list�tupler)rr�kwargs�optimizes r�greedyr+s8��D�x�9�5�5�5�H� �T�D�(�E�5�9� D� D�V� D� D�Drc�j�t|ttjttji|���S)a� 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� multiplexrr)rr s r� allresultsrqs0��( �T�D�&�"2�E�6�<�H�� � � � rc ��������fd�S)Nc �h��ttt�fi���|��������S)N)�key)�minrr)�exprrrrs ���r�<lambda>zbrute.<locals>.<lambda>�s>����E�"<�*�T�"<�"<�V�"<�"<�T�"B�"B�C�C� )�+�+�+�r�)rrrs```r�bruter$�s(����� +� +� +� +� +� +�+r)� functoolsr�sympy.strategiesrr�sympy.strategies.corer�sympy.strategies.branch� strategiesrrr rrr$r#rr�<module>r*s���������,�,�,�,�,�,�,�,�*�*�*�*�*�*�(�(�(�(�(�(�(�(�(�,�,�,�,�,�,� (� � � � �F$�CE�CE�CE�CE�L#� � � � �0#�+�+�+�+�+�+r
Memory