o
    iE                     @   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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 )0    N)jitnjittypeof)types)TestCaseMemoryLeakMixinc                 C   s&   d}t | D ]
\}}||| 7 }q|S Nr   	enumerate)arrtotaliv r   ^/home/ubuntu/transcripts/venv/lib/python3.10/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   s"   t | D ]	\}}||f  S d S r   npndenumerate)r   r   r   r   r   r   array_ndenumerate_zero_dim-   s   r,   c                 C   s8   d}t | D ]\\}}}||d |d  |  }q|S r#   r)   )r   r%   r   jr   r   r   r   array_ndenumerate_sum2   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_empty8   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_arrayE   s   r7   c                 C   s&   g }t | D ]	}||  q|S r   r*   nditerappenditem)aresur   r   r   
np_nditer1M   s   r?   c                 C   s6   g }t | |fD ]\}}|| | f q	|S r   r8   )r<   br=   r>   r   r   r   r   
np_nditer2S   s   rA   c                 C   s@   g }t | ||fD ]\}}}|| | | f q
|S r   r8   )r<   r@   cr=   r>   r   wr   r   r   
np_nditer3Y   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_freen   
   

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_freeu   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|   d S r   )superrT   setUpself	__class__r   r   rV         zTestArrayIterators.setUpc                 C   2   t }tt|f|}||}| ||| d S r   )r   r   r   assertPreciseEqualrX   r   pyfunc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   check_array_iter_items   rc   z)TestArrayIterators.check_array_iter_itemsc                 C   s<   t }tt|t|f|}|||}| |||| d S r   )r   r   r   r]   )rX   r   indexr_   r`   ra   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 rI   )	r*   zerosrP   rK   copyr   r   r   r]   )rX   r   arrtyr   nb_outr`   r   r   r   check_array_flat   s   

z#TestArrayIterators.check_array_flatc                 C   s&   t |f|}| |||| d S r   )r   r]   )rX   r   ri   funcr`   r   r   r   check_array_unary   s   z$TestArrayIterators.check_array_unaryc                 C   s   |  ||t d S r   )rm   r.   rX   r   ri   r   r   r   check_array_ndenumerate_sum   r[   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$   rq      )      rp   )      	   )r*   rL   rb   rd   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   )rq   rs   rt   Forder@   )rt   rw   rq   rq   c                 S   s*   g }| D ]}| ||jj|jjf q|S r   )r:   rz   r{   r|   )r   r   subr   r   r   
flag_check   s   zDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_check
   )rq   ru   r   )
r   r*   rL   reshapepy_funcr]   assertEqualr'   testingassert_allclose)rX   r   r   ra   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   rs   rt   r$   rq   rr   rq   rq   )r*   rL   r   rf   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   rt   rq   rs   Cr   Arr   )rq   rq   rq   )r*   rL   r   r   r   ndimlayout
assertTruerz   r{   rk   	transposery   r|   r}   rn   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   r]   r   ri   r`   cresr   ra   rW   r   r   check  s
   

z7TestArrayIterators.test_array_flat_empty.<locals>.checkr   rJ   rq   r   r   r   r   r*   rg   int32r   r   ArrayrX   r   r   ri   r   rW   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   ra   r`   r_   rX   r   r   r   6  s   
z9TestArrayIterators.test_array_flat_getitem.<locals>.checkr   rt   rq   rs   *   r   rr   )
r   r   r*   rL   r   rangerP   r   r~   r}   rX   r   r   r   r   r   r   test_array_flat_getitem2  s,   z*TestArrayIterators.test_array_flat_getitemc                    r   )
Nc                    s<   t | }t | }||d  ||d || d S )N{   )r*   rh   r]   )r   r   ra   r   r   r   r   r   R  s
   

z9TestArrayIterators.test_array_flat_setitem.<locals>.checkr   rt   rq   rs   r   r   rr   )
r"   r   r*   rL   r   r   rP   r   r~   r}   r   r   r   r   test_array_flat_setitemN  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   )r]   )r   ra   r   r   r   r   r  s   z5TestArrayIterators.test_array_flat_len.<locals>.checkr   rt   rq   rs   r   r   )r(   r   r*   rL   r   r   r~   )rX   r   r   r   r   r   test_array_flat_lenn  s   z&TestArrayIterators.test_array_flat_lenc                 C   >   t tjft}td}|d}| |  | || d S Nrp   )r   r   rN   rQ   r   sumr]   rX   r`   expectr   r   r   r   test_array_flat_premature_free  
   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   rt   rs   rq   r   r   r   rr   r   )r*   rL   r   r   r   r   r   r   rz   r{   ro   r   ry   r|   r}   rn   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   rJ   rq   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   rN   rS   r   r   r]   r   r   r   r   %test_array_ndenumerate_premature_free  r   z8TestArrayIterators.test_array_ndenumerate_premature_freec                 C   sV   t }t|}td}||}||}| || | |d d | |d d d S )Na   r   r   r$   )r,   r   r*   r~   r]   r   )rX   rl   r`   r   ra   r   r   r   r   test_array_ndenumerate_zero_dim  s   
z2TestArrayIterators.test_array_ndenumerate_zero_dimc                 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 )Nrs   rt   r   )r4   r   r   r   r]   rX   rl   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   rJ   r   )rt   rs   )rq   rq   rs   )r7   r*   rL   r   rm   r   r   rX   rl   r   r   r   r   test_np_ndindex_array  s   

z(TestArrayIterators.test_np_ndindex_arrayc                 C   s$   t }td|}| | |  d S )Nr   )r0   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   rm   r   r   r   r   r   test_iter_next  s   z!TestArrayIterators.test_iter_nextr   )__name__
__module____qualname____doc__rV   rb   rd   rf   rk   rm   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   rY   r   rT   }   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   rt   rw   rq   r   r   r   r   r   )rp   rt   )	r*   float32r~   int16rL   astype	complex64r   rh   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 )Nrt   rw   rq   r   r   r   r   )r*   rL   r   r   r   rh   r   r   r   r   basic_inputs  s   zTestNdIter.basic_inputsc                 C   s   |  t|t|||f d S r   )r   set)rX   r   ra   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_   r`   r<   ra   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_   r`   r<   r@   ra   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_   r`   r   r<   r@   rB   ra   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r`   rX   r   r   check_incompatible-  s   z2TestNdIter.test_errors.<locals>.check_incompatiblerq   rs   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   r   
numba.corer   numba.tests.supportr   r   unittestr   r   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@      nP