o
    8ήcD                     @   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re%  dS 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   G/tmp/pip-target-vg8gfxp4/lib/python/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      
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+   r"   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   r0   c                 C   s6   d}d}t | |D ]\}}||d |d   }q
|S r%   )r+   r/   )xyr'   nr   r-   r   r   r   
np_ndindex:   s
   r4   c                 C   sD   d}d}t | jD ]}t|D ]\}}||d |d   }qq
|S r%   )r+   r/   shaper   )r   r'   r3   indicesr   r-   r   r   r   np_ndindex_arrayA   s   r7   c                 C   s&   g }t | D ]	}||  q|S r   r+   nditerappenditem)aresur   r   r   
np_nditer1I   s   r?   c                 C   s6   g }t | |fD ]\}}|| | f q	|S r   r8   )r<   br=   r>   r   r   r   r   
np_nditer2O   s   rA   c                 C   s@   g }t | ||fD ]\}}}|| | | f q
|S r   r8   )r<   r@   cr=   r>   r   wr   r   r   
np_nditer3U   s   rD   c                 C   s&   t | }t | }t|t|t|fS r   )r   next)r   itit2r   r   r   	iter_next[   s   rH   c                 C   s:   t | }t j|t jd}t|jD ]\}}|||< q|S Ndtype)r+   arange
zeros_likeintpr   r   sizer1   r=   r   r   r   r   r   array_flat_premature_freej   
   

rQ   c                 C   s:   t | }t j|t jd}t |D ]\}}|||< q|S rI   )r+   rL   rM   rN   r,   rO   r   r   r    array_ndenumerate_premature_freeq   rR   rS   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   )superrT   setUpr   ccache)self	__class__r   r   rV   ~   s   zTestArrayIterators.setUpc                 C   6   t }t|t|g}|j}||}| ||| d S r   )r   r   r   entry_pointassertPreciseEqualrX   r   pyfunccrescfuncexpectedr   r   r   check_array_iter_1d   
   z&TestArrayIterators.check_array_iter_1dc                 C   r[   r   )r   r   r   r\   r]   r^   r   r   r   check_array_iter_items   rd   z)TestArrayIterators.check_array_iter_itemsc                 C   s@   t }t|t|t|g}|j}|||}| |||| d S r   )r   r   r   r\   r]   )rX   r   indexr_   r`   ra   rb   r   r   r   check_array_view_iter   s
   
z(TestArrayIterators.check_array_view_iterNc                 C   sf   t j|j|jd}| }|d u rt|}tt|t|g}|j}t|| ||| | 	|| d S rI   )
r+   zerosrP   rK   copyr   r   r   r\   r]   )rX   r   arrtyr   nb_outr`   ra   r   r   r   check_array_flat   s   

z#TestArrayIterators.check_array_flatc                 C   s*   t ||g}|j}| |||| d S r   )r   r\   r]   )rX   r   rj   funcr`   ra   r   r   r   check_array_unary   s   z$TestArrayIterators.check_array_unaryc                 C      |  ||t d S r   )rn   r(   rX   r   rj   r   r   r   check_array_flat_sum      z'TestArrayIterators.check_array_flat_sumc                 C   ro   r   )rn   r.   rp   r   r   r   check_array_ndenumerate_sum   rr   z.TestArrayIterators.check_array_ndenumerate_sumc                 C   s   t d}| | | | |d d d }| |jj | |jj | | | | t g d}| | | | t 	g dg dg dg}| | | |j
 d S )N      r&   r   r   r&   )r&   ru      )      rt   )      	   )r+   rL   rc   re   assertFalseflagsc_contiguousf_contiguousbool_arrayTrX   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nopythonc                 S   s*   g }| D ]}|D ]	}| |  qq|S r   )r:   ravel)r   ty1y2r   r   r   foo   s   z=TestArrayIterators.test_array_iter_yielded_order.<locals>.foo   )ru   rw   rx   Forder@   )rx   r{   ru   ru   c                 S   s*   g }| D ]}| ||jj|jjf q|S r   )r:   r~   r   r   )r   r   subr   r   r   
flag_check   s   zDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_check
   )ru   ry   r   )
r   r+   rL   reshapepy_funcr]   assertEqualr)   testingassert_allclose)rX   r   r   rb   gotr   ex_arre_flag_ce_flag_fgo_arrg_flag_cg_flag_fr   r   r   test_array_iter_yielded_order   s:   

,
,
,


