o
    8ήc,-                     @   sn  d dl Z d dlZd dlm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 d dlmZ d dlZdd	 Zd
d Zdd Zdd Zedddd Zedgdddd Zdd Zdd ZG dd dZdd Zdd  ZG d!d" d"eZd#d$ Z G d%d& d&eZ!G d'd( d(e!Z"G d)d* d*eZ#G d+d, d,e#Z$G d-d. d.eZ%G d/d0 d0e%Z&e'd1kre(  dS dS )2    N)GUFuncBuilder)	vectorizeguvectorize)PyUFunc_One)DUFunc)tagTestCase)configc                 C      | | S )An addition abr   r   N/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/npyufunc/test_ufuncbuilding.pyadd      r   c                 C   s   | |kS Nr   r   r   r   r   equals   s   r   c                 C   s   | | S )zA multiplicationr   r   r   r   r   mul   r   r   c                 C   sJ   |j \}}t|D ]}t|D ]}| ||f |||f  |||f< qq	dS )A generalized additionN)shaperanger   r   cxyijr   r   r   guadd   s   
"r   Tnopythonc                 C   r
   r   r   r   r   r   r   inner    r   r"   int64(int64, int64)c                 C   r
   r   r   r   r   r   r   inner_explicit$   r   r$   c                 C   
   t | |S r   )r"   r   r   r   r   outer(      
r&   c                 C   r%   r   )r$   r   r   r   r   outer_explicit+   r'   r(   c                   @      e Zd ZdS )DummyN__name__
__module____qualname__r   r   r   r   r*   /   s    r*   c                 C   sP   t   |j\}}t|D ]}t|D ]}| ||f |||f  |||f< qqd S r   r*   r   r   r   r   r   r   	guadd_obj2   s   
"r0   c                 C   sH   t   |j\}}t|D ]}t|D ]}| ||f | |||f< qqd S r   r/   r   r   r   r   guadd_scalar_obj9   s   
r1   c                   @   r)   )MyExceptionNr+   r   r   r   r   r2   A   s    r2   c                 C   s   t r   )r2   )r   r   r   r   r   r   guerrorE   s   r3   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestUfuncBuildingc                    s   t t}|d} |j |d} |j |  fdd}tjddd}|| |d d d }|| |d	}||  j	d
  
dj d S )Nint32(int32, int32)r#   c                    .   | | }  | |  |  |j| j d S r   assertPreciseEqualassertEqualdtyper   selfufuncr   r   checkS      
z1TestUfuncBuilding.test_basic_ufunc.<locals>.check   int32r:      rC      r   r   )UFuncBuilderr   assertFalse
objectmodebuild_ufuncnparangereshaper9   r,   assertIn__doc__r<   ufbcresr>   r   r   r;   r   test_basic_ufuncK   s   


z"TestUfuncBuilding.test_basic_ufuncc                    sz   t t}|d} |j |  fdd}tjdddd }|| |d d d }|| |d	}|| d S )
Nzcomplex64(complex64, complex64)c                    r6   r   r7   r   r;   r   r   r>   j   r?   z2TestUfuncBuilding.test_ufunc_struct.<locals>.checkr@   	complex64rB                 ?rC   rD   )rF   r   rG   rH   rI   rJ   rK   rL   rO   r   r;   r   test_ufunc_structd   s   

z#TestUfuncBuilding.test_ufunc_structc                 C   sZ   t tddid}|d}| |j | }tjddd}|||}| || | d S )NforceobjTtargetoptionsr5   
   rA   rB   )rF   r   
assertTruerH   rI   rJ   rK   r8   )r<   rP   rQ   r=   r   r   r   r   r   test_ufunc_forceobjw   s   

z%TestUfuncBuilding.test_ufunc_forceobjc                 C   8   t tddid}|d | }| |ddd dS )	zA
        Check nested call to an implicitly-typed ufunc.
        r!   TrW   (int64, int64)rE   rC   N)rF   r&   r   rI   r9   r<   builderr=   r   r   r   test_nested_call      
