o
    1&iWF                     @   s  d dl Z d dlZd dlmZmZmZ d dlmZ d dl	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njittypeof)types)TestCaseMemoryLeakMixinc                 C   s&   d}t | D ]
\}}||| 7 }q|S Nr   	enumerate)arrtotaliv r   KC:\wamp64\www\opt\env\Lib\site-packages\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_empty3   s   r.   c                 C   s6   d}d}t | |D ]\}}||d |d   }q
|S r#   )r)   r-   )xyr%   nr   r+   r   r   r   
np_ndindex9   s
   r2   c                 C   sD   d}d}t | jD ]}t|D ]\}}||d |d   }qq
|S r#   )r)   r-   shaper
   )r   r%   r1   indicesr   r+   r   r   r   np_ndindex_array@   s   r5   c                 C   s&   g }t | D ]	}||  q|S r   r)   Znditerappenditem)aresur   r   r   
np_nditer1H   s   r<   c                 C   s6   g }t | |fD ]\}}|| | f q	|S r   r6   )r9   br:   r;   r   r   r   r   
np_nditer2N   s   r>   c                 C   s@   g }t | ||fD ]\}}}|| | | f q
|S r   r6   )r9   r=   cr:   r;   r   wr   r   r   
np_nditer3T   s   rA   c                 C   s&   t | }t | }t|t|t|fS r   )r   next)r   itZit2r   r   r   	iter_nextZ   s   rD   c                 C   s:   t | }t j|t jd}t|jD ]\}}|||< q|S Ndtype)r)   arange
zeros_likeintpr
   r   sizer/   r:   r   r   r   r   r   array_flat_premature_freei   
   

rM   c                 C   s:   t | }t j|t jd}t |D ]\}}|||< q|S rE   )r)   rH   rI   rJ   r*   rK   r   r   r    array_ndenumerate_premature_freep   rN   rO   c                       s   e Zd ZdZ fddZdd Zdd Zdd	 Zd1d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  ZS )2TestArrayIteratorsz1
    Test array.flat, np.ndenumerate(), etc.
    c                    s   t t|   d S r   )superrP   setUpself	__class__r   r   rR   }      zTestArrayIterators.setUpc                 C   2   t }tt|f|}||}| ||| d S r   )r   r   r   assertPreciseEqualrT   r   pyfunccfuncexpectedr   r   r   check_array_iter_1d      z&TestArrayIterators.check_array_iter_1dc                 C   rX   r   )r   r   r   rY   rZ   r   r   r   check_array_iter_items   r_   z)TestArrayIterators.check_array_iter_itemsc                 C   s<   t }tt|t|f|}|||}| |||| d S r   )r   r   r   rY   )rT   r   indexr[   r\   r]   r   r   r   check_array_view_iter   s   
z(TestArrayIterators.check_array_view_iterNc                 C   sb   t j|j|jd}| }|d u rt|}t|t|ft}t|| ||| | || d S rE   )	r)   zerosrL   rG   copyr   r   r   rY   )rT   r   arrtyr   Znb_outr\   r   r   r   check_array_flat   s   

z#TestArrayIterators.check_array_flatc                 C   s&   t |f|}| |||| d S r   )r   rY   )rT   r   re   funcr\   r   r   r   check_array_unary   s   z$TestArrayIterators.check_array_unaryc                 C   s   |  ||t d S r   )rh   r,   rT   r   re   r   r   r   check_array_ndenumerate_sum   rW   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$   rl      )      rk   )      	   )r)   rH   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   )r7   Zravel)r   ty1y2r   r   r   foo   s   z=TestArrayIterators.test_array_iter_yielded_order.<locals>.foo   )rl   rn   ro   Forder@   )ro   rr   rl   rl   c                 S   s*   g }| D ]}| ||jj|jjf q|S r   )r7   ru   rv   rw   )r   r   subr   r   r   
flag_check   s   zDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_check
   )rl   rp   r   )
r   r)   rH   reshapepy_funcrY   assertEqualr'   testing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   sh   t dd}| |d | |jd |d d d }| |d t g dd}| |d d S )N   rn   ro   r$   rl   rm   rl   rl   )r)   rH   r   rb   rz   rx   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   ro   rl   rn   Cr   Arm   )rl   rl   rl   )r)   rH   r   r   r   ndimlayout
assertTrueru   rv   rf   	transposert   rw   rx   ri   r   r   r   test_array_flat_3d   s$   


z%TestArrayIterators.test_array_flat_3dc                    s    fdd}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 )
Nc                    s>   t |ft}|j|f }|| }|| } || d S r   )r   r&   	overloadsentry_pointr   rY   r   re   r\   Zcresr   r]   rS   r   r   check  s
   

z7TestArrayIterators.test_array_flat_empty.<locals>.checkr   rF   rl   r   r   r   r   r)   rc   int32r   r   ArrayrT   r   r   re   r   rS   r   test_array_flat_empty  s    




