U
    ,‰d„D  ã                   @   s"  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	 d dl
mZmZmZmZ d dl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!G d*d+„ d+eeƒZ"G d,d-„ d-eeƒZ#e$d.kre %¡  dS )/é    N)ÚjitÚtypeof)Útypes)Úcompile_isolated)ÚTestCaseÚCompilationCacheÚMemoryLeakMixinÚtagc                 C   s&   d}t | ƒD ]\}}||| 7 }q|S ©Nr   ©Ú	enumerate)ÚarrÚtotalÚiÚv© r   úD/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_array_iterators.pyÚ
array_iter   s    r   c                 C   s   t t| ƒƒS ©N)ÚlistÚiter©r   r   r   r   Úarray_iter_items   s    r   c                 C   s*   d}t | | ƒD ]\}}||| 7 }q|S r
   r   )r   Úidxr   r   r   r   r   r   Úarray_view_iter   s    r   c                 C   s    t | jƒD ]\}}|||< q
d S r   ©r   Úflat)r   Úoutr   r   r   r   r   Ú
array_flat   s    r   c                 C   s
   | j | S r   ©r   )r   Úindr   r   r   Úarray_flat_getitem   s    r!   c                 C   s   || j |< d S r   r   )r   r    Úvalr   r   r   Úarray_flat_setitem"   s    r#   c                 C   s,   d}t | jƒD ]\}}||d |  }q|S ©Nr   é   r   )r   Úsr   r   r   r   r   Úarray_flat_sum%   s    r'   c                 C   s
   t | jƒS r   )Úlenr   r   r   r   r   Úarray_flat_len+   s    r)   c                 C   s8   d}t  | ¡D ]$\\}}}||d |d  |  }q|S r$   )ÚnpÚndenumerate)r   r&   r   Újr   r   r   r   Úarray_ndenumerate_sum.   s    r-   c                  C   s,   d} t  d¡D ]}| | t|ƒ d 7 } q| S )Nr   r   r%   )r*   Úndindexr(   )r&   r    r   r   r   Únp_ndindex_empty4   s    r/   c                 C   s6   d}d}t  | |¡D ]\}}||d |d   }q|S r$   )r*   r.   )ÚxÚyr&   Únr   r,   r   r   r   Ú
np_ndindex:   s
    r3   c                 C   sD   d}d}t  | j¡D ]*}t|ƒD ]\}}||d |d   }q q|S r$   )r*   r.   Úshaper   )r   r&   r2   Úindicesr   r,   r   r   r   Únp_ndindex_arrayA   s    r6   c                 C   s&   g }t  | ¡D ]}| | ¡ ¡ q|S r   ©r*   ZnditerÚappendÚitem)ÚaÚresÚur   r   r   Ú
np_nditer1I   s    r=   c                 C   s6   g }t  | |f¡D ]\}}| | ¡ | ¡ f¡ q|S r   r7   )r:   Úbr;   r<   r   r   r   r   Ú
np_nditer2O   s    r?   c                 C   s@   g }t  | ||f¡D ]&\}}}| | ¡ | ¡ | ¡ f¡ q|S r   r7   )r:   r>   Úcr;   r<   r   Úwr   r   r   Ú
np_nditer3U   s    rB   c                 C   s&   t | ƒ}t | ƒ}t|ƒt|ƒt|ƒfS r   )r   Únext)r   ÚitZit2r   r   r   Ú	iter_next[   s    rE   c                 C   s:   t  | ¡}t j|t jd}t|jƒD ]\}}|||< q$|S ©N©Údtype)r*   ÚarangeÚ
zeros_likeÚintpr   r   ©Úsizer0   r;   r   r   r   r   r   Úarray_flat_premature_freej   s
    

rN   c                 C   s:   t  | ¡}t j|t jd}t  |¡D ]\}}|||< q$|S rF   )r*   rI   rJ   rK   r+   rL   r   r   r   Ú array_ndenumerate_premature_freeq   s
    

