U
    iâËdt  ã                   @   sä   d dl Z d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZ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 G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)ÚTestCaseÚcaptured_stdout)ÚnjitÚ	literally)Útypes)Útuple_setitemÚbuild_full_slice_tuple)Úto_fixed_tupleÚempty_inferred)Úmemcpy_region)Údump_refcount)Útrailing_zerosÚleading_zeros)ÚTypingErrorc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestTupleIntrinsicz!Tests for numba.unsafe.tuple
    c           
         sÒ   t dd„ ƒ}t d¡ tdƒD ]®}t dd¡‰ t‡ fdd„tˆ ƒD ƒƒ}td	d„ tˆ ƒD ƒƒ}ttt|ƒƒƒ}t |¡ t|ƒ}t|ƒ}t	 
|¡}||t	 
|¡< ||||ƒ\}}	|  ||¡ |  |	t|ƒ¡ qd S )
Nc                 S   s,   | }t ||ƒD ]\}}t|||ƒ}q| |fS ©N)Úzipr   )ÚtupÚidxsÚvalsZout_tupÚiÚv© r   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_unsafe_intrinsics.pyÚfoo   s    z2TestTupleIntrinsic.test_tuple_setitem.<locals>.fooé{   é   é   é
   c                    s   g | ]}t  d ˆ ¡‘qS )r   ©ÚrandomÚrandint©Ú.0r   ©Únr   r   Ú
<listcomp>   s     z9TestTupleIntrinsic.test_tuple_setitem.<locals>.<listcomp>c                 S   s   g | ]}t  d d¡‘qS )r   r   r   r"   r   r   r   r&      s     )r   r    ÚseedÚranger!   ÚtupleÚlistÚlenÚshuffleÚnpÚasarrayÚassertEqual)
Úselfr   Ú_r   r   r   Z
expect_tupZ
expect_outZgot_tupZgot_outr   r$   r   Útest_tuple_setitem   s     



z%TestTupleIntrinsic.test_tuple_setitemc              
   C   s‚   t dd„ ƒ}tddƒD ]f}tj t |¡d ¡}td|d ƒD ]}tj ||||ƒ¡ q>|  t¡� |||d ƒ W 5 Q R X qd S )Nc                 S   s   | t t|ƒƒ S r   )r   r   )Úar%   r   r   r   Úfull_slice_array.   s    z=TestTupleIntrinsic.test_slice_tuple.<locals>.full_slice_arrayr   é   )	r   r(   r-   r    ÚarangeÚtestingÚassert_array_equalÚassertRaisesr   )r0   r4   r%   r3   r   r   r   r   Útest_slice_tuple-   s    
z#TestTupleIntrinsic.test_slice_tupleN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   r:   r   r   r   r   r      s   r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestNdarrayIntrinsicz#Tests for numba.unsafe.ndarray
    c              	      s$  d‰ t ‡ fdd„ƒ}tj d¡ tdƒD ]t}tj d¡}||ƒ\}}}}|  |t|d d… ƒ¡ |  |t|d d… ƒ¡ |  |t|d d… ƒ¡ |  |d¡ q(|  t¡�}|tj d	¡ƒ W 5 Q R X |  	d
t
|jƒ¡ t dd„ ƒ}	|  t¡�}|	tj d¡dƒ W 5 Q R X d}
|  	|
t
|jƒ¡ d S )Nr5   c                    s6   t | dd�}t | dƒ}t | ˆ ƒ}t | dƒ}||||fS )Nr   )Úlengthé   r   ©r	   )Úarrayr3   ÚbÚcÚd©Úconstr   r   r   B   s
    


z5TestNdarrayIntrinsic.test_to_fixed_tuple.<locals>.foor   r   r   rA   r   ©r   rA   zNot supported on array.ndim=2c                 S   s
   t | |ƒS r   rB   )rC   r@   r   r   r   Útuple_with_length]   s    zCTestNdarrayIntrinsic.test_to_fixed_tuple.<locals>.tuple_with_lengthz$*length* argument must be a constant)r   r-   r    r'   r(   r/   r)   r9   r   ÚassertInÚstrÚ	exception)r0   r   r1   Zarrr3   rD   rE   rF   ZraisesrJ   Z	expectmsgr   rG   r   Útest_to_fixed_tuple?   s,    ÿ
z(TestNdarrayIntrinsic.test_to_fixed_tuplec                 C   s4   t dd„ ƒ}|ƒ }t dgd ¡}tj ||¡ d S )Nc                  S   s.   t dƒ} d}tt| ƒƒD ]}|d | |< q| S ©N)r   gš™™™™™ñ?rA   )r
   r(   r+   ©ÚSr3   r   r   r   r   Úfuncg   s
    z;TestNdarrayIntrinsic.test_issue_3586_variant1.<locals>.funcçÍÌÌÌÌÌ@r   ©r   r-   r.   r7   r8   ©r0   rR   ÚgotÚexpectr   r   r   Útest_issue_3586_variant1f   s
    
z-TestNdarrayIntrinsic.test_issue_3586_variant1c                 C   s4   t dd„ ƒ}|ƒ }t dgd ¡}tj ||¡ d S )Nc                  S   s,   t dƒ} d}t| jƒD ]}|d | |< q| S rO   )r
   r(   ÚsizerP   r   r   r   rR   t   s
    z;TestNdarrayIntrinsic.test_issue_3586_variant2.<locals>.funcrS   r   rT   rU   r   r   r   Útest_issue_3586_variant2s   s
    
z-TestNdarrayIntrinsic.test_issue_3586_variant2N)r;   r<   r=   r>   rN   rX   rZ   r   r   r   r   r?   <   s   'r?   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestBytesIntrinsicz!Tests for numba.unsafe.bytes
    c              
   C   sf   t dd„ ƒ}tjdtjd�}tjdtjd�}||d|ddƒ dddddd	d
