U
    ,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   >/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_iteration.pyint_tuple_iter_usecase   s    
r   c                  C   s   d} dD ]}| |7 } q| S )N        )      ?       @33333X@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   Z
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__)'Z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   		 
