o
    1&iE                     @   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)Ztypechar
numba_typer   fself IC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_numpy_support.pycheck   s   
z.TestFromDtype.test_number_types.<locals>.check?r   Zf4dZf8FZc8DZc16Obi1Bu1hi2Hu2ii4IZu4qQ)
int8uint8int16uint16int32uint32int64uint64intpuintplittle><ZhHiIlLqQfdFDN)r   
from_dtyper   bool_float32float64	complex64
complex128Zpyobjectr)   r*   r+   r,   r-   r.   r/   r0   r   r   r   getattrsys	byteorderassertRaisesr   )r   r   nameZ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   r6   r   )Z
typestringr   r   r   r   r   r   N   s   
z.TestFromDtype.test_string_types.<locals>.checkZS10
   Za11   ZU12   N)r   CharSeqZUnicodeCharSeq)r   r   r   rD   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 rC   )r   r6   r   Z	unit_coder   )r   r   codetprD   r   r   r   Y   s
   
z1TestFromDtype.check_datetime_types.<locals>.check    )r   r   )r   rA   Znb_classr   r   rD   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)rN   r   
NPDatetimerD   r   r   r   test_datetime_typesc      z!TestFromDtype.test_datetime_typesc                 C   rO   )zL
        Test from_dtype() and as_dtype() with the timedelta types.
        mN)rN   r   NPTimedeltarD   r   r   r   test_timedelta_typesi   rS   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 rC   )
r   r6   ZassertIsInstancer   ZRecordr   r   fieldssizealigned)r   rW   rX   rY   rK   rD   r   r   r   p   s   
z.TestFromDtype.test_struct_types.<locals>.checkar   r      )rZ   r      F)rW   rX   rY   T)align      rT   )nZS5   )rT   r`   	   )r   r   r+   r-   r   rH   )r   r   r   r   rD   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 rC   )r   r   r   r6   r   r   )Z	base_instZenum_defZ
type_classZnp_dtZnb_tyinstZ	recoveredrD   r   r   r      s
   



z+TestFromDtype.test_enum_type.<locals>.check)r   r9   r-   r;   r7   r   r   r   r   Z
EnumMemberZIntEnumMember)r   r   dtsenumsdtenumr   rD   r   test_enum_type   s   zTestFromDtype.test_enum_typeN)
__name__
__module____qualname__rB   rI   rN   rR   rV   rc   ri   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)   r*   r+   r,   r-   r.   r/   r0   ZintcZuintcr1   r2   r8   r9   r:   r;   r7   N)
assertInr   r-   r/   r   r9   r;   r7   r<   r   )r   funcr   r@   valr   r   r   check_number_values   s   z'ValueTypingTestBase.check_number_valuesc                 C   sB   |}dD ]}|r|d|}n|d}||}|  ||| qd S )N)rL   YrP   r   r    rT   smsusnsZpsfsas   ZNat)r   )r   rp   Znp_typeZnb_typer   unittrK   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   rQ   r   rp   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   rU   r   r   r   r   check_timedelta_values   s   
z*ValueTypingTestBase.check_timedelta_valuesN)rj   rk   rl   __doc__rr   r}   r   r   r   r   r   r   rm      s    rm   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)rr   r   map_arrayscalar_typerD   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.
        Z201410YN)r   r   r   r   r   r?   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.
        rE   r   N)r   r   r   r   r   r?   r   r   r   r   r   test_timedelta_values   r   z&TestArrayScalars.test_timedelta_valuesN)rj   rk   rl   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   Zin_outrK   r   r   r   __init__   s   


zFakeUFunc.__init__N)rj   rk   rl   	__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strro   Z	ufunc_sigr   r   Znumpy_inputsinputsZnumpy_outputsZoutputslist)ufuncinput_typessigsoutput_typesloopZloop_explicitZ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 rC   )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   rt   r   )r   ru   r   r   rL   rw   r   r   r   r   r   r   )r   )r   Zufunc_find_matching_loopr   
_add_types
_mul_types_isnan_types_sqrt_typesr   r7   r)   r*   r/   r0   r8   r9   r:   r;   rU   rQ   r+   r,   r-   r.   )	r   Znp_addZnp_mulZnp_isnanZnp_sqrtr   r   	int_typesZ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 )NZC_CONTIGUOUSZF_CONTIGUOUS)	shapestridesr   itemsizer   Zis_contiguousZ
is_fortranflagsr   )arrdimsr   r   Zis_cZis_fZexpect_cZexpect_frD   r   r   	check_arr  s   

z1TestUFuncs.test_layout_checker.<locals>.check_arr   )rz   r_   r[   )r[   rz   r^   rz   r^   )r[   r[   rz   r[   ra   )r   ZarangeZreshapeT)r   r   r   r   rD   r   test_layout_checker  s(   
 "("**,*2*6zTestUFuncs.test_layout_checkerN)rj   rk   rl   r   r   r   r   r   r   r   r     s    pr   __main__)r   r=   	itertoolsr   numpyr   ZunittestZ
numba.corer   Znumba.core.errorsr   Znumba.tests.supportr   Znumba.tests.enum_usecasesr   r   Znumba.npr   r	   objectrm   r   r   r   r   r   r   r   rj   mainr   r   r   r   <module>   s0     7 !