
    xKg8                     ,   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 G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zedk(  r ej4                          yy)    N)GUFuncBuilder)	vectorizeguvectorize)PyUFunc_One)DUFunc)tagTestCase)configc                   *    e Zd Zd Zd Zd Zd Zd Zy)TestUfuncBuildingc                     ddl m} t        |      }|j                  d      } j                  |j                         |j                  d      } j                  |j                         |j                          fd}t        j                  dd      } ||       |d d d	   } ||       |j                  d
      } ||        j                  j                  d        j                  dj                         y )Nr   addint32(int32, int32)zint64(int64, int64)c                      | |       }j                  | | z   |       j                  |j                  | j                         y NassertPreciseEqualassertEqualdtypeabselfufuncs     k/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/npyufunc/test_ufuncbuilding.pycheckz1TestUfuncBuilding.test_basic_ufunc.<locals>.check   :    aA##AE1-QWWagg.       int32r      r#      r   zAn addition)+numba.tests.npyufunc.ufuncbuilding_usecasesr   UFuncBuilderassertFalse
objectmodebuild_ufuncnparangereshaper   __name__assertIn__doc__r   r   ufbcresr   r   r   s   `     @r   test_basic_ufuncz"TestUfuncBuilding.test_basic_ufunc   s    C3ww,-)ww,-)!	/
 IIb(accFaIIfa 	/mU]]3r   c                 D    ddl m} t        |      }|j                  d      } j                  |j                         |j                          fd}t        j                  dd      dz   } ||       |d d d	   } ||       |j                  d
      } ||       y )Nr   r   zcomplex64(complex64, complex64)c                      | |       }j                  | | z   |       j                  |j                  | j                         y r   r   r   s     r   r   z2TestUfuncBuilding.test_ufunc_struct.<locals>.check/   r   r   r    	complex64r"                 ?r#   r$   )	r&   r   r'   r(   r)   r*   r+   r,   r-   r1   s   `     @r   test_ufunc_structz#TestUfuncBuilding.test_ufunc_struct(   s    C3ww89)!	/
 IIb,r1accFaIIfar   c                    ddl m} t        |ddi      }|j                  d      }| j                  |j                         |j                         }t        j                  dd	      } |||      }| j                  ||z   |       y )
Nr   r   forceobjTtargetoptionsr   
   r!   r"   )	r&   r   r'   
assertTruer)   r*   r+   r,   r   )r   r   r2   r3   r   r   r   s          r   test_ufunc_forceobjz%TestUfuncBuilding.test_ufunc_forceobj<   sp    C3z4.@Aww,-(!IIb(!QKAq)r   c                     ddl m} t        |ddi      }|j                  d       |j	                         }| j                   |dd      d	       y
)zA
        Check nested call to an implicitly-typed ufunc.
        r   )outernopythonTr<   (int64, int64)r%   r#   N)r&   rB   r'   r   r*   r   )r   rB   builderr   s       r   test_nested_callz"TestUfuncBuilding.test_nested_callG   sN     	Fu.8$-?A$%##%r1q)r   c                     ddl m} t        |ddi      }|j                  d       |j	                         }| j                   |dd      d	       y
)zA
        Check nested call to an explicitly-typed ufunc.
        r   )outer_explicitrC   Tr<   rD   rE   r%   r#   N)r&   rI   r'   r   r*   r   )r   rI   rF   r   s       r   test_nested_call_explicitz+TestUfuncBuilding.test_nested_call_explicitR   sN     	O~.8$-?A$%##%r1q)r   N)r.   
__module____qualname__r4   r9   r@   rG   rJ    r   r   r   r      s    44(	*	*	*r   r   c                       e Zd Zd Zd Zy)TestUfuncBuildingJitDisabledc                 D    t         j                  | _        dt         _        y NFr
   DISABLE_JITold_disable_jitr   s    r   setUpz"TestUfuncBuildingJitDisabled.setUp`       %11"r   c                 .    | j                   t        _        y r   rT   r
   rS   rU   s    r   tearDownz%TestUfuncBuildingJitDisabled.tearDownd       !11r   Nr.   rK   rL   rV   rZ   rM   r   r   rO   rO   ^       #2r   rO   c                       e Zd Zd Zd Zd Zy)TestGUfuncBuildingc                    ddl m} t        |d      }|j                  d      }| j	                  |j
                         |j                         }t        j                  dd      j                  dd	      } |||      }| j                  ||z   |       | j                  |j                  t        j                  d             | j                  |j                  d
       | j                  d|j                         y )Nr   guadd(x, y),(x, y)->(x, y)z(void(int32[:,:], int32[:,:], int32[:,:])r>   r!   r"   r#      rb   zA generalized addition)r&   rb   r   r   r(   r)   r*   r+   r,   r-   r   r   r   r.   r/   r0   r   rb   gufbr3   r   r   r   s          r   test_basic_gufuncz$TestGUfuncBuilding.test_basic_gufuncj   s    EU$;<xxBC)  "IIb(00A6!QKAq)"((7"34 	1.>r   c                 0   ddl m} t        |d      }|j                  d      }| j	                  |j
                         |j                         }t        j                  dd      j                  dd	      d
