a
    
d,-                     @   sl  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rhe(  dS )2    N)GUFuncBuilder)	vectorizeguvectorize)PyUFunc_One)DUFunc)tagTestCase)configc                 C   s   | | S )An addition abr   r   p/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/tests/npyufunc/test_ufuncbuilding.pyadd   s    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   s    r   c                 C   sJ   |j \}}t|D ]2}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   s   | | S r   r   r   r   r   r   inner    s    r    int64(int64, int64)c                 C   s   | | S r   r   r   r   r   r   inner_explicit$   s    r"   c                 C   s
   t | |S r   )r    r   r   r   r   outer(   s    r#   c                 C   s
   t | |S r   )r"   r   r   r   r   outer_explicit+   s    r$   c                   @   s   e Zd ZdS )DummyN__name__
__module____qualname__r   r   r   r   r%   /       r%   c                 C   sP   t   |j\}}t|D ]2}t|D ]$}| ||f |||f  |||f< q$qd S r   r%   r   r   r   r   r   r   	guadd_obj2   s
    
r,   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
    
r-   c                   @   s   e Zd ZdS )MyExceptionNr&   r   r   r   r   r.   A   s   r.   c                 C   s   t d S r   )r.   )r   r   r   r   r   r   guerrorE   s    r/   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                    s.   | | }  | |  |  |j| j d S r   assertPreciseEqualassertEqualdtyper   selfufuncr   r   checkS   s    
z1TestUfuncBuilding.test_basic_ufunc.<locals>.check   int32r5      r=      r   r
   )UFuncBuilderr   assertFalse
objectmodebuild_ufuncnparangereshaper4   r'   assertIn__doc__r7   ufbcresr9   r   r   r6   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                    s.   | | }  | |  |  |j| j d S r   r2   r   r6   r   r   r9   j   s    
z2TestUfuncBuilding.test_ufunc_struct.<locals>.checkr:   	complex64r<                 ?r=   r>   )r@   r   rA   rB   rC   rD   rE   rF   rI   r   r6   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Ztargetoptionsr1   
   r;   r<   )r@   r   
assertTruerB   rC   rD   rE   r3   )r7   rJ   rK   r8   r   r   r   r   r   test_ufunc_forceobjw   s    

z%TestUfuncBuilding.test_ufunc_forceobjc                 C   s8   t tddid}|d | }| |ddd dS )	zA
        Check nested call to an implicitly-typed ufunc.
        r   TrQ   (int64, int64)r?   r=   N)r@   r#   r   rC   r4   r7   Zbuilderr8   r   r   r   test_nested_call   s    
z"TestUfuncBuilding.test_nested_callc                 C   s8   t tddid}|d | }| |ddd dS )	zA
        Check nested call to an explicitly-typed ufunc.
        r   TrQ   rU   rV   r?   r=   N)r@   r$   r   rC   r4   rW   r   r   r   test_nested_call_explicit   s    
z+TestUfuncBuilding.test_nested_call_explicitN)r'   r(   r)   rL   rO   rT   rX   rY   r   r   r   r   r0   I   s
   

r0   c                   @   s   e Zd Zdd Zdd ZdS )TestUfuncBuildingJitDisabledc                 C   s   t j| _dt _d S NFr	   DISABLE_JITold_disable_jitr7   r   r   r   setUp   s    z"TestUfuncBuildingJitDisabled.setUpc                 C   s   | j t_d S r   r^   r	   r]   r_   r   r   r   tearDown   s    z%TestUfuncBuildingJitDisabled.tearDownNr'   r(   r)   r`   rb   r   r   r   r   rZ      s   rZ   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[:,:])rR   r;   r<   r=      r   r   )r   r   r   rA   rB   rC   rD   rE   rF   r3   r4   r5   r'   rG   rH   r7   ZgufbrK   r8   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 )	Nre   4void(complex64[:,:], complex64[:,:], complex64[:,:])rR   rM   r<   r=   rf   rN   )
r   r   r   rA   rB   rC   rD   rE   rF   r3   rg   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 )Nre   TrP   rQ   ri   rR   rM   r<   r=   rf   rN   )r   r   dictr   rS   rB   rC   rD   rE   rF   r3   rg   r   r   r   test_gufunc_struct_forceobj   s    