z"TestUfuncBuilding.test_nested_callc                 C   r\   )	zA
        Check nested call to an explicitly-typed ufunc.
        r!   TrW   r]   r^   rE   rC   N)rF   r(   r   rI   r9   r_   r   r   r   test_nested_call_explicit   rb   z+TestUfuncBuilding.test_nested_call_explicitN)r,   r-   r.   rR   rU   r[   ra   rc   r   r   r   r   r4   I   s    

r4   c                   @      e Zd Zdd Zdd ZdS )TestUfuncBuildingJitDisabledc                 C      t j| _dt _d S NFr	   DISABLE_JITold_disable_jitr<   r   r   r   setUp      
z"TestUfuncBuildingJitDisabled.setUpc                 C      | j t_d S r   rj   r	   ri   rk   r   r   r   tearDown      z%TestUfuncBuildingJitDisabled.tearDownNr,   r-   r.   rl   rp   r   r   r   r   re          re   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestGUfuncBuildingc                 C   s   t td}|d}| |j | }tjddddd}|||}| 	|| | | 
|jtd | 
|jd | d	|j d S )
N(x, y),(x, y)->(x, y)z(void(int32[:,:], int32[:,:], int32[:,:])rY   rA   rB   rC      r   r   )r   r   r   rG   rH   rI   rJ   rK   rL   r8   r9   r:   r,   rM   rN   r<   gufbrQ   r=   r   r   r   r   r   test_basic_gufunc   s   


