
    ܙd,-                        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 Zd	 Zd
 Zd Z ed          d             Z edgd          d             Zd Zd Z G d d          Zd Zd Z G d de          Zd 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j(                     dS dS )'    N)GUFuncBuilder)	vectorizeguvectorize)PyUFunc_One)DUFunc)tagTestCase)configc                     | |z   S )An addition abs     Glib/python3.11/site-packages/numba/tests/npyufunc/test_ufuncbuilding.pyaddr          q5L    c                     | |k    S Nr   r   s     r   equalsr      s    6Mr   c                     | |z  S )zA multiplicationr   r   s     r   mulr      r   r   c                     |j         \  }}t          |          D ].}t          |          D ]}| ||f         |||f         z   |||f<   /dS )A generalized additionN)shaperanger   r   cxyijs          r   guaddr$      sj    7DAq1XX ( (q 	( 	(A1g!Q$'AadGG	(( (r   Tnopythonc                     | |z   S r   r   r   s     r   innerr(       r   r   int64(int64, int64)c                     | |z   S r   r   r   s     r   inner_explicitr+   $   r   r   c                 "    t          | |          S r   )r(   r   s     r   outerr-   (   s    A;;r   c                 "    t          | |          S r   )r+   r   s     r   outer_explicitr/   +   s    !Qr   c                       e Zd ZdS )DummyN__name__
__module____qualname__r   r   r   r1   r1   /   s          r   r1   c                     t                       |j        \  }}t          |          D ].}t          |          D ]}| ||f         |||f         z   |||f<   /d S r   r1   r   r   r   s          r   	guadd_objr8   2   ss    	GGG7DAq1XX ( (q 	( 	(A1g!Q$'AadGG	(( (r   c                     t                       |j        \  }}t          |          D ]&}t          |          D ]}| ||f         |z   |||f<   'd S r   r7   r   s          r   guadd_scalar_objr:   9   sj    	GGG7DAq1XX " "q 	" 	"A1gkAadGG	"" "r   c                       e Zd ZdS )MyExceptionNr2   r   r   r   r<   r<   A   s        Dr   r<   c                     t           r   )r<   )r   r   r   s      r   guerrorr>   E   s    
r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestUfuncBuildingc                 <    t          t                    }|                    d          }                     |j                   |                    d          }                     |j                   |                                 fd}t          j        dd          } ||           |d d d         } ||           |                    d          } ||                                j	        d	            
                    d
j                   d S )Nint32(int32, int32)r)   c                      | |           }                     | | z   |                               |j        | j                   d S r   assertPreciseEqualassertEqualdtyper   r   selfufuncs     r   checkz1TestUfuncBuilding.test_basic_ufunc.<locals>.checkS   L    aA##AE1---QWag.....r      int32rG      rP      r   r   )UFuncBuilderr   assertFalse
objectmodebuild_ufuncnparangereshaperF   r3   assertIn__doc__rI   ufbcresrK   r   rJ   s   `    @r   test_basic_ufuncz"TestUfuncBuilding.test_basic_ufuncK   s!   3ww,--)))ww,--)))!!	/ 	/ 	/ 	/ 	/ 	/
 Ib(((acccFaIIfa 	///mU]33333r   c                 x    t          t                    }|                    d          }                     |j                   |                                 fd}t          j        dd          dz   } ||           |d d d         } ||           |                    d          } ||           d S )	Nzcomplex64(complex64, complex64)c                      | |           }                     | | z   |                               |j        | j                   d S r   rD   rH   s     r   rK   z2TestUfuncBuilding.test_ufunc_struct.<locals>.checkj   rL   r   rM   	complex64rO                 ?rP   rQ   )rS   r   rT   rU   rV   rW   rX   rY   r\   s   `    @r   test_ufunc_structz#TestUfuncBuilding.test_ufunc_structd   s    3ww899)))!!	/ 	/ 	/ 	/ 	/ 	/
 Ib,,,r1acccFaIIfar   c                 2   t          t          ddi          }|                    d          }|                     |j                   |                                }t          j        dd          } |||          }|                     ||z   |           d S )NforceobjTtargetoptionsrB   
   rN   rO   )rS   r   
