U
    iâËd9  ã                   @   sÄ   d dl Zd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZmZ e	ƒ Zde_dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deeƒZG dd„ deeƒZdS )é    N)ÚjitÚtyped)ÚFlags)ÚTestCaseÚCompilationCacheÚMemoryLeakMixinTc                 C   s
   t  | ¡S ©N)ÚhqÚheapify)Úx© r   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_heapq.pyr
      s    r
   c                 C   s
   t  | ¡S r   )r	   Úheappop)Úheapr   r   r   r      s    r   c                 C   s   t  | |¡S r   )r	   Úheappush©r   Úitemr   r   r   r      s    r   c                 C   s   t  | |¡S r   )r	   Úheappushpopr   r   r   r   r      s    r   c                 C   s   t  | |¡S r   )r	   Úheapreplacer   r   r   r   r      s    r   c                 C   s   t  | |¡S r   )r	   Ú	nsmallest©ÚnÚiterabler   r   r   r   "   s    r   c                 C   s   t  | |¡S r   )r	   Únlargestr   r   r   r   r   &   s    r   c                       sä   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Z‡  ZS )5Ú
_TestHeapqc                    s(   t t| ƒ ¡  tƒ | _tj d¡| _d S )Né*   )	Úsuperr   ÚsetUpr   ZccacheÚnpÚrandomZRandomStateÚrnd)Úself©Ú	__class__r   r   r   ,   s    z_TestHeapq.setUpc              
   C   s.  t }tdd�|ƒ}ddddddd	d
