
    J/PhA                        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                      dS dS )    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dS )TestUfuncBuildingc                 >    ddl m} t          |          }|                    d          }                     |j                   |                    d          }                     |j                   |                                 fd}t          j        dd          } ||           |d d d	         } ||           |                    d
          } ||            	                    j
        d                                dj                   d S )Nr   addint32(int32, int32)zint64(int64, int64)c                      | |           }                     | | z   |                               |j        | j                   d S NassertPreciseEqualassertEqualdtypeabselfufuncs     g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/npyufunc/test_ufuncbuilding.pycheckz1TestUfuncBuilding.test_basic_ufunc.<locals>.check   L    aA##AE1---QWag.....       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   s3   CCCCCC3ww,--)))ww,--)))!!	/ 	/ 	/ 	/ 	/ 	/
 Ib(((acccFaIIfa 	///mU]33333r    c                 z    ddl m} t          |          }|                    d          }                     |j                   |                                 fd}t          j        dd          dz   } ||           |d d d	         } ||           |                    d
          } ||           d S )Nr   r   zcomplex64(complex64, complex64)c                      | |           }                     | | z   |                               |j        | j                   d S 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CCCCC3ww899)))!!	/ 	/ 	/ 	/ 	/ 	/
 Ib,,,r1acccFaIIfar    c                 4   ddl m} t          |ddi          }|                    d          }|                     |j                   |                                }t          j        dd	          } |||          }|                     ||z   |           d S )
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?   s    CCCCCC3z4.@AAAww,--(((!!Ib(((E!QKKAq)))))r    c                     ddl m} t          |ddi          }|                    d           |                                }|                      |dd          d	           d
S )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   s     	FEEEEEu.8$-?A A A$%%%##%%r1q)))))r    c                     ddl m} t          |ddi          }|                    d           |                                }|                      |dd          d	           d
S )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   s     	ONNNNN~.8$-?A A A$%%%##%%r1q)))))r    N)r/   
__module____qualname__r5   r:   rA   rH   rK    r    r   r   r      s_        4 4 44  (	* 	* 	*	* 	* 	*	* 	* 	* 	* 	*r    r   c                       e Zd Zd Zd ZdS )TestUfuncBuildingJitDisabledc                 @    t           j        | _        dt           _        d S NFr   DISABLE_JITold_disable_jitr   s    r   setUpz"TestUfuncBuildingJitDisabled.setUpc       %1"r    c                 (    | j         t          _        d S r   rU   r   rT   rV   s    r   tearDownz%TestUfuncBuildingJitDisabled.tearDowng       !1r    Nr/   rL   rM   rW   r[   rN   r    r   rP   rP   a   2        # # #2 2 2 2 2r    rP   c                        e Zd Zd Zd Zd ZdS )TestGUfuncBuildingc                    ddl m} t          |d          }|                    d          }|                     |j                   |                                }t          j        dd          	                    dd	          } |||          }| 
                    ||z   |           |                     |j        t          j        d                     |                     |j        d
           |                     d|j                   d S )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EEEEEU$;<<xxBCC)))  ""Ib(((00A66E!QKKAq)))"(7"3"3444 	111.>>>>>r    c                 \   ddl m} t          |d          }|                    d          }|                     |j                   |                                }t          j        dd          	                    dd	          d
z   } |||          }| 
                    ||z   |           d S )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EEEEEU$;<<xxNOO)))  ""Ib,,,44Q::R?E!QKKAq)))))r    c                 |   ddl m} t          |dt          d                    }|                    d          }|                     |j                   |                                }t          j	        dd	
          
                    dd          dz   } |||          }|                     ||z   |           d S )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EEEEEU$;+/+>+>+>@ @ @xx   (((  ""Ib,,,44Q::R?E!QKKAq)))))r    N)r/   rL   rM   rh   rk   ro   rN   r    r   r`   r`   k   sA        ? ? ?"
