o
    8Va=                     @   s   d dl mZmZmZmZmZmZ d dlmZm	Z	 dd Z
dd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),    )
DispatcherMDNotImplementedErrorMethodDispatcherhalt_orderingrestart_ordering#ambiguity_register_error_ignore_dup)raiseswarnsc                 C      | S N xr   r   N/usr/lib/python3/dist-packages/sympy/multipledispatch/tests/test_dispatcher.pyidentity      r   c                 C      | d S N   r   r   r   r   r   inc      r   c                 C      | d S r   r   r   r   r   r   dec   r   r   c                  C   s   t d} | tft | tft tt | tftks!J W d    n1 s+w   Y  | 	ttu s9J | ddksAJ | ddksIJ d S )Nfr            ?        )
r   addintr   floatr   r	   DeprecationWarningZresolvedispatchr   r   r   r   test_dispatcher   s   
r#   c                  C   s>   t d} | ttft | ddksJ | ddksJ d S )Nr   r   r   r          @)r   registerr   r   r   r"   r   r   r   test_union_types!   s   r&   c                  C   sP   t d} | tdd }| tdd }| ddksJ | ddks&J d S )	Nr   c                 S   r   r   r   r   r   r   r   r   ,      z)test_dispatcher_as_decorator.<locals>.incc                 S   r   r   r   r   r   r   r   r   0   r'   r   r   r   r   )r   r%   r   r   )r   r   r   r   r   test_dispatcher_as_decorator)   s   

r(   c                  C   s4   G dd d} | d}| dg}|j |j ksJ d S )Nc                   @   s8   e Zd ZedZeedd Zeedd Z	dS )z+test_register_instance_method.<locals>.Testr   c                 S   s
   || _ d S r   data)selfr*   r   r   r   
_init_list=   s   
z6test_register_instance_method.<locals>.Test._init_listc                 S   s   |g| _ d S r   r)   )r+   Zdatumr   r   r   	_init_objA   s   z5test_register_instance_method.<locals>.Test._init_objN)
__name__
__module____qualname__r   __init__r%   listr,   objectr-   r   r   r   r   Test:   s    
r4      r)   )r4   abr   r   r   test_register_instance_method8   s   
r8   c                     s   t d} dd }dg  fdd}| jttf||d  d r!J | jttf||d  d r1J | jttf||d  d sAJ d S )	Nr   c                 S   r
   r   r   r   r   r   r   r   M       z#test_on_ambiguity.<locals>.identityFc                    s   d d< d S )NTr   r   )
dispatcherZambZambiguitiesr   r   on_ambiguityQ   s   z'test_on_ambiguity.<locals>.on_ambiguityr<   r   )r   r   r3   r   )r   r   r<   r   r;   r   test_on_ambiguityJ   s   r>   c                      "   t d tt fddsJ d S )Nr   c                      s     dtS )N)r   )r   r   r   r"   r   r   <lambda>^   s    z/test_raise_error_on_non_class.<locals>.<lambda>r   r   	TypeErrorr   r   r"   r   test_raise_error_on_non_class\      rC   c                  C   s   dd } dd }dd }d}t d|d	}|ttf|  |ttf| |ttf| | j |jv s6J |j |jv s@J |j| j |j|j k sTJ d
|jv s[J ||jv sbJ d S )Nc                 S      | | S z Docstring number one r   r   yr   r   r   onec   r'   ztest_docstring.<locals>.onec                 S   rE   z Docstring number two r   rG   r   r   r   twog   r'   ztest_docstring.<locals>.twoc                 S   rE   r   r   rG   r   r   r   threek   r   ztest_docstring.<locals>.threeDoc of the multimethod itselfr   doczobject, object)r   r   r3   r   r   __doc__stripfindrI   rK   rL   
master_docr   r   r   r   test_docstringa   s   rU   c                  C   s   dd } dd }dd }d}t d|d	}|ttf|  |ttf| |ttf| |d
d
|jks7J |dd|jksBJ d S )Nc                 S   rE   rF   r   rG   r   r   r   rI   ~   r'   ztest_help.<locals>.onec                 S   rE   rJ   r   rG   r   r   r   rK      r'   ztest_help.<locals>.twoc                 S   rE   )z Docstring number three r   rG   r   r   r   rL      r'   ztest_help.<locals>.threerM   r   rN   r   r   r$   )r   r   r3   r   r   Z_helprP   rS   r   r   r   	test_help}   s   rV   c                  C   sl   dd } dd }d}t d|d}|ttf|  |ttf| d|d	d	v s*J d
|ddv s4J d S )Nc                 S   rE   rF   r   rG   r   r   r   rI      r'   ztest_source.<locals>.onec                 S   s   | | S rJ   r   rG   r   r   r   rK      r'   ztest_source.<locals>.tworM   r   rN   zx + yr   zx - yr   )r   r   r   r   Z_source)rI   rK   rT   r   r   r   r   test_source   s   rW   c                      r?   )Nr   c                      s
     dS r   )sourcer   r"   r   r   r@         
 z8test_source_raises_on_missing_function.<locals>.<lambda>rA   r   r   r"   r   &test_source_raises_on_missing_function   s   rZ   c                     s   dg  fdd} t d}t  dd }|ttf| |ttf|  dgks+J t| d  dgks7J t|jttfttfhksFJ d S )	Nr   c                    s    d  d7  < d S )Nr   r   r   )r6   r7   gr   r   r<      s   z1test_halt_method_resolution.<locals>.on_ambiguityr   c                  W      d S r   r   )argsr   r   r   func   r   z)test_halt_method_resolution.<locals>.funcr=   r   )r   r   r   r   r3   r   setZordering)r<   r   r_   r   r[   r   test_halt_method_resolution   s   
