
    J/PhC                     J   d Z ddlZddlmZ ddlZddlZddl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e          Z G d de          Zg dZg dZg dZg dZ G d de          Zedk    r ej                     dS dS )z1
Test helper functions from numba.numpy_support.
    N)product)types)NumbaNotImplementedError)TestCase)ShakeRequestError)numpy_supportc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestFromDtypec           	      t    t           j         fd} |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |d	t          j                    |d
t          j                    |dt          j                    |dt          j	                    |dt          j	                    |dt          j
                    |dt          j
                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                   dD ]F}                      t%          j        |                    t)          t          |                     Gt*          j        dk    rdnd}dD ]3}                     t0          t%          j        ||z                        4dS ) zX
        Test from_dtype() and as_dtype() with the various scalar number types.
        c                 &   t          j        |           }                     |          |                                t          j        d| z                       |                               |t	          j        |                     d S )N=)npdtypeassertIsassertEqualr	   as_dtype)typechar
numba_typer   fselfs      ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_numpy_support.pycheckz.TestFromDtype.test_number_types.<locals>.check   s    HX&&EMM!!E((J///MM!!BHS8^4455zBBBUM$::$F$FGGGGG    ?r   f4df8Fc8Dc16Obi1Bu1hi2Hu2ii4Iu4qQ)
int8uint8int16uint16int32uint32int64uint64intpuintplittle><hHiIlLqQfdFDN)r	   
from_dtyper   bool_float32float64	complex64
complex128pyobjectr2   r3   r4   r5   r6   r7   r8   r9   r   r   r   getattrsys	byteorderassertRaisesr   )r   r   nameforeign_alignletterr   s   `    @r   test_number_typeszTestFromDtype.test_number_types   s    $	H 	H 	H 	H 	H 	H 	c5;c5=!!!dEM"""c5=!!!dEM"""c5?###dEO$$$c5#$$$eU%&&&c5>"""c5:dEJc5;dEK   c5;dEK   c5<   dEL!!!c5;dEK   c5<   dEL!!!c5;c5<   9 	C 	CDMM!!BHTNN++WUD-A-ABBBB  #}88c$ 	@ 	@F6 h}v'=>>@ @ @ @	@ 	@r   c                       fd} |dt          j        d                      |dt          j        d                      |dt          j        d                     dS )	zS
        Test from_dtype() and as_dtype() with the character string types.
        c                     t          j        |           }                    t          j        |          |                               |t          j        |                     d S N)r   r   r   r	   r@   r   )
typestringr   r   r   s      r   r   z.TestFromDtype.test_string_types.<locals>.checkN   sZ    HZ((E]5e<<jIIIUM$::$F$FGGGGGr   S10
   a11   U12   N)r   CharSeqUnicodeCharSeq)r   r   s   ` r   test_string_typeszTestFromDtype.test_string_typesJ   s~    	H 	H 	H 	H 	H 	eU]2&&'''eU]2&&'''eU)"--.....r   c                 b      fd} |t          j        |           |d          d           d S )Nc                 2   t          j        |           }                    ||                               |j        |                               t          j        |          |                                t          j        |          |            d S rQ   )r	   r@   r   	unit_coder   )r   r   codetpr   s       r   r   z1TestFromDtype.check_datetime_types.<locals>.checkY   s    )%00BR,,,R\4000]3J??GGG]3B77?????r       )r   r   )r   rM   nb_classr   s   `   r   check_datetime_typesz"TestFromDtype.check_datetime_typesX   sO    	@ 	@ 	@ 	@ 	@ 	bhvb11111r   c                 F    |                      dt          j                   dS )zK
        Test from_dtype() and as_dtype() with the datetime types.
        MN)rd   r   
