o
    ۾iC                     @   s   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
 d
eZG dd deZG dd deeZG dd deZg dZg dZg dZg dZG dd deZedkrwe  dS dS )z1
Test helper functions from numba.numpy_support.
    N)product)types)NumbaNotImplementedError)TestCase)ShakeRequestError)numpy_supportc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestFromDtypec              	      s  t j  fd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 ]} t|tt| qtjdkrdnd}dD ]}t t||  qd S )!zX
        Test from_dtype() and as_dtype() with the various scalar number types.
        c                    sJ   t | } ||  t d|  | |t| d S )N=)npdtypeassertIsassertEqualr   as_dtype)typechar
numba_typer   fself R/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/test_numpy_support.pycheck   s   
z.TestFromDtype.test_number_types.<locals>.check?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pyobjectr/   r0   r1   r2   r3   r4   r5   r6   r   r   r   getattrsys	byteorderassertRaisesr   )r   r   nameforeign_alignletterr   r   r   test_number_types   sD   zTestFromDtype.test_number_typesc                    s@    fdd}|dt d |dt d |dt d d	S )
zS
        Test from_dtype() and as_dtype() with the character string types.
        c                    s2   t | } t||  |t| d S N)r   r   r   r   r=   r   )
typestringr   r   r   r   r   r   N   s   
z.TestFromDtype.test_string_types.<locals>.checkS10
   a11   U12   N)r   CharSeqUnicodeCharSeq)r   r   r   rN   r   test_string_typesJ   s   zTestFromDtype.test_string_typesc                    s&    fdd}|t ||dd d S )Nc                    sL   t | } ||  |j|  t ||   t ||  d S rL   )r   r=   r   	unit_coder   )r   r   codetprN   r   r   r   Y   s
   
z1TestFromDtype.check_datetime_types.<locals>.check    )r   r   )r   rJ   nb_classr   r   rN   r   check_datetime_typesX   s   z"TestFromDtype.check_datetime_typesc                 C      |  dtj dS )zK
        Test from_dtype() and as_dtype() with the datetime types.
        MN)r^   r   
NPDatetimerN   r   r   r   test_datetime_typesc      z!TestFromDtype.test_datetime_typesc                 C   r_   )zL
        Test from_dtype() and as_dtype() with the timedelta types.
        mN)r^   r   NPTimedeltarN   r   r   r   test_timedelta_typesi   rc   z"TestFromDtype.test_timedelta_typesc                    s    fdd}t dt jfdt jfg}||tjdd d ftjdd d fddd	d
 t jdt jfdt jfgdd}||tjdd d ftjdd d fdddd
 t dt jfdg}||tjdd d ftddd d fddd	d
 d S )Nc                    sT   t | } |tj  |j|   |j|  |j|  |j	| d S rL   )
r   r=   assertIsInstancer   Recordr   r   fieldssizealigned)r   ri   rj   rk   rZ   rN   r   r   r   p   s   
z.TestFromDtype.test_struct_types.<locals>.checkar!   r      )rl   r!      F)ri   rj   rk   T)align      rd   )nS5   )rd   rr   	   )r   r   r1   r3   r   rU   )r   r   r   r   rN   r   test_struct_typeso   s,   	
zTestFromDtype.test_struct_typesc                    sp    fdd}t jt jt jt jg}ttg}t||D ]\}}|||tj	 qt||D ]\}}|||tj
 q*d S )Nc                    s8   t | }t|}|||}t|} || d S rL   )r   r   r   r=   r   r   )	base_instenum_def
type_classnp_dtnb_tyinst	recoveredrN   r   r   r      s
   



z+TestFromDtype.test_enum_type.<locals>.check)r   r@   r3   rB   r>   r   r   r   r   
EnumMemberIntEnumMember)r   r   dtsenumsdtenumr   rN   r   test_enum_type   s   zTestFromDtype.test_enum_typeN)
__name__
__module____qualname__rK   rW   r^   rb   rf   rv   r   r   r   r   r   r	      s    5r	   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ValueTypingTestBasezL
    Common tests for the typing of values.  Also used by test_special.
    c                 C   s   |}|  |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 ]}tt	| }| ||tt| qLd	S )
z;
        Test *func*() with scalar numeric values.
           ii   g      ?y              ?TF)r/   r0   r1   r2   r3   r4   r5   r6   intcuintcr7   r8   r?   r@   rA   rB   r>   N)