ddg
}|  |¡}||ƒ ||ƒ |  |t|ƒ¡ dddtjtj tjg}t 	|d
¡D ]6}t|ƒ}|  |¡}||ƒ ||ƒ |  |t|ƒ¡ qxt
t|ƒƒD ]8}|| g}|  |¡}||ƒ ||ƒ |  |t|ƒ¡ q¼dddg}|  |¡}||ƒ ||ƒ |  |t|ƒ¡ d S )NT©Znopythoné   é   é   é   é	   é   é   é   é   r   ç‰A`åÐ"	@g      $Àg      @©r&   é!   )r%   é   )r*   é   )r
   r   ÚlistimplÚassertPreciseEqualÚlistr   ÚnanÚinfÚ	itertoolsÚcombinations_with_replacementÚrangeÚlen)r!   ÚpyfuncÚcfuncÚaÚbZelement_poolr   Úir   r   r   Útest_heapify_basic_sanity1   s2    





z$_TestHeapq.test_heapify_basic_sanityc                 C   s8   t |ƒD ]*\}}|r|d d? }|  || |k¡ qd S )Nr%   )Ú	enumerateÚ
assertTrue)r!   r   Úposr   Ú	parentposr   r   r   Úcheck_invariantX   s    z_TestHeapq.check_invariantc                 C   sÜ   t }tdd�|ƒ}t}tdd�|ƒ}|  dg¡}|  dg¡}|  |¡ tdƒD ]4}| j d¡ d¡}| 	|¡ |||ƒ |  |¡ qNg }	|rª||ƒ}|  |¡ |	 	|¡ qˆ|d d … }
|
 
¡  |  t|
ƒ|	¡ |  |	¡ d S )NTr$   ç      ð¿é   r%   r   )r   r   r   r3   rF   r:   r    Zrandnr   ÚappendÚsortr4   r5   )r!   Zpyfunc_heappushÚcfunc_heappushZpyfunc_heappopÚcfunc_heappopr   Údatar@   r   ÚresultsZdata_sortedr   r   r   Útest_push_pop^   s*    



z_TestHeapq.test_push_popc                 C   sT   t }tdd�|ƒ}ttddƒƒdg D ](}|  | j |¡¡}||ƒ |  |¡ q&d S )NTr$   r%   é   i N  )r
   r   r5   r:   r3   r    Zrandom_samplerF   )r!   r<   r=   Úsizer   r   r   r   Útest_heapifyy   s    z_TestHeapq.test_heapifyc              	   C   sŒ   t }tdd�|ƒ}|  ¡  |  ¡ �}|dƒ W 5 Q R X d}|  |t|jƒ¡ |  ¡ �}||  ddg¡ƒ W 5 Q R X d}|  |t|jƒ¡ d S )NTr$   ©r%   r'   r+   úheap argument must be a listy      ð?      ð?y       @      Àz>'<' not supported between instances of 'complex' and 'complex')r
   r   Údisable_leak_checkÚassertTypingErrorÚassertInÚstrÚ	exceptionr3   ©r!   r<   r=   ÚeÚmsgr   r   r   Útest_heapify_exceptions„   s    

z"_TestHeapq.test_heapify_exceptionsc           	      C   sz   t }tdd�|ƒ}dd„ }|ƒ D ]T}t|ƒ |  |¡}tt|ƒƒD ]0}||ƒ}||ƒ}|  |t|ƒ¡ |  ||¡ qBq d S )NTr$   c                
   s   sT   ddddddddd	d
g
V  dddgV  t jdt jd� ¡ V  t  ddd¡ ¡ V  d S )Nr%   r&   r'   r(   r)   r*   r+   r,   r-   r   r/   )r%   éo   )r*   i®  )Z
fill_valueéöÿÿÿéûÿÿÿéd   )r   Úfullr6   ÚtolistÚlinspacer   r   r   r   Úa_variationsœ   s    z:_TestHeapq.test_heappop_basic_sanity.<locals>.a_variations)r   r   r
   r3   r:   r;   r4   r5   )	r!   r<   r=   re   r>   r?   r@   Zval_pyZval_cr   r   r   Útest_heappop_basic_sanity˜   s    

z$_TestHeapq.test_heappop_basic_sanityc              	   C   sP   t }tdd�|ƒ}|  ¡  |  ¡ �}|dƒ W 5 Q R X d}|  |t|jƒ¡ d S )NTr$   rS   rT   )r   r   rU   rV   rW   rX   rY   rZ   r   r   r   Útest_heappop_exceptions¬   s    
z"_TestHeapq.test_heappop_exceptionsc                 c   sl   |   ddddddddd	d
g
¡V  t ddd¡}|   |¡V  |   |d d d… ¡V  | j |¡ |   |¡V  d S )Nr%   r&   r'   r(   r)   r*   r+   r,   r-   r   r_   é   éÿÿÿÿ)r3   r   rd   r    Úshuffle)r!   r>   r   r   r   Ú	iterables¹   s     z_TestHeapq.iterablesc                    sŒ   t }tdd�|ƒ}t}tdd�|ƒ‰ |  ¡ D ]Z}t|ƒ}|  | d¡g¡‰|D ]}|ˆ|ƒ qN‡ ‡fdd„ttˆƒƒD ƒ}|  	||¡ q,d S )NTr$   r   c                    s   g | ]}ˆ ˆƒ‘qS r   r   ©Ú.0Ú_©Z	cfunc_popr   r   r   Ú
<listcomp>Ï   s     z2_TestHeapq.test_heappush_basic.<locals>.<listcomp>)
r   r   r   rk   Úsortedr3   Úpopr:   r;   r4   )r!   Zpyfunc_pushZ
cfunc_pushZ
pyfunc_popr   ÚexpectedÚvalueÚgotr   ro   r   Útest_heappush_basicÁ   s    z_TestHeapq.test_heappush_basicc              	   C   s’   t }tdd�|ƒ}|  ¡  |  ¡ �}|ddƒ W 5 Q R X d}|  |t|jƒ¡ |  ¡ �}||  dddg¡d	ƒ W 5 Q R X d
}|  |t|jƒ¡ d S )NTr$   rS   r,   rT   r%   r'   r+   g      @ú'heap type must be the same as item type)r   r   rU   rV   rW   rX   rY   r3   rZ   r   r   r   Útest_heappush_exceptionsÒ   s    

 z#_TestHeapq.test_heappush_exceptionsc                 C   sÞ   t }tdd�|ƒ}|  ¡ D ]<}tdt|ƒd ƒD ]$}|d|ƒ}|d|ƒ}|  ||¡ q0q|d|  dddg¡ƒ}|  |g ¡ |d|  dddg¡ƒ}|  |dg¡ |ddƒ}|  |ddg¡ |dt d	¡ƒ}|  |d
ddg¡ d S )NTr$   r`   r&   r%   Fr*   ©r,   r'   r+   r&   r*   r%   r,   r   )	r   r   rk   r:   r;   r4   r3   r   Úarange©r!   r<   r=   r   r   rs   ru   Úoutr   r   r   Útest_nsmallest_basicå   s    