* 
* 
** * * * *r    r`   c                       e Zd Zd Zd ZdS )TestGUfuncBuildingJitDisabledc                 @    t           j        | _        dt           _        d S rR   rS   rV   s    r   rW   z#TestGUfuncBuildingJitDisabled.setUp   rX   r    c                 (    | j         t          _        d S r   rZ   rV   s    r   r[   z&TestGUfuncBuildingJitDisabled.tearDown   r\   r    Nr]   rN   r    r   rq   rq      r^   r    rq   c                   j    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dS )TestVectorizeDecor)r      Nreorderablec                     ddl m}  t          dg          |          }t          j        dd          } |||          }|                     ||z   |           d S )Nr   r   r   r?   r"   r#   r'   r   r   r,   r-   r   r   r   r   r   r   s        r   test_vectorizez!TestVectorizeDecor.test_vectorize   sr    CCCCCC2	0122377Ib(((E!QKKAq)))))r    c                     ddl m}  t          dgd          |          }t          j        dd          } |||          }|                     ||z   |           d S )	Nr   r   r   Trm   r?   r"   r#   ry   rz   s        r   test_vectorize_objmodez)TestVectorizeDecor.test_vectorize_objmode   sw    CCCCCCA	01DAAA#FFIb(((E!QKKAq)))))r    c                     ddl m}  t          dg          |          }t          j        dd          } |||          }|                     |t          j        |j        t          j                             d S )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   s    FFFFFF2	01226::Ib(((E!AJJ2717"(#C#C#CDDDDDr    c                 H   ddl m} d}| j        D ]B} t          |g|          |          }|dk    rd n|}|                     |j        |           C t          |g          |          }|                     |j        d            |                     t                    5   t          |gd          |           d d d            n# 1 swxY w Y   |                     t                    5   t          |gd          |           d d d            d S # 1 swxY w Y   d S )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CCCCC#2 	7 	7H7Iseh777<<E'=88tthHU^X6666 	3%  %%end+++z** 	3 	3-Isef---c222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3z** 	. 	.(Isea(((---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s$   !C		CC.DDDc                 `   ddl m} t          j        ddd          }t          j        ddd          }t	          |          }|                      |||          ||z              t	          |          }t          j        d          } ||||           |                     |||z              d S )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CCCCCK!BK!B#a

AE2223HRLLq!Q1q5)))))r    c                     ddl m} t          j        ddd          }t          j        ddd          } t	          t
          d          |          }|                      |||          ||z             d S )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   s    CCCCCCK!BK!B>	;>>>sCCa

AE22222r    c                       fd}ddl m}  t          dgd          |          } ||            t          d          |          } ||            ||           dS )zO
        Passing the output array as a keyword argument (issue #1867).
        c                 Z   t          j        ddd          }t          j        |          } | |||          }                    ||                               |||z                                  t                    5   | |||           d d d            d S # 1 swxY w Y   d S )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000A-""C%1#&&&CMM#s#####CQ///""9-- % %a$$$$% % % % % % % % % % % % % % % % % %s   B  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   s    	% 	% 	% 	% 	% 	DCCCCCA	01DAAA#FFe(	4(((--eer    c                     ddl m}  t          dgd          |          }t          j        dd                              dd	          } |||          }|                     ||z   |           d S )
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EEEEE2CD02 2279 9Ib(((00A66E!QKKAq)))))r    c                    ddl m}  t          dgd          |          }t          j        dd                              dd	          }t          j        |          } ||||           |                     ||z   |           d S )
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   s    EEEEEE1CD/1 1168 8Ib(((00A66mAaCAs+++++r    c                     ddl m}  t          dgdd          |          }t          j        dd	                              d
d          } |||          }|                     ||z   |           d S )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  s    IIIIIIACD04A A AAJL LIb(((00A66E!QKKAq)))))r    c                     ddl m}  t          dgdd          |          }t          j        dd	                              d
d          } ||d          }|                     |dz   |           dS )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  s     	QPPPPP>>?-> > >>NP PIb(((00A66E!QKKAq)))))r    c                    ddl m}m}  t          dgdd          |          }t	          j        dd	                              d
d          }|                     |          5   |||           d d d            d S # 1 swxY w Y   d S )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  s   	 	 	 	 	 	 	 	ACD04A A AAHJ JIb(((00A66{++ 	 	E!QKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   $A>>BBc                     ddl m}m} dgdf}| j        D ]<} t	          |d|i|          }|dk    rd n|}|                     |j        |           = t	          | |          }|                     |j        d            |                     t                    5   t	          |ddi|           d d d            n# 1 swxY w Y   |                     t                    5   t	          |ddi|           d d d            d S # 1 swxY w Y   d S )	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JJJJJJJ78:NO2 	7 	7H9K999%@@E'=88tthHU^X6666"T"5))end+++z** 	5 	5/K///444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5z** 	0 	0*K***3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s$   B;;B?B? DD
Dc                 |   ddl m} dg}|                     t                    5 } t	          |d          |           d d d            n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 } t	          |d          |           d d d            n# 1 swxY w Y   | 	                    t          |j                  d           |                     t                    5 } t	          |d          |           d d d            d S # 1 swxY w Y   d S )	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EEEEE67z** 	,f$Ke$$U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,.F4D0E0EFFFy)) 	=V5K455e<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=V-..8	: 	: 	: z** 	<f4K344U;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s5   A