rO   c                       sÚ   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd3d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‡  ZS )4ÚTestArrayIteratorsz1
    Test array.flat, np.ndenumerate(), etc.
    c                    s   t t| ƒ ¡  tƒ | _d S r   )ÚsuperrP   ÚsetUpr   Úccache)Úself©Ú	__class__r   r   rR   ~   s    zTestArrayIterators.setUpc                 C   s6   t }t|t|ƒgƒ}|j}||ƒ}|  ||ƒ|¡ d S r   )r   r   r   Úentry_pointÚassertPreciseEqual©rT   r   ÚpyfuncÚcresÚcfuncÚexpectedr   r   r   Úcheck_array_iter_1d‚   s
    z&TestArrayIterators.check_array_iter_1dc                 C   s6   t }t|t|ƒgƒ}|j}||ƒ}|  ||ƒ|¡ d S r   )r   r   r   rW   rX   rY   r   r   r   Úcheck_array_iter_items‰   s
    z)TestArrayIterators.check_array_iter_itemsc                 C   s@   t }t|t|ƒt|ƒgƒ}|j}|||ƒ}|  |||ƒ|¡ d S r   )r   r   r   rW   rX   )rT   r   ÚindexrZ   r[   r\   r]   r   r   r   Úcheck_array_view_iter   s
    
z(TestArrayIterators.check_array_view_iterNc                 C   sf   t j|j|jd}| ¡ }|d kr*t|ƒ}tt|t|ƒgƒ}|j}t||ƒ |||ƒ |  	||¡ d S rF   )
r*   ÚzerosrM   rH   Úcopyr   r   r   rW   rX   )rT   r   Úarrtyr   Znb_outr[   r\   r   r   r   Úcheck_array_flat—   s    

z#TestArrayIterators.check_array_flatc                 C   s*   t ||gƒ}|j}|  ||ƒ||ƒ¡ d S r   )r   rW   rX   )rT   r   rd   Úfuncr[   r\   r   r   r   Úcheck_array_unary¥   s    z$TestArrayIterators.check_array_unaryc                 C   s   |   ||t¡ d S r   )rg   r'   ©rT   r   rd   r   r   r   Úcheck_array_flat_sumª   s    z'TestArrayIterators.check_array_flat_sumc                 C   s   |   ||t¡ d S r   )rg   r-   rh   r   r   r   Úcheck_array_ndenumerate_sum­   s    z.TestArrayIterators.check_array_ndenumerate_sumc                 C   s¾   t  d¡}|  |¡ |  |¡ |d d d… }|  |jj¡ |  |jj¡ |  |¡ |  |¡ t  ddddg¡}|  |¡ |  |¡ t  	dddgdddgdd	d
gg¡}|  |¡ |  |j
¡ d S )Né   é   r%   r   é   é   é   é   é   é	   )r*   rI   r^   r_   ÚassertFalseÚflagsÚc_contiguousÚf_contiguousÚbool_ÚarrayÚT©rT   r   r   r   r   Útest_array_iter°   s    






"
z"TestArrayIterators.test_array_iterc                 C   s´  t dddd„ ƒ}t d¡jddd}| |¡}||ƒ}|  ||¡ t d	¡jd
ddd d d…d d …d d …f }| |¡}||ƒ}|  ||¡ t d	¡jd
ddd d …d d d…d d …f }| |¡}||ƒ}|  ||¡ t d	¡jd
ddd d …d d …d d d…f }| |¡}||ƒ}|  ||¡ t dddd„ ƒ}t d¡jddd}| |¡}||ƒ}|  t|ƒt|ƒ¡ |d \}}}|d \}	}
}tj 	||	¡ |  ||
¡ |  ||¡ d S )NT©Znopythonc                 S   s*   g }| D ]}|D ]}|  | ¡ ¡ qq|S r   )r8   Zravel)r   ÚtÚy1Úy2r   r   r   ÚfooÃ   s
    z=TestArrayIterators.test_array_iter_yielded_order.<locals>.fooé   )rl   rm   rn   ÚF©Úorderé@   )rn   rq   rl   rl   c                 S   s*   g }| D ]}|  ||jj|jjf¡ q|S r   )r8   rt   ru   rv   )r   r   Úsubr   r   r   Ú
flag_checkã   s    ÿzDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_checké
   )rl   ro   r   )