z_TestHeapq.test_nsmallest_basicc                 C   sÞ   t }tdd�|ƒ}|  ¡ D ]<}tdt|ƒd ƒD ]$}|d|ƒ}|d|ƒ}|  ||¡ q0q|d|  dddg¡ƒ}|  |g ¡ |d|  dddg¡ƒ}|  |dg¡ |ddƒ}|  |d	d
g¡ |dt d	¡ƒ}|  |d
ddg¡ d S )NTr$   r`   r&   r%   Fr*   ry   r,   r'   r+   )	r   r   rk   r:   r;   r4   r3   r   rz   r{   r   r   r   Útest_nlargest_basicý   s    


z_TestHeapq.test_nlargest_basicc              	   C   s€   |   ¡  |  ¡ �}|d|  dddg¡ƒ W 5 Q R X d}|  |t|jƒ¡ |  ¡ �}|ddƒ W 5 Q R X d}|  |t|jƒ¡ d S )Ngš™™™™™@r&   r*   r%   z%First argument 'n' must be an integerra   z+Second argument 'iterable' must be iterable)rU   rV   r3   rW   rX   rY   )r!   r=   r[   r\   r   r   r   Ú_assert_typing_error  s    
 
z_TestHeapq._assert_typing_errorc                 C   s    t }tdd�|ƒ}|  |¡ d S ©NTr$   )r   r   r   ©r!   r<   r=   r   r   r   Útest_nsmallest_exceptions&  s    z$_TestHeapq.test_nsmallest_exceptionsc                 C   s    t }tdd�|ƒ}|  |¡ d S r€   )r   r   r   r�   r   r   r   Útest_nlargest_exceptions+  s    z#_TestHeapq.test_nlargest_exceptionsc              
   C   sæ   t }tdd�|ƒ}ddddddd	d
ddg
}t|ƒ |  |¡}dD ](}|||ƒ |||ƒ |  |t|ƒ¡ q@t ddd¡}tj|d	< tj	|d< | 
¡ }t|ƒ |  |¡}ddtj	 tj	fD ](}|||ƒ |||ƒ |  |t|ƒ¡ q¸d S )NTr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r   )éüÿÿÿr+   é   éýÿÿÿé   é   ri   g      Àr.   )r   r   r
   r3   r4   r5   r   rd   r6   r7   rc   )r!   r<   r=   r>   r?   r   r   r   r   Útest_heapreplace_basic0  s&    







z!_TestHeapq.test_heapreplace_basicc              	   C   s’   t }tdd�|ƒ}|  ¡  |  ¡ �}|ddƒ W 5 Q R X d}|  |t|jƒ¡ |  ¡ �}||  dddg¡d	ƒ W 5 Q R X d
}|  |t|jƒ¡ d S )NTr$   rS   ri   rT   r%   r'   r+   rG   rw   )r   r   rU   rV   rW   rX   rY   r3   rZ   r   r   r   Útest_heapreplace_exceptionsK  s    

 z&_TestHeapq.test_heapreplace_exceptionsc                 c   s*   zt |ƒV  qW n tk
r$   Y nX d S r   )r   Ú
IndexError)r!   r   r   r   r   Úheapiter^  s    z_TestHeapq.heapiterc                 C   sž   t dd�tƒ}t dd�tƒ}| j tdƒd¡ ¡ }|  |d d… ¡}||ƒ |dd … D ]}||d krX|||ƒ qX|  t	|  
t	|ƒ¡ƒt|ƒdd … ¡ d S )NTr$   éÐ  éè  é
   r   r_   )r   r
   r   r    Úchoicer:   rc   r3   r4   r5   rŒ   rq   )r!   Úcfunc_heapifyZcfunc_heapreplacerM   r   r   r   r   r   Ú
test_nbeste  s    ÿz_TestHeapq.test_nbestc                    sÒ   t dd�tƒ}t dd�tƒ}t dd�tƒ‰ tdƒD ]š}tjdtjd�}|  | j	 
|d¡¡}|d@ rx|d d … ‰|ˆƒ n,|  |d g¡‰|dd … D ]}|ˆ|ƒ q”‡ ‡fd	d
„tdƒD ƒ}|  |t|ƒ¡ q2d S )NTr$   ra   r'   ©Zdtyper�   r%   r   c                    s   g | ]}ˆ ˆƒ‘qS r   r   rl   ©rL   r   r   r   rp   ‰  s     z,_TestHeapq.test_heapsort.<locals>.<listcomp>)r   r
   r   r   r:   r   rz   Úfloat64r3   r    r�   r4   rq   )r!   r‘   rK   ZtrialÚvaluesrM   r   Zheap_sortedr   r”   r   Útest_heapsortv  s    
z_TestHeapq.test_heapsortc                 C   sZ   t }tdd�|ƒ}|  | j tdƒd¡¡}dD ]&}|  t|||ƒƒt|ƒd |… ¡ q.d S )NTr$   r�   rŽ   ©	r   r%   r*   r�   ra   i�  iç  rŽ   iL  )	r   r   r3   r    r�   r:   r4   r5   rq   ©r!   r<   r=   rM   r   r   r   r   Útest_nsmallestŒ  s
    z_TestHeapq.test_nsmallestc                 C   s^   t }tdd�|ƒ}|  | j tdƒd¡¡}dD ]*}|  t|||ƒƒt|dd�d |… ¡ q.d S )NTr$   r�   rŽ   r˜   )Úreverse)	r   r   r3   r    r�   r:   r4   r5   rq   r™   r   r   r   Útest_nlargest—  s    ÿz_TestHeapq.test_nlargestc           	      C   s¢   t }tdd�|ƒ}t}tdd�|ƒ}tjdtjd�}|  | j |d¡¡}|d d… }||ƒ |dd … D ]}|||ƒ qh|  	t
|  t
|ƒ¡ƒt|ƒdd … ¡ d S )NTr$   r�   r“   rŽ   r�   r_   )r   r   r
   r   rz   r•   r3   r    r�   r4   r5   rŒ   rq   )	r!   Zpyfunc_heappushpopZcfunc_heappushpopZpyfunc_heapifyr‘   r–   rM   r   r   r   r   r   Útest_nbest_with_pushpop£  s    ÿz"_TestHeapq.test_nbest_with_pushpopc                 C   sÊ   t }tdd�|ƒ}|  dg¡}||dƒ}|  t|ƒ|fdgdf¡ |  t|d ƒt¡ |  t|ƒt¡ |  dg¡}||dƒ}|  t|ƒ|fdgdf¡ |  dg¡}||dƒ}|  t|ƒ|fdgdf¡ d S )	NTr$   g      ð?g      $@r   r�   r)   r1   )r   r   r3   r4   r5   ÚtypeÚfloat)r!   r<   r=   Úhr   r   r   r   Útest_heappushpop¸  s    


z_TestHeapq.test_heappushpopc              	   C   s’   t }tdd�|ƒ}|  ¡  |  ¡ �}|ddƒ W 5 Q R X d}|  |t|jƒ¡ |  ¡ �}||  dddg¡d	ƒ W 5 Q R X d
}|  |t|jƒ¡ d S )NTr$   rS   ri   rT   r%   r'   r+   Frw   )r   r   rU   rV   rW   rX   rY   r3   rZ   r   r   r   Útest_heappushpop_exceptionsÌ  s    

 z&_TestHeapq.test_heappushpop_exceptions)Ú__name__Ú
__module__Ú__qualname__r   rA   rF   rO   rR   r]   rf   rg   rk   rv   rx   r}   r~   r   r‚   rƒ   r‰   rŠ   rŒ   r’   r—   rš   rœ   r�   r¡   r¢   Ú__classcell__r   r   r"   r   r   *   s4   'r   c                   @   s   e Zd ZdZeZdS )ÚTestHeapqReflectedListzTest heapq with reflected listsN)r£   r¤   r¥   Ú__doc__r5   r3   r   r   r   r   r§   à  s   r§   c                   @   s   e Zd ZdZejZdS )ÚTestHeapqTypedListzTest heapq with typed listsN)r£   r¤   r¥   r¨   r   ÚListr3   r   r   r   r   r©   æ  s   r©   )Úheapqr	   r8   Únumpyr   Znumbar   r   Znumba.core.compilerr   Znumba.tests.supportr   r   r   Zno_pyobj_flagsZnrtr
   r   r   r   r   r   r   r   r§   r©   r   r   r   r   Ú<module>   s(      9