U
    iâËdŠ  ã                   @   s  d dl Zd dlmZ d dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZ eƒ Zde_eƒ Zde_eƒ 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e dej fdej!fg¡Z"G dd„ deeƒZ#G dd„ deeƒZ$e%d k�re &¡  dS )!é    N)Únjit)Úcompile_isolatedÚFlags)ÚtypesÚerrors)ÚTestCaseÚMemoryLeakMixinÚtag)Únumpy_supportTc                  C   s   d} dD ]}| |7 } q| S )Nr   )é   é   éc   é   © ©ÚresÚir   r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_iteration.pyÚint_tuple_iter_usecase   s    
r   c                  C   s   d} dD ]}| |7 } q| S )Nç        )ç      ø?ç       @ç33333ÓX@ç333333@r   r   r   r   r   Úfloat_tuple_iter_usecase   s    
r   c                  C   s,   d} dD ]}|D ]}| |7 } q| d } q| S ©Nr   ))r   r   )r   r   )gÍÌÌÌÌÌü?g      @r   r   )r   r   Újr   r   r   Útuple_tuple_iter_usecase   s    

r   c                  C   s8   d} t dƒD ]&\}}|D ]}| || 7 } q| d } q| S r   ©Ú	enumerate)r   r   r   Úlr   r   r   Úenumerate_nested_tuple_usecase(   s    
r!   c                  C   sD   d} t t dƒƒD ].\}\}}|D ]}| || | 7 } q | d } q| S r   r   )r   r   r   Úkr    r   r   r   Únested_enumerate_usecase0   s    
r#   c                  C   s:   d} t  d¡t  d¡f}t|ƒD ]\}}| | ¡ 7 } q | S )Nr   é   é   )ÚnpZonesr   Úsum)r   Zarraysr   Úvr   r   r   Úenumerate_array_usecase9   s
    r)   c                 C   s   d}| D ]}||7 }q|S ©Nr   r   ©Úiterabler   Úxr   r   r   Úscalar_iter_usecaseA   s    
r.   c                 C   s"   d}| D ]}||j |j 7 }q|S r*   ©ÚaÚbr+   r   r   r   Úrecord_iter_usecaseG   s    r2   c                 C   s   | D ]}|j |j |_ qd S ©Nr/   )r,   r-   r   r   r   Úrecord_iter_mutate_usecaseM   s    r4   r0   r1   c                   @   sð   e Zd Zdd„ Zefdd„Zdd„ Zefdd„Zd	d
„ Zefdd„Z	dd„ Z
efdd„Zdd„ Zefdd„Zdd„ Zdd„ Zdd„ Zefdd„Zdd„ Zefdd „Zd!d"„ Zefd#d$„Zd%d&„ Zefd'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1S )2ÚIterationTestc                 C   s,   t |d|d�}|j}|ƒ }|  |ƒ |¡ d S )Nr   ©Úflags)r   Úentry_pointÚassertPreciseEqual)ÚselfÚpyfuncr7   ÚcrÚcfuncÚexpectedr   r   r   Úrun_nullary_funcY   s    zIterationTest.run_nullary_funcc                 C   s   |   t|¡ d S r3   )r?   r   ©r:   r7   r   r   r   Útest_int_tuple_iter_   s    z!IterationTest.test_int_tuple_iterc                 C   s   | j td� d S ©Nr6   )rA   Úno_pyobj_flags©r:   r   r   r   Útest_int_tuple_iter_npmb   s    z%IterationTest.test_int_tuple_iter_npmc                 C   s   |   t|¡ d S r3   )r?   r   r@   r   r   r   Útest_float_tuple_iterh   s    z#IterationTest.test_float_tuple_iterc                 C   s   | j td� d S rB   )rF   rC   rD   r   r   r   Útest_float_tuple_iter_npmk   s    z'IterationTest.test_float_tuple_iter_npmc                 C   s   |   t|¡ d S r3   )r?   r   r@   r   r   r   Útest_tuple_tuple_itern   s    z#IterationTest.test_tuple_tuple_iterc                 C   s   | j td� d S rB   )rH   rC   rD   r   r   r   Útest_tuple_tuple_iter_npmq   s    z'IterationTest.test_tuple_tuple_iter_npmc                 C   s   |   t|¡ d S r3   )r?   r!   r@   r   r   r   Útest_enumerate_nested_tuplet   s    z)IterationTest.test_enumerate_nested_tuplec                 C   s   | j td� d S rB   )rJ   rC   rD   r   r   r   Útest_enumerate_nested_tuple_npmw   s    z-IterationTest.test_enumerate_nested_tuple_npmc                 C   s   |   t|¡ d S r3   )r?   r#   r@   r   r   r   Útest_nested_enumeratez   s    z#IterationTest.test_nested_enumeratec                 C   s   | j td� d S rB   )rL   rC   rD   r   r   r   Útest_nested_enumerate_npm}   s    z'IterationTest.test_nested_enumerate_npmc                 C   s,   t }t|dƒ}|j}|ƒ }|  |ƒ |¡ d S )Nr   )r)   r   r8   r9   )r:   r;   r<   r=   r>   r   r   r   Útest_enumerate_refct€   s
    