z(TestArrayIterators.test_array_flat_emptyc                      t t  fdd}tdddd}t|jD ]}||| q|j}t|jD ]}||| q-|d d d }t|jD ]}||| qAtdgd}t|jD ]}||| qWt	g d	}t|jD ]}||| qk|d d d }t|jD ]}||| qd S )
Nc                    s    | |}  | || d S r   )r   )r   r   r]   r\   r[   rT   r   r   r   1  s   
z9TestArrayIterators.test_array_flat_getitem.<locals>.checkr   ro   rl   rn   *   r   rm   )
r   r   r)   rH   r   rangerL   rz   ry   rx   rT   r   r   r   r   r   r   test_array_flat_getitem-  s,   z*TestArrayIterators.test_array_flat_getitemc                    r   )
Nc                    s<   t | }t | }||d  ||d || d S )N{   )r)   rd   rY   )r   r   r]   r   r   r   r   r   M  s
   

z9TestArrayIterators.test_array_flat_setitem.<locals>.checkr   ro   rl   rn   r   r   rm   )
r"   r   r)   rH   r   r   rL   rz   ry   rx   r   r   r   r   test_array_flat_setitemI  s,   z*TestArrayIterators.test_array_flat_setitemc                    sz   t tt   fdd}tdddd}|| |j}|| |d d d }|| tdgd}|| d S )	Nc                    s   | }  | | d S r   )rY   )r   r]   r   r   r   r   m  s   z5TestArrayIterators.test_array_flat_len.<locals>.checkr   ro   rl   rn   r   r   )r(   r   r)   rH   r   rz   ry   )rT   r   r   r   r   r   test_array_flat_leni  s   z&TestArrayIterators.test_array_flat_lenc                 C   >   t tjft}td}|d}| |  | || d S Nrk   )r   r   rJ   rM   r   sumrY   rT   r\   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   ro   rn   rl   r   r   r   rm   r   )r)   rH   r   r   r   r   r   r   ru   rv   rj   r   rt   rw   rx   ri   r   r   r   test_array_ndenumerate_2d  s(   z,TestArrayIterators.test_array_ndenumerate_2dc                 C   s   dd }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 )
Nc                 S   s@   t |ft}|j|f }|| }|| }tj|| d S r   )r   r,   r   r   r   r)   r   r   r   r   r   r   r     s
   

z>TestArrayIterators.test_array_ndenumerate_empty.<locals>.checkr   rF   rl   r   r   r   r   r   r   r   r   r   test_array_ndenumerate_empty  s    




z/TestArrayIterators.test_array_ndenumerate_emptyc                 C   r   r   )r   r   rJ   rO   r   r   rY   r   r   r   r   %test_array_ndenumerate_premature_free  r   z8TestArrayIterators.test_array_ndenumerate_premature_freec                 C   s|   t }ttjtjf|}| |dd|dd | |dd|dd | |dd|dd | |dd|dd d S )Nrn   ro   r   )r2   r   r   r   rY   rT   rg   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   rF   r   )ro   rn   )rl   rl   rn   )r5   r)   rH   r   rh   r   r   rT   rg   r   r   r   r   test_np_ndindex_array  s   

z(TestArrayIterators.test_np_ndindex_arrayc                 C   s$   t }td|}| | |  d S )Nr   )r.   r   rY   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   rF   r   )rD   r)   rH   r   rh   r   r   r   r   r   test_iter_next  s   z!TestArrayIterators.test_iter_nextr   )__name__
__module____qualname____doc__rR   r^   r`   rb   rf   rh   rj   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   rU   r   rP   x   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 )Nd   f   rF   ro   rr   rl   r   r   r   r   r   )rk   ro   )	r)   Zfloat32ry   Zint16rH   astype	complex64r   rd   rT   r9   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 )Nro   rr   rl   r   r   r   r   )r)   rH   r   r   r   rd   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   r[   r\   r9   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   r[   r\   r9   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   )rA   r   r   r   r   r   )	rT   r[   r\   r   r9   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                    sJ    t} | | W d    n1 sw   Y  dt|j d S )Nz(operands could not be broadcast together)assertRaises
ValueErrorZassertInstr	exception)r9   r=   Zraisesr\   rT   r   r   check_incompatible  s   z2TestNdIter.test_errors.<locals>.check_incompatiblerl   rn   r   r   )r>   r   Zdisable_leak_checkr)   rH   r   )rT   r[   r   r9   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)   Znumbar   r   r   Z
numba.corer   Znumba.tests.supportr   r   Zunittestr   r   r   r   r   r"   r&   r(   r,   r.   r2   r5   r<   r>   rA   rD   rM   rO   rP   r   r   mainr   r   r   r   <module>   s>      dP