B
    ed  γ               @   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© ϊf/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sympy/strategies/traverse.pyΪ<lambda>   σ    ztop_down.<locals>.<lambda>)r   )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 )N)r   Ϊ	bottom_up)r   )r   r	   r
   r   r      r   zbottom_up.<locals>.<lambda>)r   )r	   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 )N)r   r   )r   )r   r	   r
   r   r      r   ztop_down_once.<locals>.<lambda>)r   )r	   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 )N)r   r   )r   )r   r	   r
   r   r      r   z bottom_up_once.<locals>.<lambda>)r   )r	   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 )N)Ϊ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   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   