
    ܙdD                     4   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 Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z! G d dee          Z" G d dee          Z#e$dk    r ej%                     dS dS )    N)jittypeof)types)compile_isolated)TestCaseCompilationCacheMemoryLeakMixintagc                 D    d}t          |           D ]\  }}|||z  z  }|S Nr   	enumerate)arrtotalivs       @lib/python3.11/site-packages/numba/tests/test_array_iterators.py
array_iterr      s4    E#  1QL    c                 :    t          t          |                     S N)listiterr   s    r   array_iter_itemsr      s    S		??r   c                 P    d}t          | |                   D ]\  }}|||z  z  }|S r   r   )r   idxr   r   r   s        r   array_view_iterr      s:    E#c(##  1QLr   c                 D    t          | j                  D ]
\  }}|||<   d S r   r   flat)r   outr   r   s       r   
array_flatr#      s4    #(##  1A r   c                     | j         |         S r   r!   )r   inds     r   array_flat_getitemr'      s    8C=r   c                     || j         |<   d S r   r%   )r   r&   vals      r   array_flat_setitemr*   "   s    CHSMMMr   c                 T    d}t          | j                  D ]\  }}||dz   |z  z   }|S Nr      r    )r   sr   r   s       r   array_flat_sumr/   %   s<    	A#(##  1Q!OHr   c                 *    t          | j                  S r   )lenr!   r   s    r   array_flat_lenr2   +   s    sx==r   c                 f    d}t          j        |           D ]\  \  }}}||dz   |dz   z  |z  z   }|S r,   )npndenumerate)r   r.   r   jr   s        r   array_ndenumerate_sumr7   .   sK    	A^C(( & &	AQ1q5!A%%Hr   c                  h    d} t          j        d          D ]}| | t          |          z   dz   z  } | S )Nr    r-   )r4   ndindexr1   )r.   r&   s     r   np_ndindex_emptyr;   4   s>    	Az"~~  	QS\AHr   c                 `    d}d}t          j        | |          D ]\  }}||dz   |dz   z  z   }|S r,   )r4   r:   )xyr.   nr   r6   s         r   
np_ndindexr@   :   sI    	A	A
1a   " "1Q1q5!!Hr   c                     d}d}t          j        | j                  D ]%}t          |          D ]\  }}||dz   |dz   z  z   }&|S r,   )r4   r:   shaper   )r   r.   r?   indicesr   r6   s         r   np_ndindex_arrayrD   A   se    	A	A:ci(( & &g&& 	& 	&DAqQUq1u%%AA	&Hr   c                     g }t          j        |           D ])}|                    |                                           *|S r   r4   nditerappenditem)aresus      r   
np_nditer1rM   I   s@    
CYq\\  

16688Jr   c                     g }t          j        | |f          D ]@\  }}|                    |                                |                                f           A|S r   rF   )rJ   brK   rL   r   s        r   
np_nditer2rP   O   sW    
C	1a&!! ) )1

AFFHHaffhh'((((Jr   c                     g }t          j        | ||f          D ]T\  }}}|                    |                                |                                |                                f           U|S r   rF   )rJ   rO   crK   rL   r   ws          r   
np_nditer3rT   U   se    
C9aAY'' 3 31a

AFFHHaffhh12222Jr   c                     t          |           }t          |           }t          |          t          |          t          |          fS r   )r   next)r   itit2s      r   	iter_nextrY   [   s7    	cB
s))C88T"XXtCyy((r   c                     t          j        |           }t          j        |t           j                  }t	          |j                  D ]
\  }}|||<   |S Ndtype)r4   arange
zeros_likeintpr   r!   sizer=   rK   r   r   s        r   array_flat_premature_freerc   j   sR    
	$A