assertTruerU   rV   rW   rX   rE   )rI   r]   r^   rJ   r   r   s         r   test_ufunc_forceobjz%TestUfuncBuilding.test_ufunc_forceobjw   s    3z4.@AAAww,--(((!!Ib(((E!QKKAq)))))r   c                     t          t          ddi          }|                    d           |                                }|                      |dd          d           dS )	zA
        Check nested call to an implicitly-typed ufunc.
        r&   Trg   (int64, int64)rR   rP   N)rS   r-   r   rV   rF   rI   builderrJ   s      r   test_nested_callz"TestUfuncBuilding.test_nested_call   so     u.8$-?A A A$%%%##%%r1q)))))r   c                     t          t          ddi          }|                    d           |                                }|                      |dd          d           dS )	zA
        Check nested call to an explicitly-typed ufunc.
        r&   Trg   rm   rn   rR   rP   N)rS   r/   r   rV   rF   ro   s      r   test_nested_call_explicitz+TestUfuncBuilding.test_nested_call_explicit   so     ~.8$-?A A A$%%%##%%r1q)))))r   N)r3   r4   r5   r_   rd   rk   rq   rs   r   r   r   r@   r@   I   s_        4 4 42  &* * ** * ** * * * *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rI   s    r   setUpz"TestUfuncBuildingJitDisabled.setUp       %1"r   c                 (    | j         t          _        d S r   rz   r
   ry   r{   s    r   tearDownz%TestUfuncBuildingJitDisabled.tearDown       !1r   Nr3   r4   r5   r|   r   r   r   r   ru   ru      2        # # #2 2 2 2 2r   ru   c                        e Zd Zd Zd Zd ZdS )TestGUfuncBuildingc                    t          t          d          }|                    d          }|                     |j                   |                                }t          j        dd                              dd          } |||          }| 	                    ||z   |           | 
                    |j        t          j        d                     | 
                    |j        d           |                     d	|j                   d S )