z"IterationTest.test_enumerate_refctc                 C   s>   t }t|t |dd¡f||d�}|j}|  ||ƒ||ƒ¡ d S )Nr   ÚAr6   )r.   r   r   ÚArrayr8   r9   )r:   Ú	item_typeÚargr7   r;   r<   r=   r   r   r   Úrun_array_1dˆ   s     ÿzIterationTest.run_array_1dc                 C   s   |   tjt d¡|¡ d S )Nç      @)rS   r   Úfloat64r&   Úaranger@   r   r   r   Útest_array_1d_float�   s    z!IterationTest.test_array_1d_floatc                 C   s   |   t¡ d S r3   )rW   rC   rD   r   r   r   Útest_array_1d_float_npm“   s    z%IterationTest.test_array_1d_float_npmc                 C   s   |   tjt d¡d |¡ d S )NrT   y              ð?)rS   r   Z
complex128r&   rV   r@   r   r   r   Útest_array_1d_complex–   s    z#IterationTest.test_array_1d_complexc                 C   s   |   t¡ d S r3   )rY   rC   rD   r   r   r   Útest_array_1d_complex_npm™   s    z'IterationTest.test_array_1d_complex_npmc           	      C   s†   t }t t¡}t|t |dd¡f|d�}|j}tj	dtd�}t
dƒD ]$}t|d ƒ|| _|d || _qD||ƒ}|  ||ƒ|¡ d S ©Nr   rO   r6   r   ©Údtyper   )r2   r
   Ú
from_dtypeÚrecord_dtyper   r   rP   r8   r&   ÚrecarrayÚrangeÚfloatr0   r1   r9   )	r:   r7   r;   rQ   r<   r=   Úarrr   Úgotr   r   r   Útest_array_1d_recordœ   s    
ÿz"IterationTest.test_array_1d_recordc                 C   s   |   t¡ d S r3   )re   rC   rD   r   r   r   Útest_array_1d_record_npm©   s    z&IterationTest.test_array_1d_record_npmc           
      C   sš   t }t t¡}t|t |dd¡f|d�}|j}tj	dtd�}t
