o
    i                     @   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                       t  fddS )z;Apply a rule down a tree running it on the top nodes first.c                       t t  | S Nsalltop_downexprfnsrule h/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sympy/strategies/traverse.py<lambda>       ztop_down.<locals>.<lambda>r   r   r   r   r   r   r
         r
   c                       t  fddS )z>Apply a rule down a tree running it on the bottom nodes first.c                    r   r   r	   	bottom_upr   r   r   r   r      r   zbottom_up.<locals>.<lambda>r   r   r   r   r   r      r   r   c                    r   )z+Apply a rule down a tree - stop on success.c                    r   r   r   r   r   r   r   r      r   ztop_down_once.<locals>.<lambda>r   r   r   r   r   top_down_once   r   r   c                    r   )z)Apply a rule up a tree - stop on success.c                    r   r   r   r   r   r   r   r      r   z bottom_up_once.<locals>.<lambda>r   r   r   r   r   bottom_up_once   r   r   c                    s,   t |jd\  fdd}|S )z#Strategic all - apply rule to args.)opnewchildrenleafc                    s.   | r| S t  | }| g|R  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    