z   } |||      }| j                  ||z   |       y )Nr   ra   rc   4void(complex64[:,:], complex64[:,:], complex64[:,:])r>   r7   r"   r#   rd   r8   )r&   rb   r   r   r(   r)   r*   r+   r,   r-   r   re   s          r   test_gufunc_structz%TestGUfuncBuilding.test_gufunc_struct{   s    EU$;<xxNO)  "IIb,44Q:R?!QKAq)r   c                 H   ddl m} t        |dt        d            }|j	                  d      }| j                  |j                         |j                         }t        j                  dd	
      j                  dd      dz   } |||      }| j                  ||z   |       y )Nr   ra   rc   Tr;   r<   ri   r>   r7   r"   r#   rd   r8   )r&   rb   r   dictr   r?   r)   r*   r+   r,   r-   r   re   s          r   test_gufunc_struct_forceobjz.TestGUfuncBuilding.test_gufunc_struct_forceobj   s    EU$;+/+>@xx  (  "IIb,44Q:R?!QKAq)r   N)r.   rK   rL   rg   rj   rn   rM   r   r   r_   r_   h   s    ?"
**r   r_   c                       e Zd Zd Zd Zy)TestGUfuncBuildingJitDisabledc                 D    t         j                  | _        dt         _        y rQ   rR   rU   s    r   rV   z#TestGUfuncBuildingJitDisabled.setUp   rW   r   c                 .    | j                   t        _        y r   rY   rU   s    r   rZ   z&TestGUfuncBuildingJitDisabled.tearDown   r[   r   Nr\   rM   r   r   rp   rp      r]   r   rp   c                   h    e Zd Zg dZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)TestVectorizeDecor)r      Nreorderablec                     ddl m}  t        dg      |      }t        j                  dd      } |||      }| j                  ||z   |       y )Nr   r   r   r>   r!   r"   r&   r   r   r+   r,   r   r   r   r   r   r   s        r   test_vectorizez!TestVectorizeDecor.test_vectorize   sI    C2	01237IIb(!QKAq)r   c                     ddl m}  t        dgd      |      }t        j                  dd      } |||      }| j                  ||z   |       y )	Nr   r   r   Trl   r>   r!   r"   rx   ry   s        r   test_vectorize_objmodez)TestVectorizeDecor.test_vectorize_objmode   sK    CA	01DA#FIIb(!QKAq)r   c                     ddl m}  t        dg      |      }t        j                  dd      } |||      }| j                  |t        j                  |j                  t        j                               y )Nr   )equalszbool_(int32, int32)r>   r!   r"   )	r&   r~   r   r+   r,   r   onesshapebool_)r   r~   r   r   rs        r   test_vectorize_bool_returnz-TestVectorizeDecor.test_vectorize_bool_return   sX    F2	0126:IIb(!AJ277177"((#CDr   c                    ddl m} d}| j                  D ];  } t        |g|      |      }|dk(  rd n|}| j	                  |j
                  |       =  t        |g      |      }| j                  |j
                  d        | j                  t              5   t        |gd      |       d d d        | j                  t              5   t        |gd      |       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nr   r   r   )identityrv   noner#   )	r&   r   _supported_identitiesr   r   r   assertIsassertRaises
ValueError)r   r   sigr   r   expecteds         r   test_vectorize_identityz*TestVectorizeDecor.test_vectorize_identity   s    C#22H7Iseh7<E'=8thHU^^X6 3
 !	3% %ennd+z*-Isef-c2 +z*(Isea(- +* +***s   C&C2&C/2C;c                 8   ddl m} t        j                  ddd      }t        j                  ddd      }t	        |      }| j                   |||      ||z          t	        |      }t        j                  d      } ||||       | j                  |||z          y )Nr   r   ru   r>   r#   )r&   r   r+   linspacer   r   empty)r   r   r   r   r   ufunc2cs          r   test_vectorize_no_argsz)TestVectorizeDecor.test_vectorize_no_args   s    CKK!BKK!B#a
AE23HHRLq!Q1q5)r   c                     ddl m} t        j                  ddd      }t        j                  ddd      } t	        t
        d      |      }| j                   |||      ||z         y )Nr   )mulru   r>   r#   T)r   rC   )r&   r   r+   r   r   r   r   )r   r   r   r   r   s        r   test_vectorize_only_kwsz*TestVectorizeDecor.test_vectorize_only_kws   sV    CKK!BKK!B>	;>sCa