-
)
)
)C!&!!  1AJr   c                     t          j        |           }t          j        |t           j                  }t          j        |          D ]
\  }}|||<   |S r[   )r4   r^   r_   r`   r5   ra   s        r    array_ndenumerate_premature_freere   q   sR    
	$A
-
)
)
)Cq!!  1AJr   c                        e Zd ZdZ fdZd Zd Zd ZddZd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )TestArrayIteratorsz1
    Test array.flat, np.ndenumerate(), etc.
    c                 |    t          t          |                                            t                      | _        d S r   )superrg   setUpr   ccache)self	__class__s    r   rj   zTestArrayIterators.setUp~   s1     $''--///&((r   c                     t           }t          |t          |          g          }|j        } ||          }|                      ||          |           d S r   )r   r   r   entry_pointassertPreciseEqualrl   r   pyfunccrescfuncexpecteds         r   check_array_iter_1dz&TestArrayIterators.check_array_iter_1d   sW    66 6#;;c

H55555r   c                     t           }t          |t          |          g          }|j        } ||          }|                      ||          |           d S r   )r   r   r   ro   rp   rq   s         r   check_array_iter_itemsz)TestArrayIterators.check_array_iter_items   sW    !66 6#;;c

H55555r   c                     t           }t          |t          |          t          |          g          }|j        } |||          }|                      |||          |           d S r   )r   r   r   ro   rp   )rl   r   indexrr   rs   rt   ru   s          r   check_array_view_iterz(TestArrayIterators.check_array_view_iter   sh     fUmm(DEE 6#u%%c5 1 18<<<<<r   Nc                 J   t          j        |j        |j                  }|                                }|t          |          }t          t          |t          |          g          }|j        }t          ||            |||           | 	                    ||           d S r[   )
r4   zerosrb   r]   copyr   r   r#   ro   rp   )rl   r   arrtyr"   nb_outrs   rt   s          r   check_array_flatz#TestArrayIterators.check_array_flat   s    hsxsy111=3KKE
UF3KK,@AA 3c6V,,,,,r   c                     t          ||g          }|j        }|                      ||           ||                     d S r   )r   ro   rp   )rl   r   r   funcrs   rt   s         r   check_array_unaryz$TestArrayIterators.check_array_unary   sG    ug.. c

DDII66666r   c                 >    |                      ||t                     d S r   )r   r/   rl   r   r   s      r   check_array_flat_sumz'TestArrayIterators.check_array_flat_sum   s     sE>:::::r   c                 >    |                      ||t                     d S r   )r   r7   r   s      r   check_array_ndenumerate_sumz.TestArrayIterators.check_array_ndenumerate_sum   s!    sE+@AAAAAr   c                    t          j        d          }|                     |           |                     |           |d d d         }|                     |j        j                   |                     |j        j                   |                     |           |                     |           t          j        g d          }|                     |           |                     |           t          j	        g dg dg dg          }|                     |           |                     |j
                   d S )N      r-   r   r   r-   )r-   r      )      r   )      	   )r4   r^   rv   rx   assertFalseflagsc_contiguousf_contiguousbool_arrayTrl   r   s     r   test_array_iterz"TestArrayIterators.test_array_iter   s-   ill  %%%##C(((##A#h/000/000  %%%##C(((h|||$$  %%%##C(((h			999iii899##C(((##CE*****r   c                 |   t          d          d             }t          j        d                              dd          }|                    |          } ||          }|                     ||           t          j        d                              d	d          d d d
d d d d f         }|                    |          } ||          }|                     ||           t          j        d                              d	d          d d d d d
d d f         }|                    |          } ||          }|                     ||           t          j        d                              d	d          d d d d d d d
f         }|                    |          } ||          }|                     ||           t          d          d             }t          j        d                              dd          }|                    |          } ||          }|                     t          |          t          |                     |d         \  }}}|d         \  }	}
}t          j        	                    ||	           |                     ||
           |                     ||           d S )NTnopythonc                 l    g }| D ].}|D ])}|                     |                                           */|S r   )rH   ravel)r   ty1y2s       r   fooz=TestArrayIterators.test_array_iter_yielded_order.<locals>.foo   sL    A ) ) ) )BHHRXXZZ(((()Hr      )r   r   r   Forder@   )r   r   r   r   c                 l    g }| D ].}|                     ||j        j        |j        j        f           /|S r   )rH   r   r   r   )r   r"   subs      r   
flag_checkzDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_check   sL    C 5 5

C!7I24 5 5 5 5Jr   
   )r   r   r   )
r   r4   r^   reshapepy_funcrp   assertEqualr1   testingassert_allclose)rl   r   r   ru   gotr   ex_arre_flag_ce_flag_fgo_arrg_flag_cg_flag_fs               r   test_array_iter_yielded_orderz0TestArrayIterators.test_array_iter_yielded_order   s   	d				 	 
		 imm##IS#99;;s##c#hh#... imm##IS#99##A#qqq!!!)D;;s##c#hh#... imm##IS#99!!!SSqS!!!)D;;s##c#hh#... imm##IS#99!!!QQQ!)D;;s##c#hh#...	d				 	 
		 imm##F##66%%c**jooXC111%-a["(%(V"(

""662228,,,8,,,,,r   c                 v   t          j        d                              d          }|                     |d           |                     |j        d           |d d d         }|                     |d           t          j        g d                              d          }|                     |d           d S )N   r   r   r-   r   r   r   r   )r4   r^   r   r{   r   r   r   s     r   test_array_view_iterz'TestArrayIterators.test_array_view_iter   s    imm##F++""3***""35!,,,##A#h""3***h|||$$,,V44""3*****r   c                    t          j        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          j        g ddz                                d	          }| 
                    |           d S )
Nr   r   r   r   Cr   Ar   )r   r   r   )r4   r^   r   r   r   ndimlayout
assertTruer   r   r   	transposer   r   r   r   s      r   test_array_flat_3dz%TestArrayIterators.test_array_flat_3d   s   imm##Aq!,,sQ'''s+++	.///c"""mmoo/000	.///+S111c"""##A#h/000/000+S111c"""h|||a'((00;;c"""""r   c                 2   t          j        dt           j                  }|                    dd          }t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           |                    dd          }t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           d S Nr   r\   r   r   )r   r   r   )r4   r}   int32r   r   Arrayr   r   s      r   test_array_flat_emptyz(TestArrayIterators.test_array_flat_empty  sZ    hq)))kk!QEK3777!!#u---EK3777!!#u---EK3777!!#u---kk!QEK3777!!#u---EK3777!!#u---EK3777!!#u-----r   c                     t            fd}t          j        d                              ddd          }t	          |j                  D ]} |||           |j        }t	          |j                  D ]} |||           |d d d         }t	          |j                  D ]} |||           t          j        dg                              d          }t	          |j                  D ]} |||           t          j        g d          }t	          |j                  D ]} |||           |d d d         }t	          |j                  D ]} |||           d S )	Nc                     j                             t          |           t          |          f          } | |          }                    |                    | |          |           d S r   )rk   compiler   r   ro   )r   r&   crru   rr   rl   s       r   checkz9TestArrayIterators.test_array_flat_getitem.<locals>.check/  sf    $$VfSkk6#;;-GHHBvc3''HR^^C55x@@@@@r   r   r   r   r   *   r9   r   )	r'   r4   r^   r   rangerb   r   r   r   rl   r   r   r   rr   s   `   @r   test_array_flat_getitemz*TestArrayIterators.test_array_flat_getitem,  s   #	A 	A 	A 	A 	A 	A
 imm##Aq!,,sx 	 	AE#qMMMMesx 	 	AE#qMMMM##A#hsx 	 	AE#qMMMMhtnn$$R((sx 	 	AE#qMMMMh|||$$sx 	 	AE#qMMMM##A#hsx 	 	AE#qMMMM	 	r   c                     t            fd}t          j        d                              ddd          }t	          |j                  D ]} |||           |j        }t	          |j                  D ]} |||           |d d d         }t	          |j                  D ]} |||           t          j        dg                              d          }t	          |j                  D ]} |||           t          j        g d          }t	          |j                  D ]} |||           |d d d         }t	          |j                  D ]} |||           d S )	Nc                 J   t          |           }j                            |t          |          |j        f          }t	          j        |           }t	          j        |           } ||d           |                    ||d                               ||           d S )N{   )r   rk   r   r]   r4   r~   ro   rp   )r   r&   r   r   ru   r   rr   rl   s         r   r   z9TestArrayIterators.test_array_flat_setitem.<locals>.checkK  s    3KKE$$VeVC[[%+-NOOBws||H'#,,CF8S#&&&NN3S)))##C22222r   r   r   r   r   r   r9   r   )	r*   r4   r^   r   r   rb   r   r   r   r   s   `   @r   test_array_flat_setitemz*TestArrayIterators.test_array_flat_setitemH  s   #	3 	3 	3 	3 	3 	3 imm##Aq!,,sx 	 	AE#qMMMMesx 	 	AE#qMMMM##A#hsx 	 	AE#qMMMMhtnn$$R((sx 	 	AE#qMMMMh|||$$sx 	 	AE#qMMMM##A#hsx 	 	AE#qMMMM	 	r   c                 B    t            fd}t          j        d                              ddd          } ||           |j        } ||           |d d d         } ||           t          j        dg                              d          } ||           d S )Nc                     j                             t          |           f          } |           }                    |                    |           |           d S r   )rk   r   r   rp   ro   )r   r   ru   rr   rl   s      r   r   z5TestArrayIterators.test_array_flat_len.<locals>.checkl  sW    $$VfSkk^<<Bvc{{H##BNN3$7$7BBBBBr   r   r   r   r   r   r9   )r2   r4   r^   r   r   r   )rl   r   r   rr   s   `  @r   test_array_flat_lenz&TestArrayIterators.test_array_flat_leni  s    	C 	C 	C 	C 	C 	C
 imm##Aq!,,c


