o
    8ήc                     @   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re&  dS dS )!    N)njit)compile_isolatedFlags)typeserrors)TestCaseMemoryLeakMixintag)numpy_supportTc                  C      d} dD ]}| |7 } q| S )Nr   )      c       resir   r   A/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_iteration.pyint_tuple_iter_usecase      
r   c                  C   r   )N        )      ?       @33333X@333333@r   r   r   r   r   float_tuple_iter_usecase   r   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         )nponesr!   sum)r   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   r   r2   c                 C   s"   d}| D ]
}||j |j 7 }q|S r.   abr/   r   r   r   record_iter_usecaseG   s   r6   c                 C   s   | D ]	}|j |j |_ qd S Nr3   )r0   r1   r   r   r   record_iter_mutate_usecaseM   s   r8   r4   r5   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pyfuncr;   crcfuncexpectedr   r   r   run_nullary_funcY   s   zIterationTest.run_nullary_funcc                 C      |  t| d S r7   )rC   r   r>   r;   r   r   r   test_int_tuple_iter_      z!IterationTest.test_int_tuple_iterc                 C      | j td d S Nr:   )rF   no_pyobj_flagsr>   r   r   r   test_int_tuple_iter_npmb   rG   z%IterationTest.test_int_tuple_iter_npmc                 C   rD   r7   )rC   r   rE   r   r   r   test_float_tuple_iterh   rG   z#IterationTest.test_float_tuple_iterc                 C   rH   rI   )rM   rJ   rK   r   r   r   test_float_tuple_iter_npmk   rG   z'IterationTest.test_float_tuple_iter_npmc                 C   rD   r7   )rC   r   rE   r   r   r   test_tuple_tuple_itern   rG   z#IterationTest.test_tuple_tuple_iterc                 C   rH   rI   )rO   rJ   rK   r   r   r   test_tuple_tuple_iter_npmq   rG   z'IterationTest.test_tuple_tuple_iter_npmc                 C   rD   r7   )rC   r#   rE   r   r   r   test_enumerate_nested_tuplet   rG   z)IterationTest.test_enumerate_nested_tuplec                 C   rH   rI   )rQ   rJ   rK   r   r   r   test_enumerate_nested_tuple_npmw   rG   z-IterationTest.test_enumerate_nested_tuple_npmc                 C   rD   r7   )rC   r%   rE   r   r   r   test_nested_enumeratez   rG   z#IterationTest.test_nested_enumeratec                 C   rH   rI   )rS   rJ   rK   r   r   r   test_nested_enumerate_npm}   rG   z'IterationTest.test_nested_enumerate_npmc                 C   s,   t }t|d}|j}| }| | | d S )Nr   )r-   r   r<   r=   )r>   r?   r@   rA   rB   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   Ar:   )r2   r   r   Arrayr<   r=   )r>   	item_typeargr;   r?   r@   rA   r   r   r   run_array_1d   s   zIterationTest.run_array_1dc                 C   s   |  tjtd| d S )N      @)rZ   r   float64r(   arangerE   r   r   r   test_array_1d_float   s   z!IterationTest.test_array_1d_floatc                 C      |  t d S r7   )r^   rJ   rK   r   r   r   test_array_1d_float_npm      z%IterationTest.test_array_1d_float_npmc                 C   s   |  tjtdd | d S )Nr[   y              ?)rZ   r   
complex128r(   r]   rE   r   r   r   test_array_1d_complex   s   z#IterationTest.test_array_1d_complexc                 C   r_   r7   )rc   rJ   rK   r   r   r   test_array_1d_complex_npm   ra   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 || _q"||}| ||| d S Nr   rV   r:   r   dtyper   )r6   r
   
from_dtyperecord_dtyper   r   rW   r<   r(   recarrayrangefloatr4   r5   r=   )	r>   r;   r?   rX   r@   rA   arrr   gotr   r   r   test_array_1d_record   s   
z"IterationTest.test_array_1d_recordc                 C   r_   r7   )ro   rJ   rK   r   r   r   test_array_1d_record_npm   ra   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 || _q"| }|| | }	||	 | ||	 d S re   )r8   r
   rh   ri   r   r   rW   r<   r(   rj   rk   rl   r4   r5   copyr=   )
r>   r;   r?   rX   r@   rA   rm   r   rB   rn   r   r   r   test_array_1d_record_mutate_npm   s   
z-IterationTest.test_array_1d_record_mutate_npmc                 C   rH   rI   )rr   force_pyobj_flagsrK   r   r   r   test_array_1d_record_mutate   rG   z)IterationTest.test_array_1d_record_mutatec                 C   sf   dd }|  tj}ttjdd}t||f W d    n1 s#w   Y  | dt|j	 d S )Nc                 S   s   | D ]}qd S r7   r   )r1   r   r   r   r   foo   s   z/IterationTest.test_array_0d_raises.<locals>.foor   Cz	0-d array)
assertRaisesr   TypingErrorr   rW   int32r   assertInstr	exception)r>   ru   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)r1   ytotalrowr   r   r   bar   s   z4IterationTest.test_tuple_iter_issue1504.<locals>.barr   rf   r   rv   )r(   r]   ry   r   rW   r   r<   assertEqualr>   r   r1   r   r~   cresexpectrn   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   )arrsr   rm   r   r   r   r      s   z4IterationTest.test_tuple_of_arrays_iter.<locals>.barr   rf   r   rv   r   )
r(   r]   ry   r   rW   r   
containersUniTupler<   r   r   r   r   r   test_tuple_of_arrays_iter   s   z'IterationTest.test_tuple_of_arrays_iterN)__name__
__module____qualname__rC   rs   rF   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rZ   r^   r`   rc   rd   ro   rp   rJ   rr   rt   r   r   r   r   r   r   r   r9   W   s2    r9   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 r   )r   rk   lenr*   )sequencecr4   r5   r   r   r   ru      s   z4TestIterationRefct.test_zip_with_arrays.<locals>.fooc                 S   s   g | ]	}t d | qS )r   )r(   r]   ).0r   r   r   r   
<listcomp>   s    z;TestIterationRefct.test_zip_with_arrays.<locals>.<listcomp>
   )r   rk   r   py_func)r>   ru   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(   numbar   unittestnumba.core.compilerr   r   
numba.corer   r   numba.tests.supportr   r   r	   numba.npr
   enable_pyobj_flagsenable_pyobjectrs   force_pyobjectrJ   r   r   r   r#   r%   r-   r2   r6   r8   rg   r\   ry   ri   r9   r   r   mainr   r   r   r   <module>   s<    		 