AE2r   c                       fd}ddl m}  t        dgd      |      } ||        t        d      |      } ||        ||       y)zO
        Passing the output array as a keyword argument (issue #1867).
        c                 .   t        j                  ddd      }t        j                  |      } | |||      }j                  ||       j	                  |||z          j                  t              5   | |||       d d d        y # 1 sw Y   y xY w)Nr>      r!   r"   )out)zzz)r+   r,   
zeros_liker   r   r   	TypeError)r   r   r   gotr   s       r   r   z=TestVectorizeDecor.test_vectorize_output_kwarg.<locals>.check   sy    		"b0A--"C1#&CMM#s###CQ/""9-a$ .--s   6BBr   r   r   TrC   N)r&   r   r   )r   r   r   r   s   `   r   test_vectorize_output_kwargz.TestVectorizeDecor.test_vectorize_output_kwarg   sK    	% 	DA	01DA#Fe(	4(-eer   c                     ddl m}  t        dgd      |      }t        j                  dd      j                  dd	      } |||      }| j                  ||z   |       y )
Nr   ra   $(int32[:,:], int32[:,:], int32[:,:])(x,y),(x,y)->(x,y)r>   r!   r"   r#   rd   )r&   rb   r   r+   r,   r-   r   )r   rb   r   r   r   s        r   test_guvectorizez#TestVectorizeDecor.test_guvectorize   s`    E2CD02279IIb(00A6!QKAq)r   c                     ddl m}  t        dgd      |      }t        j                  dd      j                  dd	      }t        j                  |      } ||||       | j                  ||z   |       y )
Nr   ra   r   z(x,y),(x,y),(x,y)r>   r!   r"   r#   rd   )r&   rb   r   r+   r,   r-   r   r   )r   rb   r   r   r   s        r   test_guvectorize_no_outputz-TestVectorizeDecor.test_guvectorize_no_output   so    E1CD/1168IIb(00A6mmAaCAs+r   c                     ddl m}  t        dgdd      |      }t        j                  dd	      j                  d
d      } |||      }| j                  ||z   |       y )Nr   )	guadd_objr   r   Trl   r>   r!   r"   r#   rd   )r&   r   r   r+   r,   r-   r   )r   r   r   r   r   s        r   test_guvectorize_objectmodez.TestVectorizeDecor.test_guvectorize_objectmode  se    IACD04AAJLIIb(00A6!QKAq)r   c                     ddl m}  t        dgdd      |      }t        j                  dd	      j                  d
d      } ||d      }| j                  |dz   |       y)zA
        Test passing of scalars to object mode gufuncs.
        r   )guadd_scalar_objz(int32[:,:], int32, int32[:,:])z(x,y),()->(x,y)Trl   r>   r!   r"   r#   rd   r%   N)r&   r   r   r+   r,   r-   r   )r   r   r   r   r   s        r   "test_guvectorize_scalar_objectmodez5TestVectorizeDecor.test_guvectorize_scalar_objectmode
  sf     	Q>>?->>NPIIb(00A6!QKAq)r   c                     ddl m}m}  t        dgdd      |      }t	        j
                  dd	      j                  d