NPDatetimer   s    r   test_datetime_typesz!TestFromDtype.test_datetime_typesc   s#     	!!#u'788888r   c                 F    |                      dt          j                   dS )zL
        Test from_dtype() and as_dtype() with the timedelta types.
        mN)rd   r   NPTimedeltarh   s    r   test_timedelta_typesz"TestFromDtype.test_timedelta_typesi   s#     	!!#u'899999r   c                 6     fd}t          j        dt           j        fdt           j        fg          } ||t          j        dd d ft          j        dd d fddd	           t          j        dt           j        fdt           j        fgd
          } ||t          j        dd d ft          j        dd d fddd
	           t          j        dt           j        fdg          } ||t          j        dd d ft	          j        d          dd d fddd	           d S )Nc                 H   t          j        |           }                    |t          j                                       |j        |                                |j        |                               |j        |                               |j	        |           d S rQ   )
r	   r@   assertIsInstancer   Recordr   r   fieldssizealigned)r   rr   rs   rt   r`   r   s        r   r   z.TestFromDtype.test_struct_types.<locals>.checkp   s    )%00B!!"el333RXu---RY///RWd+++RZ11111r   ar$   r      )ru   r$      F)rr   rs   rt   T)align      rk   )nS5   )rk   r{   	   )r   r   r4   r6   r   rY   )r   r   r   s   `  r   test_struct_typeszTestFromDtype.test_struct_typeso   se   	2 	2 	2 	2 	2 3/C?;<<e!KD$7!KD$79 9e	% 	% 	% 	%
 3/C?;4HHHe!KD$7!KD$79 9d	$ 	$ 	$ 	$
 3/;788e!KD$7!M!,,at<> >e	% 	% 	% 	% 	% 	%r   c                 >     fd}t           j        t           j        t           j        t           j        g}t
          t          g}t          ||          D ]\  }} |||t          j	                   t          ||          D ]\  }} |||t          j
                   d S )Nc                     t          j        |           }t          j        |          } |||          }t          j        |          }                    ||           d S rQ   )r   r   r	   r@   r   r   )	base_instenum_def
type_classnp_dtnb_tyinst	recoveredr   s          r   r   z+TestFromDtype.test_enum_type.<locals>.check   s_    HY''E!,U33E:h..D%.t44IUI.....r   )r   rC   r6   rE   rA   r   r   r   r   
EnumMemberIntEnumMember)r   r   dtsenumsdtenums   `     r   test_enum_typezTestFromDtype.test_enum_type   s    	/ 	/ 	/ 	/ 	/ z28R]BH=%U++ 	. 	.HBE"dE,----U++ 	1 	1HBE"dE/0000	1 	1r   N)
__name__
__module____qualname__rN   r[   rd   ri   rm   r   r    r   r   r   r      s        3@ 3@ 3@j/ / /	2 	2 	29 9 9: : :% % %81 1 1 1 1r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )ValueTypingTestBasezL
    Common tests for the typing of values.  Also used by test_special.
    c                 8   |}|                       |d          t          j        t          j        f           |                       |d          t          j        t          j        f           |                       |d          t          j        t          j        f           |                      |d          t          j                   |                      |d          t          j                   |                      |d          t          j                   |                      |d          t          j                   dD ]Q} t          t          |                      }|                      ||          t          t          |                     Rd	S )
z;
        Test *func*() with scalar numeric values.
           ii   g      ?y              ?TF)r2   r3   r4   r5   r6   r7   r8   r9   intcuintcr:   r;   rB   rC   rD   rE   rA   N)
assertInr   r6   r8   r   rC   rE   rA   rG   r   )r   funcr   rK   vals        r   check_number_valuesz'ValueTypingTestBase.check_number_values   sN    aaddU[%+6777aa	llU[%+$>???aaii%+u{!;<<<aaffem,,,aaggu/000aaggu{+++aahh,,, 	8 	8D $'"d##%%CMM!!C&&'%"6"67777	8 	8r   c                     |}dD ]F}|r |d|          }n |d          } ||          }|                      | ||                     Gd S )N)ra   Yrf   r!   r(   rk   smsusnspsfsas   Nat)r   )r   r   np_typenb_typer   unittr`   s           r   _base_check_datetime_valuesz/ValueTypingTestBase._base_check_datetime_values   s|    
 	0 	0D  #GAt$$ GENN1BR////	0 	0r   c                 \    |                      |t          j        t          j                   dS )z:
        Test *func*() with np.datetime64 values.
        N)r   r   