z0TestArrayIterators.test_array_iter_yielded_orderc                 C   sh   t dd}| |d | |jd |d d d }| |d t g dd}| |d d S )N   rw   rx   r&   ru   rv   ru   ru   )r+   rL   r   rg   r   r   r   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 g dd d	}| 
| d S )
Nr   rx   ru   rw   Cr   Arv   )ru   ru   ru   )r+   rL   r   r   r   ndimlayout
assertTruer~   r   rl   	transposer}   r   r   rp   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   rJ   ru   r   )r   r   r   )r+   rh   int32r   r   Arrayrq   rp   r   r   r   test_array_flat_empty  s   z(TestArrayIterators.test_array_flat_emptyc                      t   fdd}tdddd}t|jD ]}||| q|j}t|jD ]}||| q(|d d d }t|jD ]}||| q<tdgd}t|jD ]}||| qRtg d	}t|jD ]}||| qf|d d d }t|jD ]}||| qzd S )
Nc                    s<   j  t| t|f} | |}|| || d S r   )rW   compiler   r   r\   )r   r    crrb   r_   rX   r   r   check/  s   
z9TestArrayIterators.test_array_flat_getitem.<locals>.checkr   rx   ru   rw   *   r   rv   )	r!   r+   rL   r   rangerP   r   r   r   rX   r   r   r   r   r   r   test_array_flat_getitem,  s*   z*TestArrayIterators.test_array_flat_getitemc                    r   )
Nc                    s`   t | }j |t ||jf}t| }t| } ||d |||d || d S )N{   )r   rW   r   rK   r+   ri   r\   r]   )r   r    rj   r   rb   r   r   r   r   r   K  s   

z9TestArrayIterators.test_array_flat_setitem.<locals>.checkr   rx   ru   rw   r   r   rv   )	r$   r+   rL   r   r   rP   r   r   r   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   )rW   r   r   r]   r\   )r   r   rb   r   r   r   r   l  s   z5TestArrayIterators.test_array_flat_len.<locals>.checkr   rx   ru   rw   r   r   )r*   r+   rL   r   r   r   )rX   r   r   r   r   r   test_array_flat_leni  s   z&TestArrayIterators.test_array_flat_lenc                 C   B   t ttjg}|j}td}|d}| |  | || d S Nrt   )r   rQ   r   rN   r\   r   sumr]   rX   r`   ra   expectr   r   r   r   test_array_flat_premature_freez     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 g dd	}| 
|t| d S )
Nr   rx   rw   ru   r   r   r   rv   r   )r+   rL   r   r   r   r   r   r   r~   r   rs   r   r}   r   r   rp   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+   rh   r   r   r   r   rs   rq   rp   r   r   r   test_array_ndenumerate_empty  s   z/TestArrayIterators.test_array_ndenumerate_emptyc                 C   r   r   )r   rS   r   rN   r\   r   r   r]   r   r   r   r   %test_array_ndenumerate_premature_free  r   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 )Nrw   rx   r   )r4   r   r   r   r\   r]   rX   rm   r`   ra   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   rJ   r   )rx   rw   )ru   ru   rw   )r7   r+   rL   r   rn   r   r   rX   rm   r   r   r   r   test_np_ndindex_array  s   

z(TestArrayIterators.test_np_ndindex_arrayc                 C   s(   t }t|g }|j}| | |  d S r   )r0   r   r\   r]   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   rJ   r   )rH   r+   rL   r   rn   r   r   r   r   r   test_iter_next  s   z!TestArrayIterators.test_iter_nextr   )__name__
__module____qualname____doc__rV   rc   re   rg   rl   rn   rq   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   rY   r   rT   y   s4    
5
!		rT   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 )Nd   f   rJ   rx   r{   ru   r   r   r   r   r   )rt   rx   )	r+   float32r   int16rL   astype	complex64r   ri   rX   r<   r   r   r   inputs  s   
zTestNdIter.inputsc                 c   sT    t dt jV  t dd d d V  t dd}|V  |jddV  d S )Nrx   r{   ru   r   r   r   r   )r+   rL   r   r   r   ri   r   r   r   r   basic_inputs  s   zTestNdIter.basic_inputsc                 C   s   |  t|t|||f d S r   )r   set)rX   r   rb   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   )rX   r_   ra   r<   rb   r   r   r   r   test_nditer1  s   zTestNdIter.test_nditer1c                 C   sT   t }tdd|}t|  |  D ]\}}|||}|||}| || qd S r   )rA   r   	itertoolsproductr   r   )rX   r_   ra   r<   r@   rb   r   r   r   r   test_nditer2  s   

zTestNdIter.test_nditer2c           	      C   s`   t }tdd|}| j}t| | | D ]\}}}||||}||||}| || qd S r   )rD   r   r   r   r   r   )	rX   r_   ra   r   r<   r@   rB   rb   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                    sJ    t} | | W d    n1 sw   Y  dt|j d S )Nz(operands could not be broadcast together)assertRaises
ValueErrorassertInstr	exception)r<   r@   raisesra   rX   r   r   check_incompatible  s   z2TestNdIter.test_errors.<locals>.check_incompatibleru   rw   r   r   )rA   r   disable_leak_checkr+   rL   r   )rX   r_   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   numpyr+   numbar   r   
numba.corer   numba.core.compilerr   numba.tests.supportr   r   r   r	   unittestr   r   r   r   r!   r$   r(   r*   r.   r0   r4   r7   r?   rA   rD   rH   rQ   rS   rT   r   r   mainr   r   r   r   <module>   s@      ]P