r   r*   rI   ÚreshapeZpy_funcrX   ÚassertEqualr(   ZtestingZassert_allclose)rT   r€   r   r]   Úgotr‡   Zex_arrZe_flag_cZe_flag_fZgo_arrZg_flag_cZg_flag_fr   r   r   Útest_array_iter_yielded_orderÁ   s:    

,
,
,


z0TestArrayIterators.test_array_iter_yielded_orderc                 C   sl   t  d¡ d¡}|  |d¡ |  |jd¡ |d d d… }|  |d¡ t  ddddg¡ d¡}|  |d¡ d S )Né   ©rm   rn   r%   rl   r   ©rl   rl   )r*   rI   r‰   ra   ry   rw   rz   r   r   r   Útest_array_view_iterö   s    z'TestArrayIterators.test_array_view_iterc                 C   s   t  d¡ ddd¡}t|ƒ}|  |jd¡ |  |jd¡ |  |jj	¡ |  
|¡ | ¡ }|  |jj	¡ |  |jj¡ |  t|ƒjd¡ |  
|¡ |d d d… }|  |jj	¡ |  |jj¡ |  t|ƒjd¡ |  
|¡ t  dd	d	dgd ¡ d
¡}|  
|¡ d S )Nr   rn   rl   rm   ÚCr‚   ÚAr%   r   )rl   rl   rl   )r*   rI   r‰   r   rŠ   ÚndimÚlayoutÚ
assertTruert   ru   re   Ú	transposers   rv   rw   rh   r   r   r   Útest_array_flat_3d   s$    