N(x, y),(x, y)->(x, y)z(void(int32[:,:], int32[:,:], int32[:,:])ri   rN   rO   rP      r$   r   )r   r$   r   rT   rU   rV   rW   rX   rY   rE   rF   rG   r3   rZ   r[   rI   gufbr^   rJ   r   r   s         r   test_basic_gufuncz$TestGUfuncBuilding.test_basic_gufunc   s    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                 Z   t          t          d          }|                    d          }|                     |j                   |                                }t          j        dd                              dd          dz   } |||          }| 	                    ||z   |           d S )	Nr   4void(complex64[:,:], complex64[:,:], complex64[:,:])ri   rb   rO   rP   r   rc   )
r   r$   r   rT   rU   rV   rW   rX   rY   rE   r   s         r   test_gufunc_structz%TestGUfuncBuilding.test_gufunc_struct   s    U$;<<xxNOO)))  ""Ib,,,44Q::R?E!QKKAq)))))r   c                 z   t          t          dt          d                    }|                    d          }|                     |j                   |                                }t          j        dd          	                    d	d
          dz   } |||          }| 
                    ||z   |           d S )Nr   Trf   rg   r   ri   rb   rO   rP   r   rc   )r   r$   dictr   rj   rU   rV   rW   rX   rY   rE   r   s         r   test_gufunc_struct_forceobjz.TestGUfuncBuilding.test_gufunc_struct_forceobj   s    U$;+/+>+>+>@ @ @xx   (((  ""Ib,,,44Q::R?E!QKKAq)))))r   N)r3   r4   r5   r   r   r   r   r   r   r   r      sA        ? ? ? 	* 	* 	** * * * *r   r   c                       e Zd Zd Zd ZdS )TestGUfuncBuildingJitDisabledc                 @    t           j        | _        dt           _        d S rw   rx   r{   s    r   r|   z#TestGUfuncBuildingJitDisabled.setUp   r}   r   c                 (    | j         t          _        d S r   r   r{   s    r   r   z&TestGUfuncBuildingJitDisabled.tearDown   r   r   Nr   r   r   r   r   r      r   r   r   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                      t          dg          t                    }t          j        dd          } |||          }|                     ||z   |           d S )NrB   ri   rN   rO   r   r   rW   rX   rE   rI   rJ   r   r   s       r   test_vectorizez!TestVectorizeDecor.test_vectorize   s`    2	0122377Ib(((E!QKKAq)))))r   c                      t          dgd          t                    }t          j        dd          } |||          }|                     ||z   |           d S )NrB   Tr   ri   rN   rO   r   r   s       r   test_vectorize_objmodez)TestVectorizeDecor.test_vectorize_objmode   se    A	01DAAA#FFIb(((E!QKKAq)))))r   c                      t          dg          t                    }t          j        dd          } |||          }|                     |t          j        |j        t          j                             d S )Nzbool_(int32, int32)ri   rN   rO   )r   r   rW   rX   rE   onesr   bool_)rI   rJ   r   rs       r   test_vectorize_bool_returnz-TestVectorizeDecor.test_vectorize_bool_return   so    2	01226::Ib(((E!AJJ2717"(#C#C#CDDDDDr   c                 d   d}| j         D ]G} t          |g|          t                    }|dk    rd n|}|                     |j        |           H t          |g          t                    }|                     |j        d            |                     t                    5   t          |gd          t                     d d d            n# 1 swxY w Y   |                     t                    5   t          |gd          t                     d d d            d S # 1 swxY w Y   d S )NrB   )identityr   nonerP   )_supported_identitiesr   r   rF   r   assertIsassertRaises
ValueError)rI   sigr   rJ   expecteds        r   test_vectorize_identityz*TestVectorizeDecor.test_vectorize_identity   s   #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7!D%%D),D)c                 h   t          j        ddd          }t          j        ddd          }t          t                    }|                      |||          ||z              t          t                    }t          j        d          } ||||           |                     |||z              d S )Nr   r   ri   rP   )rW   linspacer   r   rE   empty)rI   r   r   rJ   ufunc2r   s         r   test_vectorize_no_argsz)TestVectorizeDecor.test_vectorize_no_args   s    K!BK!B#a

AE2223HRLLq!Q1q5)))))r   c                     t          j        ddd          }t          j        ddd          } t          t          d          t                    }|                      |||          ||z             d S )Nr   r   ri   rP   T)r   r&   )rW   r   r   r   r   rE   )rI   r   r   rJ   s       r   test_vectorize_only_kwsz*TestVectorizeDecor.test_vectorize_only_kws  sn    K!BK!B>	;>>>sCCa