datetime64r   rg   r   r   s     r   check_datetime_valuesz)ValueTypingTestBase.check_datetime_values   s'     	((r}e>NOOOOOr   c                 \    |                      |t          j        t          j                   dS )z;
        Test *func*() with np.timedelta64 values.
        N)r   r   timedelta64r   rl   r   s     r   check_timedelta_valuesz*ValueTypingTestBase.check_timedelta_values   s2     	((r~).):	< 	< 	< 	< 	<r   N)r   r   r   __doc__r   r   r   r   r   r   r   r   r      s]         8 8 8*0 0 0P P P< < < < <r   r   c                        e Zd Zd Zd Zd ZdS )TestArrayScalarsc                 D    |                      t          j                   dS )zH
        Test map_arrayscalar_type() with scalar number values.
        N)r   r	   map_arrayscalar_typerh   s    r   test_number_valuesz#TestArrayScalars.test_number_values   s!     	  !CDDDDDr   c                     t           j        }|                     |           t          j        dd          }|                     t                    5   ||           ddd           dS # 1 swxY w Y   dS )zH
        Test map_arrayscalar_type() with np.datetime64 values.
        201410YN)r	   r   r   r   r   rJ   r   r   r   r   s      r   test_datetime_valuesz%TestArrayScalars.test_datetime_values   s     .""1%%%M&%((788 	 	AaDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A**A.1A.c                     t           j        }|                     |           t          j        dd          }|                     t                    5   ||           ddd           dS # 1 swxY w Y   dS )zI
        Test map_arrayscalar_type() with np.timedelta64 values.
        rT   r   N)r	   r   r   r   r   rJ   r   r   s      r   test_timedelta_valuesz&TestArrayScalars.test_timedelta_values   s     .##A&&&N2u%%788 	 	AaDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   N)r   r   r   r   r   r   r   r   r   r   r      sD        E E E	 	 		 	 	 	 	r   r   c                       e Zd ZdZdZ d ZdS )	FakeUFunc)ninnoutr   ntypesz