d      }| j                  |      5   |||       d d d        y # 1 sw Y   y xY w)Nr   )guerrorMyExceptionr   r   Trl   r>   r!   r"   r#   rd   )r&   r   r   r   r+   r,   r-   r   )r   r   r   r   r   s        r   $test_guvectorize_error_in_objectmodez7TestVectorizeDecor.test_guvectorize_error_in_objectmode  sk    	ACD04AAHJIIb(00A6{+!QK ,++s   
A))A2c                    ddl m}m} dgdf}| j                  D ]8  } t	        |d|i|      }|dk(  rd n|}| j                  |j                  |       :  t	        | |      }| j                  |j                  d        | j                  t              5   t	        |ddi|       d d d        | j                  t              5   t	        |ddi|       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)	Nr   )r   rb   r   r   r   rv   r   r#   )
r&   r   rb   r   r   r   r   r   r   r   )r   r   rb   argsr   r   r   s          r   test_guvectorize_identityz,TestVectorizeDecor.test_guvectorize_identity  s    J78:NO22H9K99%@E'=8thHU^^X6 3
 #T"5)ennd+z*/K//4 +z**K**3/ +* +***s   CC*C'*C3c                    ddl m} dg}| j                  t              5 } t	        |d      |       d d d        | j                  dt        j                               | j                  t              5 } t	        |d      |       d d d        | j                  t        |j                        d       | j                  t              5 } t	        |d      |       d d d        y # 1 sw Y   xY w# 1 sw Y   kxY w# 1 sw Y   y xY w)	Nr   ra   r   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&   rb   r   r   r   r/   str	exception	NameErrorr   )r   rb   sigsraisess       r   test_guvectorize_invalid_layoutz2TestVectorizeDecor.test_guvectorize_invalid_layout.  s    E67z*f$Ke$U+ +.F4D4D0EFy)V5K45e< *V--.8	: z*f4K34U; +* +* *)
 +*s#   C%4C1	C=%C.1C:=DN)r.   rK   rL   r   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   rt   rt      sO    7**E. 	*3,*,*	*0 <r   rt   c                       e Zd Zd Zy)TestNEP13WithoutSignaturec                 v  	 t        d      d        } G 	fdd      	t        j                  g dt        j                        }t        j                  g dt        j                        }t        j                  g d	t        j                        } ||||      }| j	                  |t        j
                         | j                  |j                         g d
        | 	|      ||      }| j	                  |	       | j                  |j                         g d
        || 	|      |      }| j	                  |	       | j                  |j                         g d
        ||| 	|            }| j	                  |	       | j                  |j                         g d
       t        j                  g dt        j                        }t        j                  g dt        j                        }t        j                  g dt        j                        } ||||      }| j	                  |t        j
                         | j                  |j                         g d        | 	|      ||      }| j	                  |	       | j                  |j                         g d        || 	|      |      }| j	                  |	       | j                  |j                         g d        ||| 	|            }| j	                  |	       | j                  |j                         g d       y )NTr   c                     d| z  d|z  z   |z   S )Nd   r>   rM   )hundredstensr   s      r   	new_ufuncz5TestNEP13WithoutSignature.test_all.<locals>.new_ufuncE  s    x<"T')D00r   c                   *    e Zd Zd Zd Zd Z fdZy)6TestNEP13WithoutSignature.test_all.<locals>.NEP13Arrayc                     || _         y r   array)r   r   s     r   __init__z?TestNEP13WithoutSignature.test_all.<locals>.NEP13Array.__init__K  s	    "
r   c                     | j                   S r   r   rU   s    r   	__array__z@TestNEP13WithoutSignature.test_all.<locals>.NEP13Array.__array__N  s    zz!r   c                 6    | j                   j                         S r   )r   tolistrU   s    r   r   z=TestNEP13WithoutSignature.test_all.<locals>.NEP13Array.tolistQ  s    zz((**r   c           
          |dk7  rt         S   ||D cg c]  }t        j                  |       c}i |      S c c}w )N__call__)NotImplementedr+   asarray)r   r   methodr   kwargsx
NEP13Arrays         r   __array_ufunc__zFTestNEP13WithoutSignature.test_all.<locals>.NEP13Array.__array_ufunc__T  s@    Z'))!%)FA"**Q-)F"Q&"QRR)Fs   <N)r.   rK   rL   r   r   r   r   )r   s   r   r   r   J  s    #"+Sr   r   )ru   r#   r%   r"   )   rd      )      	   )   i  iq  )g?g@gffffff
@)g@g      @gffffff@)g@g!@g#@)gfffff6d@g̼q@gfffff^y@)	r   r+   r   int64assertIsInstancendarrayr   r   float64)
r   r   r   r   r   all_npnep13_1nep13_2nep13_3r   s
            @r   test_allz"TestNEP13WithoutSignature.test_allB  sn    
D	!	1 
"	1	S 	S" HHYbhh/HHYbhh/HHYbhh/1a#fbjj1/:JqM1a0gz2)?;Az!}a0gz2)?;Aq*Q-0gz2)?; HH_BJJ7HH_BJJ7HH_BJJ71a#fbjj1*?@JqM1a0gz2)+@AAz!}a0gz2)+@AAq*Q-0gz2)+@Ar   N)r.   rK   rL   r   rM   r   r   r   r   @  s	    @Br   r   c                       e Zd Zd Zd Zy)TestVectorizeDecorJitDisabledc                 D    t         j                  | _        dt         _        y rQ   rR   rU   s    r   rV   z#TestVectorizeDecorJitDisabled.setUp  rW   r   c                 .    | j                   t        _        y r   rY   rU   s    r   rZ   z&TestVectorizeDecorJitDisabled.tearDown  r[   r   Nr\   rM   r   r   r   r     r]   r   r   __main__)numpyr+   numba.np.ufunc.ufuncbuilderr   numbar   r   numba.np.ufuncr   numba.np.ufunc.dufuncr   r'   numba.tests.supportr   r	   
numba.corer
   unittestr   rO   r_   rp   rt   r   r   r.   mainrM   r   r   <module>r      s     5 ( & 8 -  O* O*d2#4 2+* +*\2$6 2\< \<@BB BBJ2$6 2 zHMMO r   