U
    9%et                     @   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   a/var/www/html/Darija-Ai-API/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 qq*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 qxqd 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