fake ufuncc                    || _         | j         d                             d          \  }}t          |          | _        t          |          | _        t          |          | _        |D ]Y}| j         d                             d          \  }}t          |          | j        k    sJ t          |          | j        k    sJ Zd S )Nr   z->)r   splitlenr   r   r   )r   r   in_outr`   s        r   __init__zFakeUFunc.__init__   s    
:a=&&t,,Ss88HH	%jj 	) 	)Bz!}**400HCs88tx''''s88ty(((((	) 	)r   N)r   r   r   	__slots__r   r   r   r   r   r      s-        2IH	) 	) 	) 	) 	)r   r   )??->?bb->bBB->Bhh->hHH->Hii->iII->Ill->lLL->Lqq->qQQ->Qee->eff->fdd->dgg->gFF->FDD->DGG->GMm->Mmm->mmM->MOO->O)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   mq->mzqm->mmd->mdm->mr   )ze->?zf->?d->?zg->?zF->?zD->?zG->?)ze->ezf->fd->dzg->gzF->FzD->DzG->GzO->Oc                       e Zd ZdZd Zd ZdS )
TestUFuncsz
    Test ufunc helpers.
    c                    	
 t           j        
t          t                    }t          t                    }t          t
                    }t          t                    }d
 fd		d	 fd	}
 fd} ||t          j        t          j        fd            ||t          j	        t          j	        fd            ||t          j
        t          j
        fd            ||t          j        t          j        fd            ||t          j        t          j        fd	            ||t          j        t          j        fd
            ||t          j        t          j        fd            ||t          j        t          j        fd            ||t          j        t          j        fd            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          fdt          j        d          f            ||t          j        d          t          j        fdt          j        d          f            ||t          j        t          j        d          fdt          j        d          f            	|t          j        t          j	        fd            	|t          j
        t          j        fd            	|t          j        t          j        fd            	|t          j        t          j        fd            	|t          j        t          j        fd           t          j        t          j        t          j        t          j        g}|D ]f} 	|t          j        |fd
            	|t          j        |fd            	|t          j        |fd            	|t          j        |fd           g|D ]} 	||fd            	||fd            	|t          j        d          t          j        fdt          j        d          f            	|t          j        d          t          j        fdt          j        d          f            	|t          j        d          t          j        fdt          j        d          f            	|t          j        t          j        d          fdt          j        d          f            ||t          j        d          t          j        d          f            ||t          j        d          t          j        f           d S )Nr   c                     | ||z             }                     |           t          |t                    r|f}                    |j        |d|d|d|d|j                                       t          |j                  t          |j                                                 t          |j	                  t          |j
                             |s8 | t          |          |j
        z             }                    ||           n(                    |j
        t          |                      | |j        |j
        z             }                    ||           |S )z
            Check that ufunc_find_matching_loop() finds one of the given
            *sigs* for *ufunc*, *input_types* and optional *output_types*.
            zinputs=z and outputs=z should have selected one of z, got )
assertTrue
isinstancestrr   	ufunc_sigr   r   numpy_inputsinputsnumpy_outputsoutputslist)	ufuncinput_typessigsoutput_typeslooploop_explicitloop_rtr   r   s	          r   r   z7TestUFuncs.test_ufunc_find_matching_loop.<locals>.check   sw   
 1UK,677DOOD!!!$$$ wMM$.$$ )[[,,,dnnNO O O S!233S5E5EFFFS!344c$,6G6GHHH C !%k):):T\)I J J  5555  tL/A/ABBBat{T\9::GWd+++Kr   c                 t     | |||          }                     |j        t          |                     dS )zV
            Like check(), but also ensure no casting of inputs occurred.
            N)r   r   r   )r   r   r   r   r   r   r   s        r   check_exactz=TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_exact:  s@     5T<@@DT[${*;*;<<<<<r   c                 L     | |          }                     |d            d S rQ   )r   )r   r   r   r   r   s      r   check_no_matchz@TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_no_matchA  s.    1UK((DMM$%%%%%r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   ra   r   r   r   r   r   r   r   )r   )r	   ufunc_find_matching_loopr   
_add_types
_mul_types_isnan_types_sqrt_typesr   rA   r2   r3   r8   r9   rB   rC   rD   rE   rl   rg   r4   r5   r6   r7   )r   np_addnp_mulnp_isnannp_sqrtr   r  	int_typesinttyr   r   s   `        @@r   test_ufunc_find_matching_loopz(TestUFuncs.test_ufunc_find_matching_loop  s6   2:&&:&&\**K((	 	 	 	 	 	 	4	= 	= 	= 	= 	= 	= 	=	& 	& 	& 	& 	& 	&
 	FU[%+6@@@FUZ4g>>>FU[%+6@@@FU[%+68JKKKFU\5<8:LMMMFU]EM:GDDDFU]EM:GDDDFU_eo>HHHFU-u/?@'JJJ 	FU.s33U5Fs5K5KL5+<S+A+A*C	E 	E 	E 	EFU.t44e6Fs6K6KL5+;D+A+A*C	E 	E 	E 	EFU-c22E4Ec4J4JK5+;C+@+@*B	D 	D 	D 	DFU-c22E4Eb4I4IJ5+;C+@+@*B	D 	D 	D 	DFU-d33U5Fr5J5JK5+;D+A+A*C	E 	E 	E 	EFU.r22E4DS4I4IJ5+;C+@+@*B	D 	D 	D 	DFU.r22E4DT4J4JK5+;D+A+A*C	E 	E 	E 	EFU.s33U[A5+<S+A+A*C	E 	E 	E 	EFU]E,=c,B,BC5+<S+A+A*C	E 	E 	E 	E 	fu{EJ/999fu{EK0':::fu{EL17;;;fu6@@@fu}eo6@@@ [%,U\J	 	> 	>EE&5=%0':::E&5=%0':::E&5?E2G<<<E&5+U3W====  	. 	.EE'E8V,,,E(UHf---- 	fu(--u{;U%6s%;%;$=	? 	? 	? 	?fu(--u|<U%6s%;%;$=	? 	? 	? 	?fu(--u}=U%6s%;%;$=	? 	? 	? 	?fu}e&7&<&<=U%6s%;%;$=	? 	? 	? 	? 	v 0 5 5u7G7L7LMNNN 	v 1# 6 6DEEEEEr   c           	      6     fd}t          j        d          } ||            ||                    d                      ||                    d          j                    ||                    d          d d d                     ||                    d                      ||                    d          j                    ||                    d          d d d d df                     ||                    d          j        d d d d df                     ||                    d          d d d                     ||                    d          j        d d d d d d df                     ||                    d          d d dd d df                     ||                    d          j        d d d d dd d df                     ||                    d          d d dd d dd d df                     ||                    d          j        d d dd d dd d df                     ||                    d          d d dd d dd d df                     ||                    d          j        d d d d dd d dd d df                     ||                    d          d d d	d d dd d df                     ||                    d          j        d d d d dd d dd d d	f                    d S )
Nc                     | j         }| j        }| j        j        }t	          j        |||          }t	          j        |||          }| j        d         }| j        d         }                    ||                               ||           d S )NC_CONTIGUOUSF_CONTIGUOUS)	shapestridesr   itemsizer	   is_contiguous
is_fortranflagsr   )	arrdimsr  r  is_cis_fexpect_cexpect_fr   s	           r   	check_arrz1TestUFuncs.test_layout_checker.<locals>.check_arr  s    9DkGy)H .tWhGGD +D'8DDDy0Hy0HT8,,,T8,,,,,r      )r   rz   rv   )rv   r   ry   r   ry   )rv   rv   r   rv   r}   )r   arangereshapeT)r   r  r  s   `  r   test_layout_checkerzTestUFuncs.test_layout_checker  su   		- 		- 		- 		- 		- imm	#	#++f%%&&&	#++f%%'(((	#++f%%ccc*+++	#++i(()))	#++i((*+++	#++i((CCaC0111	#++i((*111ccc62333 		#++i((1-...	#++i((*111aaa195666	#++i((1ccc2333	#++i((*111ccc33Q3;7888	#++i((1ccc33Q37888	#++i((*33Q3!SSqS=9:::	#++l++CCaC1cccM:;;;	#++l++-aaa1ccc33Q3.>?@@@	#++l++CCaC1cccM:;;;	#++l++-aaa1ccc33Q3.>?@@@@@r   N)r   r   r   r   r  r#  r   r   r   r   r     sH         nF nF nF`(A (A (A (A (Ar   r   __main__)r   rH   	itertoolsr   numpyr   unittest
numba.corer   numba.core.errorsr   numba.tests.supportr   numba.tests.enum_usecasesr   r   numba.npr	   r   objectr   r   r   r  r  r  r  r   r   mainr   r   r   <module>r/     s   
 


                  6 6 6 6 6 6 ( ( ( ( ( ( 9 9 9 9 9 9 9 9 " " " " " "H1 H1 H1 H1 H1H H1 H1 H1V4< 4< 4< 4< 4<& 4< 4< 4<n    *H   >) ) ) ) ) ) ) )"  

     
 HGGNNN]A ]A ]A ]A ]A ]A ]A ]A@ zHMOOOOO r   