U
    9%e  γ                   @   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© ϊX/var/www/html/Darija-Ai-API/env/lib/python3.8/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                    s0   | r| S t  | }| f| 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   