o
    *Î®cñ  ã                   @   sð   d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZ d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZ dd„ Z!dd„ Z"dd„ Z#dd„ Z$d S )!é    )Útop_downÚ	bottom_upÚsallÚtop_down_onceÚbottom_up_onceÚ	basic_fns)Úrebuild)Úexpr_fns)ÚAdd)ÚBasic)ÚInteger)ÚS)ÚStrÚSymbol)ÚxÚyÚzc                 C   s   t | tƒrtjS | S ©N)Ú
isinstancer   r   ÚZero)Ú
expression© r   úK/tmp/pip-target-vg8gfxp4/lib/python/sympy/strategies/tests/test_traverse.pyÚzero_symbols   s   r   c                  C   s@   t tƒ} | ttttttƒƒƒttdƒtdƒtttƒƒksJ ‚d S ©Nr   )r   r   r   r   r   r   r   )Úzero_onelevelr   r   r   Ú	test_sall   s   8r   c                   C   ó   t tƒ ttƒ d S r   )Ú_test_global_traversalr   Ú_test_stop_on_non_basicsr   r   r   r   Útest_bottom_up   ó   r    c                   C   r   r   )r   r   r   r   r   r   r   Útest_top_down   r!   r"   c                 C   sH   | t ƒ}|ttttttƒƒƒttdƒtdƒttdƒtdƒƒƒks"J ‚d S r   )r   r   r   r   r   r   )ÚtravÚzero_all_symbolsr   r   r   r   !   s    ÿr   c                 C   sh   dd„ }t tdƒtdƒt tdƒtdƒƒƒ}t tdƒtdƒt tdƒtdƒƒƒ}| |ƒ}||ƒ|ks2J ‚d S )Nc                 S   s"   z| d W S  t y   |  Y S w ©Né   )Ú	TypeError)Úexprr   r   r   Úadd_one_if_can)   s
   
ÿz0_test_stop_on_non_basics.<locals>.add_one_if_canr&   Úaé   Úbé   )r   r   r   )r#   r)   r(   ÚexpectedÚrlr   r   r   r   (   s
   ""r   c                   @   s   e Zd ZdS )ÚBasic2N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r0   6   s    r0   c                 C   s$   | j rt| j d tƒst| j Ž S | S r   )Úargsr   r   r0   )r   r   r   r   Ú<lambda>:   s   $ r5   c                  C   sX   t tƒ} | ttdƒtdƒttdƒtdƒƒƒƒttdƒtdƒttdƒtdƒƒƒks*J ‚d S )Ng      ð?g       @r-   é   )r   r/   r   r   r0   )Útop_rlr   r   r   Útest_top_down_once=   ó   Pr8   c                  C   sX   t tƒ} | ttdƒtdƒttdƒtdƒƒƒƒttdƒtdƒttdƒtdƒƒƒks*J ‚d S )Nr&   r+   g      @g      @)r   r/   r   r   r0   )Ú	bottom_rlr   r   r   Útest_bottom_up_onceC   r9   r;   c                  C   sD   t td  } tdd„ tƒ| ƒ}tdd„ tƒ| ƒ}t|ƒ|ks J ‚d S )Nr-   c                 S   s   | d S r%   r   ©Úvr   r   r   r5   K   s    ztest_expr_fns.<locals>.<lambda>c                 S   s   t  t| tdƒ¡S r%   )r   Ú__new__r
   r   r<   r   r   r   r5   L   s    )r   r   r   r	   r   r   )r(   Úer,   r   r   r   Útest_expr_fnsI   s   r@   N)%Úsympy.strategies.traverser   r   r   r   r   r   Úsympy.strategies.rlr   Úsympy.strategies.utilr	   Úsympy.core.addr
   Úsympy.core.basicr   Úsympy.core.numbersr   Úsympy.core.singletonr   Úsympy.core.symbolr   r   Ú	sympy.abcr   r   r   r   r   r    r"   r   r   r0   r/   r8   r;   r@   r   r   r   r   Ú<module>   s(     