assertInr   r3   r5   r   r@   rB   r>   rD   r   )r   funcr   rH   valr   r   r   check_number_values   s   z'ValueTypingTestBase.check_number_valuesc                 C   sB   |}dD ]}|r|d|}n|d}||}|  ||| qd S )N)r[   Yr`   r   r%   rd   smsusnspsfsas   Nat)r   )r   r   np_typenb_typer   unittrZ   r   r   r   _base_check_datetime_values   s   z/ValueTypingTestBase._base_check_datetime_valuesc                 C      |  |tjtj dS )z:
        Test *func*() with np.datetime64 values.
        N)r   r   
datetime64r   ra   r   r   r   r   r   check_datetime_values   s   z)ValueTypingTestBase.check_datetime_valuesc                 C   r   )z;
        Test *func*() with np.timedelta64 values.
        N)r   r   timedelta64r   re   r   r   r   r   check_timedelta_values   s   
z*ValueTypingTestBase.check_timedelta_valuesN)r   r   r   __doc__r   r   r   r   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestArrayScalarsc                 C   s   |  tj dS )zH
        Test map_arrayscalar_type() with scalar number values.
        N)r   r   map_arrayscalar_typerN   r   r   r   test_number_values   s   z#TestArrayScalars.test_number_valuesc                 C   T   t j}| | tdd}| t || W d   dS 1 s#w   Y  dS )zH
        Test map_arrayscalar_type() with np.datetime64 values.
        201410YN)r   r   r   r   r   rG   r   r   r   r   r   r   r   test_datetime_values      

"z%TestArrayScalars.test_datetime_valuesc                 C   r   )zI
        Test map_arrayscalar_type() with np.timedelta64 values.
        rP   r   N)r   r   r   r   r   rG   r   r   r   r   r   test_timedelta_values   r   z&TestArrayScalars.test_timedelta_valuesN)r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdZ dd ZdS )	FakeUFunc)ninnoutr   ntypesz
fake ufuncc                 C   s~   || _ | j d d\}}t|| _t|| _t|| _|D ]}| j d d\}}t|| jks3J t|| jks<J qd S )Nr   z->)r   splitlenr   r   r   )r   r   in_outrZ   r   r   r   __init__   s   


zFakeUFunc.__init__N)r   r   r   	__slots__r   r   r   r   r   r      s    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                   @   s    e Zd ZdZdd Zdd ZdS )
TestUFuncsz
    Test ufunc helpers.
    c           	         s   t jtt}tt}tt}tt}dfdd	 d fdd	}fd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dtdfdtdfd ||tdtdfdtdfd ||tdtdfdtdfd ||tdtdfdtdfd ||tdtdfdtdfd ||tdtdfdtdfd ||tdtdfdtdfd ||tdtjfdtdfd ||tjtdfdt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tjtjg}|D ]'} |tj|fd  |tj|fd  |tj|fd  |tj|fd qr|D ]} ||fd  ||fd q |tdtjfdtdfd  |tdtjfdtdfd  |tdtjfdtdfd  |tjtdfdtdfd ||tdtdf ||tdtjf d S ) Nr   c              	      s    | || } | t|tr|f}|j|d||||jf  t|jt|j t|j	t|j
 |sN | t||j
 }|| n	|j
t|  | |j|j
 }|| |S )z
            Check that ufunc_find_matching_loop() finds one of the given
            *sigs* for *ufunc*, *input_types* and optional *output_types*.
            z?inputs=%s and outputs=%s should have selected one of %s, got %s)
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   r   r      s$   


z7TestUFuncs.test_ufunc_find_matching_loop.<locals>.checkc                    s$    | |||} |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   r   r   check_exact:  s   z=TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_exactc                    s    | |} |d  d S rL   )r   )r   r   r   r   r   r   check_no_matchA  s   
z@TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_no_matchr   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r[   r   r   r   r   r   r   r   )r   )r   ufunc_find_matching_loopr   
_add_types
_mul_types_isnan_types_sqrt_typesr   r>   r/   r0   r5   r6   r?   r@   rA   rB   re   ra   r1   r2   r3   r4   )	r   np_addnp_mulnp_isnannp_sqrtr   r   	int_typesinttyr   )r   r   r   r   test_ufunc_find_matching_loop  s   z(TestUFuncs.test_ufunc_find_matching_loopc                    sR   fdd}t 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                    s`   | j }| j}| jj}t|||}t|||}| 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_frN   r   r   	check_arr  s   

z1TestUFuncs.test_layout_checker.<locals>.check_arr   )r   rq   rm   )rm   r   rp   r   rp   )rm   rm   r   rm   rt   )r   arangereshapeT)r   r  r   r   rN   r   test_layout_checker  s(   
 "("**,*2*6zTestUFuncs.test_layout_checkerN)r   r   r   r   r   r  r   r   r   r   r     s    pr   __main__)r   rE   	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   r   <module>   s0     7 !