
    ihA                        d dl Z d dlZd dl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mZ d dlmZmZ d dlm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      Z G d d      Z G d de      Z G d dej$                        Z G d de      Zedk(  r ej@                          yy)    N)assert_array_equal)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     e/var/www/html/dev/engine/venv/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>.check2   r   r    r!   	complex64r#                 ?r$   r%   )	r'   r   r(   r)   r*   r+   r,   r-   r.   r2   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   r3   r4   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'   rC   r(   r   r+   r   )r   rC   builderr   s       r   test_nested_callz"TestUfuncBuilding.test_nested_callJ   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_explicitrD   Tr=   rE   rF   r&   r$   N)r'   rJ   r(   r   r+   r   )r   rJ   rG   r   s       r   test_nested_call_explicitz+TestUfuncBuilding.test_nested_call_explicitU   sN     	O~.8$-?A$%##%r1q)r    N)r/   
__module____qualname__r5   r:   rA   rH   rK    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.setUpc       %11"r    c                 .    | j                   t        _        y r   rU   r   rT   rV   s    r   tearDownz%TestUfuncBuildingJitDisabled.tearDowng       !11r    Nr/   rL   rM   rW   r[   rN   r    r   rP   rP   a       #2r    rP   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$      rc   zA generalized addition)r'   rc   r   r   r)   r*   r+   r,   r-   r.   r   r   r   r/   r0   r1   r   rc   gufbr4   r   r   r   s          r   test_basic_gufuncz$TestGUfuncBuilding.test_basic_gufuncm   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   rb   rd   4void(complex64[:,:], complex64[:,:], complex64[:,:])r?   r8   r#   r$   re   r9   )r'   rc   r   r   r)   r*   r+   r,   r-   r.   r   rf   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   rb   rd   Tr<   r=   rj   r?   r8   r#   r$   re   r9   )r'   rc   r   dictr   r@   r*   r+   r,   r-   r.   r   rf   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/   rL   rM   rh   rk   ro   rN   r    r   r`   r`   k   s    ?"
**r    r`   c                       e Zd Zd Zd Zy)TestGUfuncBuildingJitDisabledc                 D    t         j                  | _        dt         _        y rR   rS   rV   s    r   rW   z#TestGUfuncBuildingJitDisabled.setUp   rX   r    c                 .    | j                   t        _        y r   rZ   rV   s    r   r[   z&TestGUfuncBuildingJitDisabled.tearDown   r\   r    Nr]   rN   r    r   rq   rq      r^   r    rq   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   Trm   r?   r"   r#   ry   rz   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   )identityrw   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2 	7H7Iseh7<E'=8thHU^^X6	7
 !	3% %ennd+z* 	3-Isef-c2	3z* 	.(Isea(-	. 	.	3 	3	. 	.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   rv   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   )mulrv   r?   r$   T)r   rD   )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   s    		"b0A--"C1#&CMM#s###CQ/""9- %a$% % %s   6BBr   r   r   TrD   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   rb   $(int32[:,:], int32[:,:], int32[:,:])(x,y),(x,y)->(x,y)r?   r"   r#   r$   re   )r'   rc   r   r,   r-   r.   r   )r   rc   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   rb   r   z(x,y),(x,y),(x,y)r?   r"   r#   r$   re   )r'   rc   r   r,   r-   r.   r   r   )r   rc   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   Trm   r?   r"   r#   r$   re   )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)Trm   r?   r"   r#   r$   re   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   Trm   r?   r"   r#   r$   re   )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  st    	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   rc   r   r   r   rw   r   r$   )
r'   r   rc   r   r   r   r   r   r   r   )r   r   rc   argsr   r   r   s          r   test_guvectorize_identityz,TestVectorizeDecor.test_guvectorize_identity!  s    J78:NO22 	7H9K99%@E'=8thHU^^X6	7
 #T"5)ennd+z* 	5/K//4	5z* 	0*K**3/	0 	0	5 	5	0 	0s   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   rb   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'   rc   r   r   r   r0   str	exception	NameErrorr   )r   rc   sigsraisess       r   test_guvectorize_invalid_layoutz2TestVectorizeDecor.test_guvectorize_invalid_layout1  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/   rL   rM   r   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   rN   r    r   ru   ru      sO    7**E. 	*3,*,*	*0 <r    ru   c                   (    e Zd ZdZd Zd Zd Zd Zy)
NEP13Arrayz4https://numpy.org/neps/nep-0013-ufunc-overrides.htmlc                     || _         y r   arrayr   r   s     r   __init__zNEP13Array.__init__E  	    
r    c                     | j                   S r   r   rV   s    r   	__array__zNEP13Array.__array__H  s    zzr    c                 6    | j                   j                         S r   )r   tolistrV   s    r   r   zNEP13Array.tolistK  s    zz  ""r    c           
          |dk7  rt         S t         ||D cg c]  }t        j                  |       c}i |      S c c}w N__call__)NotImplementedr   r,   asarrayr   r   methodr   kwargsxs         r   __array_ufunc__zNEP13Array.__array_ufunc__N  s;    Z!!%!>A"**Q-!>I&IJJ!>s   >N)r/   rL   rM   r1   r   r   r   r   rN   r    r   r   r   C  s    >#Kr    r   c                   N    e Zd ZdZd Zd Zd ZeZeZeZ	eZ
eZeZeZeZeZeZeZy)FakeDaskArrayzThis class defines both the NEP13 protocol and the dask collection protocol
    (https://docs.dask.org/en/stable/custom-collections.html). This is a stand-in for
    dask array, dask dataframe, and for any wrapper around them (e.g. xarray or pint).
    c                     || _         y r   r   r   s     r   r   zFakeDaskArray.__init__[  r   r    c                     |dk7  rt         S t        j                  t        j                  |            }|D cg c]   }t	        |t
              r|j                  n|" }}t         ||i |      S c c}w r   )r   pickleloadsdumps
isinstancer   r   r   s         r   r   zFakeDaskArray.__array_ufunc__^  si    Z!! V\\%01HLM1:a7Q>MMUD3F344 Ns   %A0c                     t        d      )Nz#called potentially expensive method)AssertionError)r   r   r   s      r   _dask_methodzFakeDaskArray._dask_methodg  s    BCCr    N)r/   rL   rM   r1   r   r   r   r   __dask_graph____dask_keys____dask_optimize____dask_postcompute____dask_postpersist____dask_scheduler____dask_tokenize__computepersist	visualizerN   r    r   r   r   U  sU    
5D I!N M$''%$GGIr    r   c                       e Zd Zd Zy)TestNEP13WithoutSignaturec                    t        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        |t        |      ||      }| j	                  |t               | j                  |j                         g d        ||t        |      |      }| j	                  |t               | j                  |j                         g d        |||t        |            }| j	                  |t               | 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        |t        |      ||      }| j	                  |t               | j                  |j                         g d        ||t        |      |      }| j	                  |t               | j                  |j                         g d        |||t        |            }| j	                  |t               | j                  |j                         g d       y )NTr   c                     d| z  d|z  z   |z   S )Nd   r?   rN   )hundredstensr   s      r   	new_ufuncz5TestNEP13WithoutSignature.test_all.<locals>.new_ufunc|  s    x<"T')D00r    )rv   r$   r&   r#   )   re      )      	   )   i  iq  )g?g@gffffff
@)g@g      @gffffff@)g@g!@g#@)gfffff6d@g̼q@gfffff^y@)
r   r,   r   int64assertIsInstancendarrayr   r   r   float64)	r   r   r   r   r   all_npnep13_1nep13_2nep13_3s	            r   test_allz"TestNEP13WithoutSignature.test_ally  sa    
D	!	1 
"	1 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/   rL   rM   r   rN   r    r   r   r   w  s    /Br    r   c                       e Zd ZdZd Zy)TestDaskzTest that numba ufuncs are compatible with dask collections and wrappers around
    dask (e.g. xarray or pint) and that they can be serialized, sent over the network,
    deserialized on a different host and applied remotely.
    c                    t        t        j                  dt        j                              }t        j                  dt        j                        dz  }t	        dg      d        }t	               d        }t        dgd      d	        }|||fD ]L  }| j                  |      5   ||      }t        |t               sJ t        |j                  |       d d d        N y # 1 sw Y   YxY w)
Nr   r#   r$   zf8(f8)c                     | dz  S Nr$   rN   r   s    r   double_static_vectorizez9TestDask.test_dask_array.<locals>.double_static_vectorize      q5Lr    c                     | dz  S r  rN   r  s    r   double_dynamic_vectorizez:TestDask.test_dask_array.<locals>.double_dynamic_vectorize  r  r    zf8,f8[:]z()->()c                     | dz  |d d  y r  rN   )r   r   s     r   double_guvectorizez4TestDask.test_dask_array.<locals>.double_guvectorize  s    UCFr    )
r   r,   r-   r   r   r   subTestr   r   r   )r   r   expectr  r  r	  funcr   s           r   test_dask_arrayzTestDask.test_dask_array  s    "))ARZZ891BJJ/!3	H:		 
	 
	 
	 
j\8	,	 
-	 $$
 	4D
 d# 4G!!]333"177F34 4	4
4 4s   %1C!!C*	N)r/   rL   rM   r1   r  rN   r    r   r   r     s    
4r    r   c                       e Zd Zd Zd Zy)TestVectorizeDecorJitDisabledc                 D    t         j                  | _        dt         _        y rR   rS   rV   s    r   rW   z#TestVectorizeDecorJitDisabled.setUp  rX   r    c                 .    | j                   t        _        y r   rZ   rV   s    r   r[   z&TestVectorizeDecorJitDisabled.tearDown  r\   r    Nr]   rN   r    r   r  r    r^   r    r  __main__)!r   unittestnumpyr,   numpy.testingr   numba.np.ufunc.ufuncbuilderr   numbar   r   numba.np.ufuncr   numba.np.ufunc.dufuncr   r(   numba.tests.supportr	   r
   
numba.corer   r   rP   r`   rq   ru   r   r   r   r   r  r/   mainrN   r    r   <module>r     s       , 5 ( & 8 - O* O*d2#4 2+* +*\2$6 2\< \<@K K$ D1B 1Bh4x   4B2$6 2 zHMMO r    