a
    SG5d  ใ                   @   s`   d Z ddlmZ ddlmZmZ efddZefddZefdd	Zefd
dZ	efddZ
dS )zStrategies to Traverse a Tree.้    )ฺ	basic_fns)ฺchainฺdo_onec                    s   t  fddS )z;Apply a rule down a tree running it on the top nodes first.c                    s   t t  | S ฉNฉฺsallฺtop_downฉฺexprฉฺfnsฺruleฉ ๚U/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/strategies/traverse.pyฺ<lambda>   ๓    ztop_down.<locals>.<lambda>ฉr   ฉr   r   r   r   r   r      s    r   c                    s   t  fddS )z>Apply a rule down a tree running it on the bottom nodes first.c                    s   t t  | S r   ฉr   ฺ	bottom_upr	   r   r   r   r      r   zbottom_up.<locals>.<lambda>r   r   r   r   r   r      s    r   c                    s   t  fddS )z+Apply a rule down a tree - stop on success.c                    s   t t  | S r   r   r	   r   r   r   r      r   ztop_down_once.<locals>.<lambda>ฉr   r   r   r   r   ฺtop_down_once   s    r   c                    s   t  fddS )z)Apply a rule up a tree - stop on success.c                    s   t t  | S r   r   r	   r   r   r   r      r   z bottom_up_once.<locals>.<lambda>r   r   r   r   r   ฺbottom_up_once   s    r   c                    s,   t |jd\  fdd}|S )z#Strategic all - apply rule to args.)ฺopฺnewฺchildrenฺleafc                    s2   | r| S t  | }| g|ขR  S d S r   )ฺmap)r
   ฺargsฉr   r   r   r   r   r   r   ฺall_rl   s    zsall.<locals>.all_rl)r   ฺget)r   r   r    r   r   r   r      s    r   N)ฺ__doc__Zsympy.strategies.utilr   Zsympy.strategies.corer   r   r   r   r   r   r   r   r   r   r   ฺ<module>   s   