B
    [Π  γ               @   sp   d Z ddlmZm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.ι    )Ϊprint_functionΪdivision)Ϊ	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© ϊ8lib/python3.7/site-packages/sympy/strategies/traverse.pyΪ<lambda>
   s    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      s    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      s    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      s    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
__future__r   r   Zsympy.strategies.utilr   Zsympy.strategies.corer   r   r   r   r   r   r   r   r   r   r   Ϊ<module>   s   