z%TestArrayIterators.test_array_flat_3dc                 C   sà   t jdt jd}| dd¡}tjtjddd}|  ||¡ tjtjddd}|  ||¡ tjtjddd}|  ||¡ | dd¡}tjtjddd}|  ||¡ tjtjddd}|  ||¡ tjtjddd}|  ||¡ d S ©Nr   rG   rl   r‘   )r”   r‚   r’   )r*   rb   Úint32r‰   r   ÚArrayri   rh   r   r   r   Útest_array_flat_empty  s    z(TestArrayIterators.test_array_flat_emptyc                    s  t ‰ ‡ ‡fdd„}t d¡ ddd¡}t|jƒD ]}|||ƒ q0|j}t|jƒD ]}|||ƒ qP|d d d… }t|jƒD ]}|||ƒ qxt dg¡ d¡}t|jƒD ]}|||ƒ q¤t d	d
d
d	g¡}t|jƒD ]}|||ƒ qÐ|d d d… }t|jƒD ]}|||ƒ qød S )Nc                    s<   ˆj  ˆ t| ƒt|ƒf¡}ˆ | |ƒ}ˆ | | |¡|¡ d S r   )rS   Úcompiler   rŠ   rW   )r   r    Úcrr]   ©rZ   rT   r   r   Úcheck/  s    
z9TestArrayIterators.test_array_flat_getitem.<locals>.checkr   rn   rl   rm   é*   r   r%   r   )	r!   r*   rI   r‰   ÚrangerM   ry   rx   rw   ©rT   rŸ   r   r   r   rž   r   Útest_array_flat_getitem,  s(    z*TestArrayIterators.test_array_flat_getitemc                    s  t ‰ ‡ ‡fdd„}t d¡ ddd¡}t|jƒD ]}|||ƒ q0|j}t|jƒD ]}|||ƒ qP|d d d… }t|jƒD ]}|||ƒ qxt dg¡ d¡}t|jƒD ]}|||ƒ q¤t d	d
d
d	g¡}t|jƒD ]}|||ƒ qÐ|d d d… }t|jƒD ]}|||ƒ qød S )Nc                    s`   t | ƒ}ˆj ˆ |t |ƒ|jf¡}t | ¡}t | ¡}ˆ ||dƒ | ||d¡ ˆ ||¡ d S )Né{   )r   rS   rœ   rH   r*   rc   rW   rX   )r   r    rd   r   r]   r‹   rž   r   r   rŸ   K  s    

z9TestArrayIterators.test_array_flat_setitem.<locals>.checkr   rn   rl   rm   r    r   r%   r   )	r#   r*   rI   r‰   r¡   rM   ry   rx   rw   r¢   r   rž   r   Útest_array_flat_setitemH  s(    
z*TestArrayIterators.test_array_flat_setitemc                    sp   t ‰ ‡ ‡fdd„}t d¡ ddd¡}||ƒ |j}||ƒ |d d d… }||ƒ t dg¡ d¡}||ƒ d S )	Nc                    s2   ˆj  ˆ t| ƒf¡}ˆ | ƒ}ˆ | | ¡|¡ d S r   )rS   rœ   r   rX   rW   )r   r   r]   rž   r   r   rŸ   l  s    z5TestArrayIterators.test_array_flat_len.<locals>.checkr   rn   rl   rm   r    r   )r)   r*   rI   r‰   ry   rx   )rT   rŸ   r   r   rž   r   Útest_array_flat_leni  s    z&TestArrayIterators.test_array_flat_lenc                 C   sB   t ttjgƒ}|j}tdƒ}|dƒ}|  | ¡ ¡ |  ||¡ d S ©Nrk   )r   rN   r   rK   rW   r•   ÚsumrX   ©rT   r[   r\   Úexpectr‹   r   r   r   Útest_array_flat_premature_freez  s    z1TestArrayIterators.test_array_flat_premature_freec                 C   s  t  d¡ dd¡}t|ƒ}|  |jd¡ |  |jd¡ |  |jj	¡ |  
||¡ | ¡ }|  |jj	¡ |  |jj¡ t|ƒ}|  |jd¡ |  
||¡ |d d d… }|  |jj	¡ |  |jj¡ t|ƒ}|  |jd¡ |  
||¡ t  dd	d	dg¡ d
¡}|  
|t|ƒ¡ d S )Nr   rn   rm   rl   r‘   r‚   r’   r%   r   r   )r*   rI   r‰   r   rŠ   r“   r”   r•   rt   ru   rj   r–   rs   rv   rw   rh   r   r   r   Útest_array_ndenumerate_2d‚  s(    z,TestArrayIterators.test_array_ndenumerate_2dc                 C   sà   t jdt jd}| dd¡}tjtjddd}|  ||¡ tjtjddd}|  ||¡ tjtjddd}|  ||¡ | dd¡}tjtjddd}|  ||¡ tjtjddd}|  ||¡ tjtjddd}|  ||¡ d S r˜   )r*   rb   r™   r‰   r   rš   rj   ri   rh   r   r   r   Útest_array_ndenumerate_emptyœ  s    z/TestArrayIterators.test_array_ndenumerate_emptyc                 C   sB   t ttjgƒ}|j}tdƒ}|dƒ}|  | ¡ ¡ |  ||¡ d S r§   )r   rO   r   rK   rW   r•   r¨   rX   r©   r   r   r   Ú%test_array_ndenumerate_premature_free­  s    z8TestArrayIterators.test_array_ndenumerate_premature_freec                 C   s€   t }t|tjtjgƒ}|j}|  |ddƒ|ddƒ¡ |  |ddƒ|ddƒ¡ |  |ddƒ|ddƒ¡ |  |ddƒ|ddƒ¡ d S )Nrm   rn   r   )r3   r   r   r™   rW   rX   ©rT   rf   r[   r\   r   r   r   Útest_np_ndindexµ  s    z"TestArrayIterators.test_np_ndindexc                 C   sf   t }tjdtjdd }|  |t|ƒ|¡ | d¡}|  |t|ƒ|¡ | d¡}|  |t|ƒ|¡ d S )Nr   rG   rˆ   )rn   rm   )rl   rl   rm   )r6   r*   rI   r™   rg   r   r‰   ©rT   rf   r   r   r   r   Útest_np_ndindex_array¾  s    

z(TestArrayIterators.test_np_ndindex_arrayc                 C   s(   t }t|g ƒ}|j}|  |ƒ |ƒ ¡ d S r   )r/   r   rW   rX   r¯   r   r   r   Útest_np_ndindex_emptyÇ  s    
z(TestArrayIterators.test_np_ndindex_emptyc                 C   s.   t }tjdtjdd }|  |t|ƒ|¡ d S )Nr   rG   rˆ   )rE   r*   rI   r™   rg   r   r±   r   r   r   Útest_iter_nextÍ  s    z!TestArrayIterators.test_iter_next)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rR   r^   r_   ra   re   rg   ri   rj   r{   rŒ   r   r—   r›   r£   r¥   r¦   r«   r¬   r­   r®   r°   r²   r³   r´   Ú__classcell__r   r   rU   r   rP   y   s2   
5
!		rP   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú
TestNdIterz
    Test np.nditer()
    c                 c   s   t  d¡V  t jdt jdV  t  d¡ t j¡V  t  d¡d d d… V  t  d¡ d¡}|V  |jd	d
V  t  d¡ d¡d d d… }|V  d S )Néd   éf   rG   rn   rq   rl   r   rŽ   r‚   rƒ   r   )rk   rn   )	r*   Zfloat32rx   Zint16rI   ÚastypeÚ	complex64r‰   rc   ©rT   r:   r   r   r   ÚinputsÙ  s    zTestNdIter.inputsc                 c   sR   t  d¡ t j¡V  t  d¡d d d… V  t  d¡ d¡}|V  |jddV  d S )Nrn   rq   rl   r   rŽ   r‚   rƒ   )r*   rI   r½   r¾   r‰   rc   r¿   r   r   r   Úbasic_inputsí  s
    zTestNdIter.basic_inputsc                 C   s   |   t|ƒt|ƒ||f¡ d S r   )rŠ   Úset)rT   r‹   r]   r   r   r   Úcheck_resultô  s    zTestNdIter.check_resultc                 C   s@   t }tdd|ƒ}|  ¡ D ] }||ƒ}||ƒ}|  ||¡ qd S ©NTr|   )r=   r   rÀ   rÃ   )rT   rZ   r\   r:   r]   r‹   r   r   r   Útest_nditer1÷  s    zTestNdIter.test_nditer1c                 C   sT   t }tdd|ƒ}t |  ¡ |  ¡ ¡D ](\}}|||ƒ}|||ƒ}|  ||¡ q&d S rÄ   )r?   r   Ú	itertoolsÚproductrÀ   rÃ   )rT   rZ   r\   r:   r>   r]   r‹   r   r   r   Útest_nditer2ÿ  s    

zTestNdIter.test_nditer2c           	      C   s`   t }tdd|ƒ}| j}t |ƒ |ƒ |ƒ ¡D ].\}}}||||ƒ}||||ƒ}|  ||¡ q,d S rÄ   )rB   r   rÁ   rÆ   rÇ   rÃ   )	rT   rZ   r\   rÀ   r:   r>   r@   r]   r‹   r   r   r   Útest_nditer3  s    zTestNdIter.test_nditer3c                    sf   t }tdd|ƒ‰ ˆ ¡  ‡ ‡fdd„}|t d¡t d¡ƒ t d¡ d¡}t d¡}|||ƒ d S )	NTr|   c              	      s6   ˆ  t¡}ˆ | |ƒ W 5 Q R X ˆ dt|jƒ¡ d S )Nz(operands could not be broadcast together)ÚassertRaisesÚ
ValueErrorZassertInÚstrÚ	exception)r:   r>   Zraises©r\   rT   r   r   Úcheck_incompatible  s
    ÿz2TestNdIter.test_errors.<locals>.check_incompatiblerl   rm   r   rŽ   )r?   r   Zdisable_leak_checkr*   rI   r‰   )rT   rZ   rÏ   r:   r>   r   rÎ   r   Útest_errors  s    
zTestNdIter.test_errorsN)rµ   r¶   r·   r¸   rÀ   rÁ   rÃ   rÅ   rÈ   rÉ   rÐ   r   r   r   r   rº   Ô  s   
rº   Ú__main__)&rÆ   Znumpyr*   Znumbar   r   Z
numba.corer   Znumba.core.compilerr   Znumba.tests.supportr   r   r   r	   Zunittestr   r   r   r   r!   r#   r'   r)   r-   r/   r3   r6   r=   r?   rB   rE   rN   rO   rP   rº   rµ   Úmainr   r   r   r   Ú<module>   s<     ]P