ec


##A#hc


htnn$$R((c




r   c                    t          t          t          j        g          }|j        }t          d          } |d          }|                     |                                           |                     ||           d S Nr   )r   rc   r   r`   ro   r   sumrp   rl   rs   rt   expectr   s        r   test_array_flat_premature_freez1TestArrayIterators.test_array_flat_premature_freez  sn     9EJ<HH *1--eAhh		""",,,,,r   c                    t          j        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          j        g d                              d	          }| 
                    |t          |                     d S )
Nr   r   r   r   r   r   r   r   r   )r4   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r   test_array_ndenumerate_2dz,TestArrayIterators.test_array_ndenumerate_2d  s   imm##Aq))sQ'''s+++	.///((e444mmoo/000	.///ss+++((e444##A#h/000/000ss+++((e444h|||$$,,V44((fSkk:::::r   c                 2   t          j        dt           j                  }|                    dd          }t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           |                    dd          }t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           t	          j        t          j        dd          }|                     ||           d S r   )r4   r}   r   r   r   r   r   r   r   s      r   test_array_ndenumerate_emptyz/TestArrayIterators.test_array_ndenumerate_empty  sX   hq)))kk!QEK3777((e444EK3777((e444EK3777((e444kk!QEK3777!!#u---EK3777!!#u---EK3777!!#u-----r   c                    t          t          t          j        g          }|j        }t          d          } |d          }|                     |                                           |                     ||           d S r   )r   re   r   r`   ro   r   r   rp   r   s        r   %test_array_ndenumerate_premature_freez8TestArrayIterators.test_array_ndenumerate_premature_free  sn     @5:,OO 1!44eAhh		""",,,,,r   c                    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 )Nr   r   r   )r@   r   r   r   ro   rp   rl   r   rs   rt   s       r   test_np_ndindexz"TestArrayIterators.test_np_ndindex  s    u{EK&@AA aTT!QZZ888aTT!QZZ888aTT!QZZ888aTT!QZZ88888r   c                    t           }t          j        dt          j                  dz   }|                     |t          |          |           |                    d          }|                     |t          |          |           |                    d          }|                     |t          |          |           d S )Nr   r\   r   )r   r   )r   r   r   )rD   r4   r^   r   r   r   r   rl   r   r   s      r   test_np_ndindex_arrayz(TestArrayIterators.test_np_ndindex_array  s    i"(+++b0sF3KK666kk&!!sF3KK666kk)$$sF3KK66666r   c                     t           }t          |g           }|j        }|                      |             |                       d S r   )r;   r   ro   rp   r   s       r   test_np_ndindex_emptyz(TestArrayIterators.test_np_ndindex_empty  sF    b)) 00000r   c                     t           }t          j        dt          j                  dz   }|                     |t          |          |           d S )Nr   r\   r   )rY   r4   r^   r   r   r   r   s      r   test_iter_nextz!TestArrayIterators.test_iter_next  sF    i"(+++b0sF3KK66666r   r   )__name__
__module____qualname____doc__rj   rv   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rm   s   @r   rg   rg   y   s        ) ) ) ) )6 6 66 6 6= = =- - - -7 7 7
; ; ;B B B+ + +"3- 3- 3-j+ + +# # #2. . .&  8  B  "- - -; ; ;4. . ."- - -9 9 97 7 71 1 17 7 7 7 7 7 7r   rg   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )

TestNdIterz
    Test np.nditer()
    c              #     K   t          j        d          V  t          j        dt           j                  V  t          j        d                              t           j                  V  t          j        d          d d d         V  t          j        d                              d          }|V  |                    d	
          V  t          j        d                              d          d d d         }|V  d S )Nd   f   r\   r   r   r   r   r   r   r   r   )r   r   )	r4   float32r   int16r^   astype	complex64r   r~   rl   rJ   s     r   inputszTestNdIter.inputs  s       joo hs"(++++++ ill!!",/////ill33Q3 IbMM!!&))ff3fIbMM!!&))##A#.r   c              #   4  K   t          j        d                              t           j                  V  t          j        d          d d d         V  t          j        d                              d          }|V  |                    d          V  d S )Nr   r   r   r   r   r   r   )r4   r^   r   r  r   r~   r  s     r   basic_inputszTestNdIter.basic_inputs  s      ill!!",/////ill33Q3IbMM!!&))ff3fr   c                 l    |                      t          |          t          |          ||f           d S r   )r   set)rl   r   ru   s      r   check_resultzTestNdIter.check_result  s0    S3x==3/BBBBBr   c                     t           } t          d          |          }|                                 D ].} ||          } ||          }|                     ||           /d S NTr   )rM   r   r  r  )rl   rr   rt   rJ   ru   r   s         r   test_nditer1zTestNdIter.test_nditer1  su    "T"""6** 	- 	-AvayyH%((Cc8,,,,	- 	-r   c                     t           } t          d          |          }t          j        |                                 |                                           D ]3\  }} |||          } |||          }|                     ||           4d S r
  )rP   r   	itertoolsproductr  r  )rl   rr   rt   rJ   rO   ru   r   s          r   test_nditer2zTestNdIter.test_nditer2  s    "T"""6**%dkkmmT[[]]CC 	- 	-DAqva||H%1++Cc8,,,,	- 	-r   c                    t           } t          d          |          }| j        }t          j         |             |             |                      D ]6\  }}} ||||          } ||||          }|                     ||           7d S r
  )rT   r   r  r  r  r  )	rl   rr   rt   r  rJ   rO   rR   ru   r   s	            r   test_nditer3zTestNdIter.test_nditer3  s    "T"""6**" (6688VVXXFF 	- 	-GAq!vaAH%1a..Cc8,,,,	- 	-r   c                 l    t           } t          d          |                                             fd} |t          j        d          t          j        d                     t          j        d                              d          }t          j        d          } |||           d S )NTr   c                                          t                    5 } | |           d d d            n# 1 swxY w Y                       dt          |j                             d S )Nz(operands could not be broadcast together)assertRaises
ValueErrorassertInstr	exception)rJ   rO   raisesrt   rl   s      r   check_incompatiblez2TestNdIter.test_errors.<locals>.check_incompatible  s    "":.. &a              MMDf.//1 1 1 1 1s   599r   r   r   r   )rP   r   disable_leak_checkr4   r^   r   )rl   rr   r  rJ   rO   rt   s   `    @r   test_errorszTestNdIter.test_errors  s    "T"""6**!!!	1 	1 	1 	1 	1 	1 	29Q<<1666IbMM!!&))IaLL1a     r   N)r   r   r   r   r  r  r  r  r  r  r  r9   r   r   r   r     s           (     C C C- - -- - -- - -! ! ! ! !r   r   __main__)&r  numpyr4   numbar   r   
numba.corer   numba.core.compilerr   numba.tests.supportr   r   r	   r
   unittestr   r   r   r#   r'   r*   r/   r2   r7   r;   r@   rD   rM   rP   rT   rY   rc   re   rg   r   r   mainr9   r   r   <module>r%     s$                         0 0 0 0 0 0 P P P P P P P P P P P P                               ) ) )    X7 X7 X7 X7 X7( X7 X7 X7v
M! M! M! M! M!( M! M! M!` zHMOOOOO r   