dddg
}tj ||¡ d S )Nc                 S   s   t | jj||jj||dƒ d S )Nr   )r   ÚctypesÚdata)ÚdstZ	dst_indexÚsrcZ	src_indexÚnbytesr   r   r   r   …   s    
   ÿz2TestBytesIntrinsic.test_memcpy_region.<locals>.foor   )Zdtypeé   r   é   r   rA   r5   )r   r-   ZzerosZint8r6   r7   r8   )r0   r   rF   ÚsÚexpectedr   r   r   Útest_memcpy_region„   s    
z%TestBytesIntrinsic.test_memcpy_regionN)r;   r<   r=   r>   re   r   r   r   r   r[   �   s   r[   c                   @   s   e Zd Zdd„ ZdS )ÚTestRefCountc              	   C   sz   t dd„ ƒ}tƒ �}|ƒ  W 5 Q R X | ¡ }d}tjd d d… }tj |gd ¡}|  | |¡|¡ |  | |¡|¡ d S )Nc                  S   s&   t  d¡} | | f}t| ƒ t|ƒ d S )Nr   )r-   Zonesr   )r3   rD   r   r   r   Úuse_dump_refcount—   s    
z:TestRefCount.test_dump_refcount.<locals>.use_dump_refcountzdump refct of {}r   rA   )	r   r   Úgetvaluer   Zfloat64ÚTupleZ
from_typesrK   Úformat)r0   rg   ÚstreamÚoutputÚpatZarytyZtuptyr   r   r   Útest_dump_refcount–   s    
zTestRefCount.test_dump_refcountN)r;   r<   r=   rn   r   r   r   r   rf   •   s   rf   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestZeroCountsc                 C   s²  t dd„ ƒ}t dd„ ƒ}ddddg}tjD ]¤}|  ||dƒƒ||dƒƒ  koV|jkn  ¡ t|jƒD ].}|d| ƒ}|  ||ƒ||ƒ d	 |j¡ qh|D ]0}|  |||ƒƒd¡ |  |||d	 ƒƒd¡ qœq*tjD ]Ö}|  ||dƒƒ||dƒƒ  k�o|jkn  ¡ t|jd	 ƒD ]X}|d| ƒ}|  ||ƒ||ƒ d	 |j¡ |  || ƒd¡ |  ||ƒ|| ƒ¡ �q|D ]2}|  |||ƒƒd¡ |  |||d	 ƒƒd¡ �qxqÖd S )
Nc                 S   s   t | ƒS r   )r   ©Úxr   r   r   Ú<lambda>­   ó    z0TestZeroCounts.test_zero_count.<locals>.<lambda>c                 S   s   t | ƒS r   )r   rp   r   r   r   rr   ®   rs   rA   é*   é~   é€   r   r   )	r   r   Zunsigned_domainÚ
assertTrueZbitwidthr(   r/   ZassertGreaterZsigned_domain)r0   ZlzÚtzZevensÚTr   Úvalr%   r   r   r   Útest_zero_count¬   s*    
0 
2zTestZeroCounts.test_zero_countc              
      sœ   t ‡fdd„ƒ‰ ˆj‰tdd„ tjƒ}t|td�D ]@}ˆ t¡�}ˆ |dƒƒ W 5 Q R X ˆ 	d 
ˆ|¡t|jƒ¡ q2‡ ‡‡fdd„}|d	d
ƒ |ddƒ d S )Nc                     s   ˆ | Ž S r   r   rp   )rR   r   r   rr   Ç   rs   z0TestZeroCounts.check_error_msg.<locals>.<lambda>c                 S   s   t | tjƒ S r   )Ú
isinstancer   ÚIntegerrp   r   r   r   rr   Ë   rs   )ÚkeyrA   z;{} is only defined for integers, but value passed was '{}'.c              	      s>   ˆ  ttf¡�}ˆ | Ž  W 5 Q R X ˆ d ˆ¡t|jƒ¡ d S )Nz{}() )r9   r   Ú	TypeErrorrK   rj   rL   rM   )ÚargsÚstringÚe)ÚcfuncÚ	func_namer0   r   r   Úcheck×   s    þz-TestZeroCounts.check_error_msg.<locals>.checkrI   z-takes 2 positional arguments but 3 were givenr   z&missing 1 required positional argument)r   Ú_nameÚfilterr   Znumber_domainÚsortedrL   r9   r   rK   rj   rM   )r0   rR   Zunsupported_typesÚtypr‚   r…   r   )rƒ   rR   r„   r0   r   Úcheck_error_msgÆ   s&     ÿ ÿý
zTestZeroCounts.check_error_msgc                 C   s   |   t¡ d S r   )rŠ   r   ©r0   r   r   r   Útest_trailing_zeros_errorâ   s    z(TestZeroCounts.test_trailing_zeros_errorc                 C   s   |   t¡ d S r   )rŠ   r   r‹   r   r   r   Útest_leading_zeros_errorå   s    z'TestZeroCounts.test_leading_zeros_errorN)r;   r<   r=   r{   rŠ   rŒ   r�   r   r   r   r   ro   «   s   ro   )r    Únumpyr-   Znumba.tests.supportr   r   Znumbar   r   Z
numba.corer   Znumba.cpython.unsafe.tupler   r   Znumba.np.unsafe.ndarrayr	   r
   Znumba.core.unsafe.bytesr   Znumba.core.unsafe.refcountr   Znumba.cpython.unsafe.numbersr   r   Znumba.core.errorsr   r   r?   r[   rf   ro   r   r   r   r   Ú<module>   s   -E