dƒD ]$}t|d ƒ|| _|d || _qD| ¡ }||ƒ | ¡ }	||	ƒ |  ||	¡ d S r[   )r4   r
   r^   r_   r   r   rP   r8   r&   r`   ra   rb   r0   r1   Úcopyr9   )
r:   r7   r;   rQ   r<   r=   rc   r   r>   rd   r   r   r   Útest_array_1d_record_mutate_npm¬   s    
ÿz-IterationTest.test_array_1d_record_mutate_npmc                 C   s   | j td� d S rB   )rh   Úforce_pyobj_flagsrD   r   r   r   Útest_array_1d_record_mutate¼   s    z)IterationTest.test_array_1d_record_mutatec              	   C   sR   dd„ }|   tj¡�"}t tjdd¡}t||fƒ W 5 Q R X |  dt|j	ƒ¡ d S )Nc                 S   s   | D ]}qd S r3   r   )r-   r   r   r   r   ÚfooÁ   s    z/IterationTest.test_array_0d_raises.<locals>.foor   ÚCz	0-d array)
ÚassertRaisesr   ZTypingErrorr   rP   Úint32r   ZassertInÚstrÚ	exception)r:   rk   ZraisesÚarytyr   r   r   Útest_array_0d_raises¿   s
    z"IterationTest.test_array_0d_raisesc                 C   s`   dd„ }t jdt jd� }}t tjdd¡}t|||fƒ}|||ƒ}| ||¡}|  ||¡ d S )Nc                 S   s,   d}t | |ƒD ]}||d |d  7 }q|S ©Nr   r   )Úzip)r-   ÚyÚtotalÚrowr   r   r   ÚbarÎ   s    z4IterationTest.test_tuple_iter_issue1504.<locals>.barr   r\   r   rl   )r&   rV   rn   r   rP   r   r8   ÚassertEqual©r:   rx   r-   ru   rq   ZcresÚexpectrd   r   r   r   Útest_tuple_iter_issue1504Ì   s    
z'IterationTest.test_tuple_iter_issue1504c                 C   sl   dd„ }t jdt jd� }}t tjdd¡}t|tj |d¡fƒ}|||fƒ}| ||f¡}|  	||¡ d S )Nc                 S   s   d}| D ]}||d 7 }q|S )Nr   r   )Zarrsrv   rc   r   r   r   rx   ß   s    z4IterationTest.test_tuple_of_arrays_iter.<locals>.barr   r\   r   rl   r   )
r&   rV   rn   r   rP   r   Ú
containersZUniTupler8   ry   rz   r   r   r   Útest_tuple_of_arrays_iterÝ   s    z'IterationTest.test_tuple_of_arrays_iterN)Ú__name__Ú
__module__Ú__qualname__r?   ri   rA   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rS   rW   rX   rY   rZ   re   rf   rC   rh   rj   rr   r|   r~   r   r   r   r   r5   W   s0   r5   c                   @   s   e Zd Zdd„ ZdS )ÚTestIterationRefctc                 C   s8   t dd„ ƒ}dd„ tdƒD ƒ}|  ||ƒ| |¡¡ d S )Nc                 S   s8   d}t tt| ƒƒ| ƒD ]\}}||d | ¡  7 }qd S rs   )rt   ra   Úlenr'   )ÚsequenceÚcr0   r1   r   r   r   rk   ò   s    z4TestIterationRefct.test_zip_with_arrays.<locals>.fooc                 S   s   g | ]}t  d | ¡‘qS )r   )r&   rV   )Ú.0r   r   r   r   Ú
<listcomp>ù   s     z;TestIterationRefct.test_zip_with_arrays.<locals>.<listcomp>é
   )r   ra   ry   Zpy_func)r:   rk   r„   r   r   r   Útest_zip_with_arraysñ   s    
z'TestIterationRefct.test_zip_with_arraysN)r   r€   r�   r‰   r   r   r   r   r‚   ð   s   r‚   Ú__main__)'Únumpyr&   Znumbar   ZunittestZnumba.core.compilerr   r   Z
numba.corer   r   Znumba.tests.supportr   r   r	   Znumba.npr
   Zenable_pyobj_flagsZenable_pyobjectri   Zforce_pyobjectrC   r   r   r   r!   r#   r)   r.   r2   r4   r]   rU   rn   r_   r5   r‚   r   Úmainr   r   r   r   Ú<module>   s8   		ÿ 
