B
    ™‘[O  ã               @   s\   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ efdd„Zefd	d
„ZdS )z) Branching Strategies to Traverse a Tree é    )Úprint_functionÚdivision)Úproduct)Ú	basic_fnsé   )ÚchainÚidentityÚdo_onec                s   t tˆ 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)ÚbruleÚfns© ú?lib/python3.7/site-packages/sympy/strategies/branch/traverse.pyÚ<lambda>   s    ztop_down.<locals>.<lambda>)r   r	   r   )r   r   r   )r   r   r   r   
   s    
r   c                s,   t |jdƒ\‰‰‰‰‡ ‡‡‡‡fdd„}|S )z$ Strategic all - apply rule to args )ÚopÚnewÚchildrenÚleafc             3   sL   ˆ| ƒr| V  n8ˆ| ƒ}t tˆ ˆ| ƒƒŽ }x|D ]}ˆ|f|žŽ V  q0W d S )N)r   Úmap)r   ZmyopZargssÚ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   Ú	itertoolsr   Zsympy.strategies.utilr   Zcorer   r   r	   r   r
   r   r   r   r   Ú<module>   s   