z$TestGUfuncBuilding.test_basic_gufuncc                 C   s`   t td}|d}| |j | }tjdddddd }|||}| 	|| | d S )	Nru   4void(complex64[:,:], complex64[:,:], complex64[:,:])rY   rS   rB   rC   rv   rT   )
r   r   r   rG   rH   rI   rJ   rK   rL   r8   rw   r   r   r   test_gufunc_struct   s   


z%TestGUfuncBuilding.test_gufunc_structc                 C   sj   t tdtddd}|d}| |j | }tjddd	d	d
d }|||}| 
|| | d S )Nru   TrV   rW   rz   rY   rS   rB   rC   rv   rT   )r   r   dictr   rZ   rH   rI   rJ   rK   rL   r8   rw   r   r   r   test_gufunc_struct_forceobj   s   

z.TestGUfuncBuilding.test_gufunc_struct_forceobjN)r,   r-   r.   ry   r{   r~   r   r   r   r   rt      s    rt   c                   @   rd   )TestGUfuncBuildingJitDisabledc                 C   rf   rg   rh   rk   r   r   r   rl      rm   z#TestGUfuncBuildingJitDisabled.setUpc                 C   rn   r   ro   rk   r   r   r   rp      rq   z&TestGUfuncBuildingJitDisabled.tearDownNrr   r   r   r   r   r      rs   r   c                   @   s   e Zd Zg 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 )TestVectorizeDecor)r      Nreorderablec                 C   s:   t dgt}tjddd}|||}| || | d S )Nr5   rY   rA   rB   r   r   rJ   rK   r8   r<   r=   r   r   r   r   r   test_vectorize   s   
z!TestVectorizeDecor.test_vectorizec                 C   s>   t dgddt}tjddd}|||}| || | d S )Nr5   Tr|   rY   rA   rB   r   r   r   r   r   test_vectorize_objmode   s   
z)TestVectorizeDecor.test_vectorize_objmodec                 C   sD   t dgt}tjddd}|||}| |tj|jtjd d S )Nzbool_(int32, int32)rY   rA   rB   )r   r   rJ   rK   r8   onesr   bool_)r<   r=   r   rr   r   r   test_vectorize_bool_return   s   
z-TestVectorizeDecor.test_vectorize_bool_returnc                 C   s   d}| j D ]}t|g|dt}|dkrd n|}| |j| qt|gt}| |jd  | t t|gddt W d    n1 sGw   Y  | t t|gddt W d    d S 1 sfw   Y  d S )Nr5   )identityr   nonerC   )_supported_identitiesr   r   r9   r   assertIsassertRaises
ValueError)r<   sigr   r=   expectedr   r   r   test_vectorize_identity   s   
"z*TestVectorizeDecor.test_vectorize_identityc                 C   sl   t ddd}t ddd}tt}| |||||  tt}t d}|||| | |||  d S )Nr   r   rY   rC   )rJ   linspacer   r   r8   empty)r<   r   r   r=   ufunc2r   r   r   r   test_vectorize_no_args   s   
z)TestVectorizeDecor.test_vectorize_no_argsc                 C   sF   t ddd}t ddd}ttddt}| |||||  d S )Nr   r   rY   rC   T)r   r!   )rJ   r   r   r   r   r8   )r<   r   r   r=   r   r   r   test_vectorize_only_kws  s   z*TestVectorizeDecor.test_vectorize_only_kwsc                    sH    fdd}t dgddt}|| t ddt}|| || dS )zO
        Passing the output array as a keyword argument (issue #1867).
        c                    s   t jdddd}t |}| |||d} ||  |||   t | |||d W d    d S 1 s:w   Y  d S )NrY      rA   rB   )out)zzz)rJ   rK   
zeros_liker   r8   r   	TypeError)r=   r   r   gotrk   r   r   r>     s   
"z=TestVectorizeDecor.test_vectorize_output_kwarg.<locals>.checkr5   Tr    N)r   r   )r<   r>   r=   r   rk   r   test_vectorize_output_kwarg
  s   
z.TestVectorizeDecor.test_vectorize_output_kwargc                 C   D   t dgdt}tjddddd}|||}| || | d S N$(int32[:,:], int32[:,:], int32[:,:])(x,y),(x,y)->(x,y)rY   rA   rB   rC   rv   )r   r   rJ   rK   rL   r8   r   r   r   r   test_guvectorize     
z#TestVectorizeDecor.test_guvectorizec                 C   sP   t dgdt}tjddddd}t|}|||| | || | d S )Nr   z(x,y),(x,y),(x,y)rY   rA   rB   rC   rv   )r   r   rJ   rK   rL   r   r8   )r<   r=   r   r   r   r   r   test_guvectorize_no_output&  s   
z-TestVectorizeDecor.test_guvectorize_no_outputc                 C   r   r   )r   r0   rJ   rK   rL   r8   r   r   r   r   test_guvectorize_objectmode.  r   z.TestVectorizeDecor.test_guvectorize_objectmodec                 C   sD   t dgdt}tjddddd}||d}| |d | d	S )
zA
        Test passing of scalars to object mode gufuncs.
        z(int32[:,:], int32, int32[:,:])z(x,y),()->(x,y)rY   rA   rB   rC   rv   rE   N)r   r1   rJ   rK   rL   r8   r   r   r   r   "test_guvectorize_scalar_objectmode5  s   
z5TestVectorizeDecor.test_guvectorize_scalar_objectmodec                 C   sd   t dgdddt}tjddddd	}| t ||| W d    d S 1 s+w   Y  d S )
Nr   r   Tr|   rY   rA   rB   rC   rv   )r   r3   rJ   rK   rL   r   r2   )r<   r=   r   r   r   r   $test_guvectorize_error_in_objectmode?  s   "z7TestVectorizeDecor.test_guvectorize_error_in_objectmodec                 C   s   dgdf}| j D ]}t|d|it}|dkrd n|}| |j| qt| t}| |jd  | t t|ddit W d    n1 sIw   Y  | t t|ddit W d    d S 1 shw   Y  d S )Nr   r   r   r   r   rC   )	r   r   r   r9   r   r   r   r   r   )r<   argsr   r=   r   r   r   r   test_guvectorize_identityF  s   

"z,TestVectorizeDecor.test_guvectorize_identityc                 C   s   dg}|  t}t|dt W d    n1 sw   Y  | dt|j |  t}t|dt W d    n1 s?w   Y  | t|jd |  t}t|dt W d    d S 1 sew   Y  d S )Nr   z)-:zbad token in signaturez(x,y),(x,y)->(x,z,v)zundefined output symbols: v,zz(x,y),(x,y),(x,y)->)	r   r   r   r   rM   str	exception	NameErrorr9   )r<   sigsraisesr   r   r   test_guvectorize_invalid_layoutU  s   "z2TestVectorizeDecor.test_guvectorize_invalid_layoutN)r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s     

r   c                   @   rd   )TestVectorizeDecorJitDisabledc                 C   rf   rg   rh   rk   r   r   r   rl   h  rm   z#TestVectorizeDecorJitDisabled.setUpc                 C   rn   r   ro   rk   r   r   r   rp   l  rq   z&TestVectorizeDecorJitDisabled.tearDownNrr   r   r   r   r   r   f  rs   r   __main__))sysnumpyrJ   numba.np.ufunc.ufuncbuilderr   numbar   r   numba.np.ufuncr   numba.np.ufunc.dufuncr   rF   numba.tests.supportr   r   
numba.corer	   unittestr   r   r   r   r"   r$   r&   r(   r*   r0   r1   	Exceptionr2   r3   r4   re   rt   r   r   r   r,   mainr   r   r   r   <module>   sD    

M
+
 
