B
     \                 @   s  d dl mZ d dl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mZmZ e	 Zed e	 Zed 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"e#dkre$  dS )     )print_functionN)compile_isolatedFlags)numpy_supporttypes   )TestCaseMemoryLeakMixintagZenable_pyobjectZforce_pyobjectc              C   s   d} xdD ]}| |7 } q
W | S )Nr   )r      c       )resir   r   9lib/python3.7/site-packages/numba/tests/test_iteration.pyint_tuple_iter_usecase   s    
r   c              C   s   d} xdD ]}| |7 } q
W | S )Ng        )g      ?g       @g33333X@g333333@r   )r   r   r   r   r   float_tuple_iter_usecase   s    
r   c              C   s4   d} x*dD ]"}x|D ]}| |7 } qW | d } q
W | S )Ng        ))g      ?g       @)g33333X@g333333@)g?g      @r   r   )r   r   jr   r   r   tuple_tuple_iter_usecase   s    

r   c              C   s@   d} x6t dD ]*\}}x|D ]}| || 7 } qW | d } qW | S )Ng        ))g      ?g       @)g33333X@g333333@)g?g      @r   )	enumerate)r   r   r   lr   r   r   enumerate_nested_tuple_usecase(   s    
r   c              C   sL   d} xBt t dD ]2\}\}}x|D ]}| || | 7 } q$W | d } qW | S )Ng        ))g      ?g       @)g33333X@g333333@)g?g      @r   )r   )r   r   r   kr   r   r   r   nested_enumerate_usecase0   s    
r   c              C   s>   d} t dt df}x t|D ]\}}| | 7 } q"W | S )Nr         )npZonesr   sum)r   Zarraysr   vr   r   r   enumerate_array_usecase9   s
    r    c             C   s   d}x| D ]}||7 }q
W |S )Ng        r   )iterabler   xr   r   r   scalar_iter_usecaseA   s    
r#   c             C   s&   d}x| D ]}||j |j 7 }q
W |S )Ng        )ab)r!   r   r"   r   r   r   record_iter_usecaseG   s    
r&   c             C   s    x| D ]}|j |j |_ qW d S )N)r$   r%   )r!   r"   r   r   r   record_iter_mutate_usecaseM   s    
r'   r$   r%   c               @   s  e Zd Zdd ZefddZeddd Zefdd	Zd
d Z	efddZ
eddd ZefddZeddd ZefddZeddd Zdd Zdd ZefddZdd Zefd d!Zed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d0S )1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   s   |  t| d S )N)r1   r   )r,   r)   r   r   r   test_int_tuple_iter_   s    z!IterationTest.test_int_tuple_iterZ	importantc             C   s   | j td d S )N)r)   )r2   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 )N)r1   r   )r,   r)   r   r   r   test_float_tuple_iteri   s    z#IterationTest.test_float_tuple_iterc             C   s   | j td d S )N)r)   )r5   r3   )r,   r   r   r   test_float_tuple_iter_npml   s    z'IterationTest.test_float_tuple_iter_npmc             C   s   |  t| d S )N)r1   r   )r,   r)   r   r   r   test_tuple_tuple_itero   s    z#IterationTest.test_tuple_tuple_iterc             C   s   | j td d S )N)r)   )r7   r3   )r,   r   r   r   test_tuple_tuple_iter_npmr   s    z'IterationTest.test_tuple_tuple_iter_npmc             C   s   |  t| d S )N)r1   r   )r,   r)   r   r   r   test_enumerate_nested_tuplev   s    z)IterationTest.test_enumerate_nested_tuplec             C   s   | j td d S )N)r)   )r9   r3   )r,   r   r   r   test_enumerate_nested_tuple_npmy   s    z-IterationTest.test_enumerate_nested_tuple_npmc             C   s   |  t| d S )N)r1   r   )r,   r)   r   r   r   test_nested_enumerate}   s    z#IterationTest.test_nested_enumeratec             C   s   | j td d S )N)r)   )r;   r3   )r,   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   r*   r+   )r,   r-   r.   r/   r0   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   A)r)   )r#   r   r   Arrayr*   r+   )r,   	item_typeargr)   r-   r.   r/   r   r   r   run_array_1d   s
    
zIterationTest.run_array_1dc             C   s   |  tjtd| d S )Ng      @)rB   r   float64r   arange)r,   r)   r   r   r   test_array_1d_float   s    z!IterationTest.test_array_1d_floatc             C   s   |  t d S )N)rE   r3   )r,   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 )Ng      @y              ?)rB   r   Z
complex128r   rD   )r,   r)   r   r   r   test_array_1d_complex   s    z#IterationTest.test_array_1d_complexc             C   s   |  t d S )N)rG   r3   )r,   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}x0t
dD ]$}t|d || _|d || _qFW ||}| ||| d S )Nr   r>   )r)   r   )dtyper   )r&   r   
from_dtyperecord_dtyper   r   r?   r*   r   recarrayrangefloatr$   r%   r+   )	r,   r)   r-   r@   r.   r/   arrr   gotr   r   r   test_array_1d_record   s    
z"IterationTest.test_array_1d_recordc             C   s   |  t d S )N)rQ   r3   )r,   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}x0t
dD ]$}t|d || _|d || _qFW | }|| | }	||	 | ||	 d S )Nr   r>   )r)   r   )rI   r   )r'   r   rJ   rK   r   r   r?   r*   r   rL   rM   rN   r$   r%   copyr+   )
r,   r)   r-   r@   r.   r/   rO   r   r0   rP   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 )N)r)   )rT   force_pyobj_flags)r,   r   r   r   test_array_1d_record_mutate   s    z)IterationTest.test_array_1d_record_mutatec             C   s`   dd }t jdt jd }}ttjdd}t|||f}|||}|||}| || d S )Nc             S   s0   d}x&t | |D ]}||d |d  7 }qW |S )Nr   r   )zip)r"   ytotalrowr   r   r   bar   s    z4IterationTest.test_tuple_iter_issue1504.<locals>.barr   )rI   r   C)r   rD   int32r   r?   r   r*   assertEqual)r,   r[   r"   rX   arytycresexpectrP   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}x| D ]}||d 7 }q
W |S )Nr   r   )ZarrsrY   rO   r   r   r   r[      s    
z4IterationTest.test_tuple_of_arrays_iter.<locals>.barr   )rI   r   r\   r   )
r   rD   r]   r   r?   r   Z
containersZUniTupler*   r^   )r,   r[   r"   rX   r_   r`   ra   rP   r   r   r   test_tuple_of_arrays_iter   s    z'IterationTest.test_tuple_of_arrays_iterN)__name__
__module____qualname__r1   rU   r2   r
   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rB   rE   rF   rG   rH   rQ   rR   r3   rT   rV   rb   rc   r   r   r   r   r(   W   s.   r(   __main__)%Z
__future__r   Znumpyr   Znumba.unittest_supportZunittest_supportZunittestZnumba.compilerr   r   Znumbar   r   Zsupportr   r	   r
   Zenable_pyobj_flagssetrU   r3   r   r   r   r   r   r    r#   r&   r'   rI   rC   r]   rK   r(   rd   mainr   r   r   r   <module>   s2   

		 