AE22222r   c                       fd} t          dgd          t                    } ||            t          d          t                    } ||            ||           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 )Nri      rN   rO   )out)zzz)rW   rX   
zeros_liker   rE   r   	TypeError)rJ   r   r   gotrI   s       r   rK   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$rB   Tr%   N)r   r   )rI   rK   rJ   s   `  r   test_vectorize_output_kwargz.TestVectorizeDecor.test_vectorize_output_kwarg
  s    	% 	% 	% 	% 	% B	01DAAA#FFe(	4(((--eer   c                      t          dgd          t                    }t          j        dd                              dd          } |||          }|                     ||z   |           d S N$(int32[:,:], int32[:,:], int32[:,:])(x,y),(x,y)->(x,y)ri   rN   rO   rP   r   )r   r$   rW   rX   rY   rE   r   s       r   test_guvectorizez#TestVectorizeDecor.test_guvectorize  s~    2CD02 2279 9Ib(((00A66E!QKKAq)))))r   c                     t          dgd          t                    }t          j        dd                              dd          }t          j        |          } ||||           |                     ||z   |           d S )Nr   z(x,y),(x,y),(x,y)ri   rN   rO   rP   r   )r   r$   rW   rX   rY   r   rE   )rI   rJ   r   r   s       r   test_guvectorize_no_outputz-TestVectorizeDecor.test_guvectorize_no_output&  s    1CD/1 1168 8Ib(((00A66mAaCAs+++++r   c                      t          dgd          t                    }t          j        dd                              dd          } |||          }|                     ||z   |           d S r   )r   r8   rW   rX   rY   rE   r   s       r   test_guvectorize_objectmodez.TestVectorizeDecor.test_guvectorize_objectmode.  s~    2CD02 22;= =Ib(((00A66E!QKKAq)))))r   c                      t          dgd          t                    }t          j        dd                              dd          } ||d          }|                     |dz   |           d	S )
zA
        Test passing of scalars to object mode gufuncs.
        z(int32[:,:], int32, int32[:,:])z(x,y),()->(x,y)ri   rN   rO   rP   r   rR   N)r   r:   rW   rX   rY   rE   r   s       r   "test_guvectorize_scalar_objectmodez5TestVectorizeDecor.test_guvectorize_scalar_objectmode5  s    />?-/ //?A AIb(((00A66E!QKKAq)))))r   c                     t          dgdd          t                    }t          j        dd                              dd	          }|                     t                    5   |||           d d d            d S # 1 swxY w Y   d S )
Nr   r   Tr   ri   rN   rO   rP   r   )r   r>   rW   rX   rY   r   r<   )rI   rJ   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   &B  BBc                 8   dgdf}| j         D ]A} t          |d|it                    }|dk    rd n|}|                     |j        |           B t          | t                    }|                     |j        d            |                     t                    5   t          |ddit                     d d d            n# 1 swxY w Y   |                     t                    5   t          |ddit                     d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   rP   )	r   r   r$   rF   r   r   r   r   r   )rI   argsr   rJ   r   s        r   test_guvectorize_identityz,TestVectorizeDecor.test_guvectorize_identityF  s   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$   CC	C'DDDc                    dg}|                      t                    5 } t          |d          t                     d d d            n# 1 swxY w Y   |                     dt          |j                             |                      t                    5 } t          |d          t                     d d d            n# 1 swxY w Y   |                     t          |j                  d           |                      t                    5 } t          |d          t                     d d d            d S # 1 swxY w 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$   rZ   str	exception	NameErrorrF   )rI   sigsraisess      r   test_guvectorize_invalid_layoutz2TestVectorizeDecor.test_guvectorize_invalid_layoutU  s   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CCCD::D>D>N)r3   r4   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s        777* * ** * *E E E. . .* * *3 3 3  ** * *, , ,* * ** * *  0 0 0< < < < <r   r   c                       e Zd Zd Zd ZdS )TestVectorizeDecorJitDisabledc                 @    t           j        | _        dt           _        d S rw   rx   r{   s    r   r|   z#TestVectorizeDecorJitDisabled.setUph  r}   r   c                 (    | j         t          _        d S r   r   r{   s    r   r   z&TestVectorizeDecorJitDisabled.tearDownl  r   r   Nr   r   r   r   r   r   f  r   r   r   __main__))sysnumpyrW   numba.np.ufunc.ufuncbuilderr   numbar   r   numba.np.ufuncr   numba.np.ufunc.dufuncr   rS   numba.tests.supportr   r	   
numba.corer
   unittestr   r   r   r$   r(   r+   r-   r/   r1   r8   r:   	Exceptionr<   r>   r@   ru   r   r   r   r   r3   mainr   r   r   <module>r      s   



     5 5 5 5 5 5 ( ( ( ( ( ( ( ( & & & & & & 8 8 8 8 8 8 - - - - - - - -             ( ( ( D   !"T222  32               ( ( (" " "	 	 	 	 	) 	 	 	  J* J* J* J* J* J* J* J*Z2 2 2 2 2#4 2 2 2(* (* (* (* (* (* (* (*V2 2 2 2 2$6 2 2 2M< M< M< M< M< M< M< M<b2 2 2 2 2$6 2 2 2 zHMOOOOO r   