"ra   c                      r?   )Nr   c                          dS Nhellor   r   r"   r   r   r@          z)test_no_implementations.<locals>.<lambda>)r   r   NotImplementedErrorr   r   r"   r   test_no_implementations   rD   rg   c                     sv   t d  t tdd }  ddksJ  g dg dks&J tt fdds1J | dd	ks9J d S )
Nr   c                 S      | d d d S Nr   r   r   r   r   rev   s   z#test_register_stacking.<locals>.rev)r   r   r5   )r5   r   r   c                      rb   rc   r   r   r"   r   r   r@      re   z(test_register_stacking.<locals>.<lambda>rd   Zolleh)r   r%   r2   tupler   rf   )rk   r   r"   r   test_register_stacking   s   rm   c                  C   sz   t d} | tdd }| ttdd }G dd dt}| t|u s(J | ||u s1J | tt|u s;J d S )Nr   c                 S   rh   ri   r   r   r   r   r   rk      s   z!test_dispatch_method.<locals>.revc                 S   rE   r   r   rG   r   r   r   r      r'   z!test_dispatch_method.<locals>.addc                   @      e Zd ZdS )z$test_dispatch_method.<locals>.MyListNr.   r/   r0   r   r   r   r   MyList       rp   )r   r%   r2   r   r!   )r   rk   r   rp   r   r   r   test_dispatch_method   s   


rr   c                     sv   t d  tdd }  tdd }  ddksJ  ddks&J  d	dks.J tt fd
ds9J d S )Nr   c                 S   s   dS )Ndefaultr   r   r   r   r   _   s   ztest_not_implemented.<locals>._c                 S   s   | d dkrdS t  )Nr   r   evenr   r   r   r   r   rt      s   rd   rs   r   ru   r5   c                      s
    ddS )Nr   r   r   r   r"   r   r   r@      rY   z&test_not_implemented.<locals>.<lambda>)r   r%   r3   r   r   rf   rt   r   r"   r   test_not_implemented   s   

rx   c                     s4   t d  tdd } tt fddsJ d S )Nr   c                 S   s   t  r   rv   )r6   r   r   r   rt     s   z%test_not_implemented_error.<locals>._c                      rb   )Nr   r   r   r"   r   r   r@   	  re   z,test_not_implemented_error.<locals>.<lambda>)r   r%   r   r   rf   rw   r   r"   r   test_not_implemented_error  s   
ry   c                     s   t dG dd d} G dd d|  G dd d| |  fdd	 t  | fd
d	 t | fdd	 t | fdd	 t tt fdd	sTJ d S )Nr   c                   @   rn   )z3test_ambiguity_register_error_ignore_dup.<locals>.ANro   r   r   r   r   A  rq   rz   c                   @   rn   )z3test_ambiguity_register_error_ignore_dup.<locals>.BNro   r   r   r   r   B  rq   r{   c                   @   rn   )z3test_ambiguity_register_error_ignore_dup.<locals>.CNro   r   r   r   r   C  rq   r|   c                 S   r]   r   r   rG   r   r   r   r@     r9   z:test_ambiguity_register_error_ignore_dup.<locals>.<lambda>c                 S   r]   r   r   rG   r   r   r   r@     r9   c                 S   r]   r   r   rG   r   r   r   r@     r9   c                 S   r]   r   r   rG   r   r   r   r@     r9   c                      s      S r   r   r   r{   r|   r   r   r   r@     s    )r   r   r   r   rf   )rz   r   r}   r   (test_ambiguity_register_error_ignore_dup  s   r~   N)Z!sympy.multipledispatch.dispatcherr   r   r   r   r   r   Zsympy.testing.pytestr   r	   r   r   r   r#   r&   r(   r8   r>   rC   rU   rV   rW   rZ   ra   rg   rm   rr   rx   ry   r~   r   r   r   r   <module>   s,     	