AAB==CC
D11D58D5N)r/   rL   rM   r   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   rN   r    r   ru   ru      s        777* * ** * *E E E. . . 	* 	* 	*3 3 3  ,* * *, , ,* * *	* 	* 	*  0 0 0 < < < < <r    ru   c                   *    e Zd ZdZd Zd Zd Zd ZdS )
NEP13Arrayz4https://numpy.org/neps/nep-0013-ufunc-overrides.htmlc                     || _         d S 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
    zr    c                 4    | j                                         S r   )r   tolistrV   s    r   r   zNEP13Array.tolistK  s    z  """r    c                 Z    |dk    rt           S t           |d |D             i |          S )N__call__c                 6    g | ]}t          j        |          S rN   )r,   asarray.0xs     r   
<listcomp>z.NEP13Array.__array_ufunc__.<locals>.<listcomp>R  s     !>!>!>A"*Q--!>!>!>r    )NotImplementedr   r   r   methodr   kwargss        r   __array_ufunc__zNEP13Array.__array_ufunc__N  s?    Z!!%%!>!>!>!>!>I&IIJJJr    N)r/   rL   rM   r1   r   r   r   r   rN   r    r   r   r   C  s[        >>    # # #K K K K Kr    r   c                   P    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dS )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                     || _         d S r   r   r   s     r   r   zFakeDaskArray.__init__[  r   r    c                     |dk    rt           S t          j        t          j        |                    }d |D             }t	           ||i |          S )Nr   c                 J    g | ] }t          |t                    r|j        n|!S rN   )
isinstancer   r   r   s     r   r   z1FakeDaskArray.__array_ufunc__.<locals>.<listcomp>d  s-    MMM1:a77>QMMMr    )r   pickleloadsdumpsr   r   s        r   r   zFakeDaskArray.__array_ufunc__^  s^    Z!! V\%0011MMMMMUUD3F33444r    c                      t          d          )Nz#called potentially expensive method)AssertionError)r   r   r   s      r   _dask_methodzFakeDaskArray._dask_methodg  s    BC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  s         
  5 5 5D D D I!N M$''%$GGIIIr    r   c                       e Zd Zd ZdS )TestNEP13WithoutSignaturec                    t          d          d             }t          j        g dt          j                  }t          j        g dt          j                  }t          j        g dt          j                  } ||||          }|                     |t          j                   |                     |                                g d            |t          |          ||          }|                     |t                     |                     |                                g d            ||t          |          |          }|                     |t                     |                     |                                g d            |||t          |                    }|                     |t                     |                     |                                g d           t          j        g d	t          j	                  }t          j        g d
t          j	                  }t          j        g dt          j	                  } ||||          }|                     |t          j                   |                     |                                g d            |t          |          ||          }|                     |t                     |                     |                                g d            ||t          |          |          }|                     |t                     |                     |                                g d            |||t          |                    }|                     |t                     |                     |                                g d           d S )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  sg    
D	!	!	!	1 	1 
"	!	1 HYYYbh///HYYYbh///HYYYbh///1a##fbj111///:::)JqMM1a00gz222))???;;;)Az!}}a00gz222))???;;;)Aq*Q--00gz222))???;;; H___BJ777H___BJ777H___BJ7771a##fbj111*?*?*?@@@)JqMM1a00gz222))+@+@+@AAA)Az!}}a00gz222))+@+@+@AAA)Aq*Q--00gz222))+@+@+@AAAAAr    N)r/   rL   rM   r  rN   r    r   r   r   w  s(        /B /B /B /B /Br    r   c                       e Zd ZdZd ZdS )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 ]f}|                     |          5   ||          }t          |t                     sJ t          |j	        |           d d d            n# 1 swxY w Y   gd S )
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 <   d S r  rN   )r   r   s     r   double_guvectorizez4TestDask.test_dask_array.<locals>.double_guvectorize  s    UCFFFr    )
r   r,   r-   r   r   r   subTestr   r   r   )r   r   expectr  r  r  funcr   s           r   test_dask_arrayzTestDask.test_dask_array  sk   ")ARZ888991BJ///!3	H:			 	 
		 
	 	 
	 
j\8	,	,	 	 
-	,	 $$
 	4 	4D
 d## 4 4DGG!!]33333"17F3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s   78C;;C?	C?	N)r/   rL   rM   r1   r  rN   r    r   r  r    s-         
4 4 4 4 4r    r  c                       e Zd Zd Zd ZdS )TestVectorizeDecorJitDisabledc                 @    t           j        | _        dt           _        d S rR   rS   rV   s    r   rW   z#TestVectorizeDecorJitDisabled.setUp  rX   r    c                 (    | j         t          _        d S 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 5 5 5 5 5 ( ( ( ( ( ( ( ( & & & & & & 8 8 8 8 8 8 - - - - - - - -      O* O* O* O* O* O* O* O*d2 2 2 2 2#4 2 2 2+* +* +* +* +* +* +* +*\2 2 2 2 2$6 2 2 2\< \< \< \< \< \< \< \<@K K K K K K K K$       D1B 1B 1B 1B 1B 1B 1B 1Bh4 4 4 4 4x  4 4 4B2 2 2 2 2$6 2 2 2 zHMOOOOO r    