z.TestGUfuncBuilding.test_gufunc_struct_forceobjN)r'   r(   r)   rh   rj   rm   r   r   r   r   rd      s   rd   c                   @   s   e Zd Zdd Zdd ZdS )TestGUfuncBuildingJitDisabledc                 C   s   t j| _dt _d S r[   r\   r_   r   r   r   r`      s    z#TestGUfuncBuildingJitDisabled.setUpc                 C   s   | j t_d S r   ra   r_   r   r   r   rb      s    z&TestGUfuncBuildingJitDisabled.tearDownNrc   r   r   r   r   rn      s   rn   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 )Nr1   rR   r;   r<   r   r   rD   rE   r3   r7   r8   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 )Nr1   Trk   rR   r;   r<   rr   rs   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)rR   r;   r<   )r   r   rD   rE   r3   Zonesr   Zbool_)r7   r8   r   rr   r   r   test_vectorize_bool_return   s    
z-TestVectorizeDecor.test_vectorize_bool_returnc                 C   s   d}| j D ]4}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 s0    Y  | t" t|gddt W d    n1 s0    Y  d S )Nr1   )identityrq   noner=   )_supported_identitiesr   r   r4   rx   assertIsassertRaises
ValueError)r7   sigrx   r8   expectedr   r   r   test_vectorize_identity   s    
0z*TestVectorizeDecor.test_vectorize_identityc                 C   sl   t ddd}t ddd}tt}| |||||  tt}t d}|||| | |||  d S )Nr   rp   rR   r=   )rD   linspacer   r   r3   empty)r7   r   r   r8   Z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   rp   rR   r=   T)rx   r   )rD   r   r   r   r   r3   )r7   r   r   r8   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    n1 sr0    Y  d S )NrR      r;   r<   )out)Zzzz)rD   rE   
zeros_liker{   r3   r|   	TypeError)r8   r   r   gotr_   r   r   r9     s    
z=TestVectorizeDecor.test_vectorize_output_kwarg.<locals>.checkr1   Tr   N)r   r   )r7   r9   r8   r   r_   r   test_vectorize_output_kwarg
  s    
z.TestVectorizeDecor.test_vectorize_output_kwargc                 C   sD   t dgdt}tjddddd}|||}| || | d S N$(int32[:,:], int32[:,:], int32[:,:])(x,y),(x,y)->(x,y)rR   r;   r<   r=   rf   )r   r   rD   rE   rF   r3   rs   r   r   r   test_guvectorize  s    
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)rR   r;   r<   r=   rf   )r   r   rD   rE   rF   r   r3   )r7   r8   r   r   r   r   r   test_guvectorize_no_output&  s    
z-TestVectorizeDecor.test_guvectorize_no_outputc                 C   sD   t dgdt}tjddddd}|||}| || | d S r   )r   r,   rD   rE   rF   r3   rs   r   r   r   test_guvectorize_objectmode.  s    
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)rR   r;   r<   r=   rf   r?   N)r   r-   rD   rE   rF   r3   rs   r   r   r   "test_guvectorize_scalar_objectmode5  s    
z5TestVectorizeDecor.test_guvectorize_scalar_objectmodec                 C   sb   t dgdddt}tjddddd	}| t ||| W d    n1 sT0    Y  d S )
Nr   r   Trk   rR   r;   r<   r=   rf   )r   r/   rD   rE   rF   r|   r.   )r7   r8   r   r   r   r   $test_guvectorize_error_in_objectmode?  s    z7TestVectorizeDecor.test_guvectorize_error_in_objectmodec                 C   s   dgdf}| j D ]4}t|d|it}|dkr2d n|}| |j| qt| t}| |jd  | t" t|ddit W d    n1 s0    Y  | t" t|ddit W d    n1 s0    Y  d S )Nr   r   rx   rq   ry   r=   )	rz   r   r   r4   rx   r{   r|   r}   r   )r7   argsrx   r8   r   r   r   r   test_guvectorize_identityF  s    

0z,TestVectorizeDecor.test_guvectorize_identityc                 C   s   dg}|  t}t|dt W d    n1 s40    Y  | dt|j |  t}t|dt W d    n1 s~0    Y  | t|jd |  t}t|dt W d    n1 s0    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   rG   str	exception	NameErrorr4   )r7   ZsigsZraisesr   r   r   test_guvectorize_invalid_layoutU  s    ,,z2TestVectorizeDecor.test_guvectorize_invalid_layoutN)r'   r(   r)   rz   rt   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro      s   

ro   c                   @   s   e Zd Zdd Zdd ZdS )TestVectorizeDecorJitDisabledc                 C   s   t j| _dt _d S r[   r\   r_   r   r   r   r`   h  s    z#TestVectorizeDecorJitDisabled.setUpc                 C   s   | j t_d S r   ra   r_   r   r   r   rb   l  s    z&TestVectorizeDecorJitDisabled.tearDownNrc   r   r   r   r   r   f  s   r   __main__))sysnumpyrD   Znumba.np.ufunc.ufuncbuilderr   Znumbar   r   Znumba.np.ufuncr   Znumba.np.ufunc.dufuncr   r@   Znumba.tests.supportr   r   Z
numba.corer	   Zunittestr   r   r   r   r    r"   r#   r$   r%   r,   r-   	Exceptionr.   r/   r0   rZ   rd   rn   ro   r   r'   mainr   r   r   r   <module>   s@   

M
+
 

