U
    iâËdëC  ã                   @   sX  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dddddddddddddddd d!d"d#d$d%d&gZdddddddddddddddd d!d"d'd(d)d*d&gZd+d,d-d.d/d0d1gZd2d3d4d5d6d7d8d9gZG d:d;„ d;eƒZed<k�rTe ¡  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|ƒ¡ �q8tjdk�rldnd}dD ]}ˆ tˆ t || ¡¡ �qtd 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© úW/home/sam/Atlas/atlas_env/lib/python3.8/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   sB     ÿ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   s   |   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   s    z!TestFromDtype.test_datetime_typesc                 C   s   |   dtj¡ dS )zL
        Test from_dtype() and as_dtype() with the timedelta types.
        ÚmN)rN   r   ÚNPTimedeltarD   r   r   r   Útest_timedelta_typesi   s    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   rU   rV   rW   rK   rD   r   r   r   p   s    
z.TestFromDtype.test_struct_types.<locals>.checkÚar   r   é   )rX   r   é   F)rU   rV   rW   T)Úaligné   é   rR   )ÚnZS5é   )rR   r^   é	   )r   r   r+   r-   r   rH   )r   r   r   r   rD   r   Útest_struct_typeso   s2    	ÿ ýÿ ýÿ ý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	ƒ q2t||ƒD ]\}}|||tj
ƒ qTd 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   rQ   rT   ra   rg   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|ƒ¡ q˜d	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 ]4}|r|d|ƒ}n|dƒ}||ƒ}|   |||ƒ¡ qd S )N)rL   ÚYrO   r   r    rR   ÚsÚmsÚusÚnsZpsÚfsÚasé   ZNat)r   )r   rn   Znp_typeZnb_typer   ÚunitÚtrK   r   r   r   Ú_base_check_datetime_values¸   s    z/ValueTypingTestBase._base_check_datetime_valuesc                 C   s   |   |tjtj¡ dS )z:
        Test *func*() with np.datetime64 values.
        N)r{   r   Ú
datetime64r   rP   ©r   rn   r   r   r   Úcheck_datetime_valuesÇ   s    z)ValueTypingTestBase.check_datetime_valuesc                 C   s   |   |tjtj¡ dS )z;
        Test *func*() with np.timedelta64 values.
        N)r{   r   Útimedelta64r   rS   r}   r   r   r   Úcheck_timedelta_valuesÍ   s    
ÿz*ValueTypingTestBase.check_timedelta_valuesN)rh   ri   rj   Ú__doc__rp   r{   r~   r€   r   r   r   r   rk   ž   s
   rk   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)rp   r   Úmap_arrayscalar_typerD   r   r   r   Útest_number_values×   s    z#TestArrayScalars.test_number_valuesc              	   C   s>   t j}|  |¡ t dd¡}|  t¡� ||ƒ W 5 Q R X dS )zH
        Test map_arrayscalar_type() with np.datetime64 values.
        Z2014Ú10YN)r   rƒ   r~   r   r|   r?   ÚNotImplementedError©r   r   rz   r   r   r   Útest_datetime_valuesÝ   s
    
z%TestArrayScalars.test_datetime_valuesc              	   C   s>   t j}|  |¡ t dd¡}|  t¡� ||ƒ W 5 Q R X dS )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è   s
    
z&TestArrayScalars.test_timedelta_valuesN)rh   ri   rj   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sft‚t|ƒ| jks<t‚q<d S )Nr   z->)r   ÚsplitÚlenr‹   rŒ   r�   ÚAssertionError)r   r   Zin_ÚoutrK   r   r   r   Ú__init__ø   s    


zFakeUFunc.__init__N)rh   ri   rj   Ú	__slots__r’   r   r   r   r   rŠ   ô   s   rŠ   ú??->?úbb->búBB->Bzhh->hzHH->Húii->izII->Iúll->lúLL->Lúqq->qúQQ->Qzee->eúff->fúdd->dzgg->gúFF->FúDD->DzGG->GúMm->Múmm->múmM->MzOO->Oúmq->mzqm->múmd->múdm->mz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 ]N}ˆ |tj|fdƒ ˆ |tj|fdƒ ˆ |tj|fdƒ ˆ |tj|fdƒ �qä|D ]"}ˆ ||fdƒ ˆ ||fdƒ �q8ˆ |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
ƒ¡ |sœˆ | 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Ústrrm   Z	ufunc_sigr   r�   Znumpy_inputsÚinputsZnumpy_outputsÚ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Ÿ   rr   r¡   )r²   rs   r¢   r    rL   ru   r£   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;   rS   rP   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   )ÚarrZdimsr½   r¾   Zis_cZis_fZexpect_cZexpect_frD   r   r   Ú	check_arrŠ  s    

z1TestUFuncs.test_layout_checker.<locals>.check_arré   )rx   r]   rY   )rY   rx   r\   rx   r\   )rY   rY   rx   rY   r_   )r   ZarangeZreshapeÚT)r   rÁ   rÀ   r   rD   r   Útest_layout_checker‰  s(    
 "("**,*2*zTestUFuncs.test_layout_checkerN)rh   ri   rj   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	   Úobjectrk   r‚   rŠ   r¶   r·   r¸   r¹   r¨   rh   Úmainr   r   r   r   Ú<module>   sn    7            ý             ý !
