
    xKg,D                        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 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jD                          yy)    N)jitnjittypeof)types)TestCaseMemoryLeakMixinc                 @    d}t        |       D ]  \  }}|||z  z  } |S Nr   	enumerate)arrtotalivs       d/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_array_iterators.py
array_iterr      s+    E#1Q L    c                 *    t        t        |             S N)listiterr   s    r   array_iter_itemsr      s    S	?r   c                 F    d}t        | |         D ]  \  }}|||z  z  } |S r
   r   )r   idxr   r   r   s        r   array_view_iterr      s0    E#c(#1Q $Lr   c                 H    t        | j                        D ]
  \  }}|||<    y r   r   flat)r   outr   r   s       r   
array_flatr!      s"    #((#1A $r   c                      | j                   |   S r   r   )r   inds     r   array_flat_getitemr%      s    88C=r   c                 "    || j                   |<   y r   r#   )r   r$   vals      r   array_flat_setitemr(   !   s    CHHSMr   c                 Z    d}t        | j                        D ]  \  }}||dz   |z  z   } |S Nr      r   )r   sr   r   s       r   array_flat_sumr-   $   s4    	A#((#1Q!O $Hr   c                 ,    t        | j                        S r   )lenr   r   s    r   array_flat_lenr0   *   s    sxx=r   c                 l    d}t        j                  |       D ]  \  \  }}}||dz   |dz   z  |z  z   } |S r*   )npndenumerate)r   r,   r   jr   s        r   array_ndenumerate_sumr5   -   sC    	A^^C(	AQ1q5!A%% )Hr   c                  f    d} t        j                  d      D ]  }| | t        |      z   dz   z  }  | S )Nr    r+   )r2   ndindexr/   )r,   r$   s     r   np_ndindex_emptyr9   3   s5    	Azz"~	QS\A Hr   c                 f    d}d}t        j                  | |      D ]  \  }}||dz   |dz   z  z   } |S r*   )r2   r8   )xyr,   nr   r4   s         r   
np_ndindexr>   9   sA    	A	A

1a 1Q1q5!! !Hr   c                     d}d}t        j                  | j                        D ]#  }t        |      D ]  \  }}||dz   |dz   z  z   } % |S r*   )r2   r8   shaper   )r   r,   r=   indicesr   r4   s         r   np_ndindex_arrayrB   @   sT    	A	A::cii(g&DAqQUq1u%%A ' ) Hr   c                 |    g }t        j                  |       D ]!  }|j                  |j                                # |S r   r2   nditerappenditem)aresus      r   
np_nditer1rK   H   s0    
CYYq\

1668 Jr   c                     g }t        j                  | |f      D ]4  \  }}|j                  |j                         |j                         f       6 |S r   rD   )rH   brI   rJ   r   s        r   
np_nditer2rN   N   sD    
C		1a&!1

AFFHaffh'( "Jr   c                     g }t        j                  | ||f      D ]D  \  }}}|j                  |j                         |j                         |j                         f       F |S r   rD   )rH   rM   crI   rJ   r   ws          r   
np_nditer3rR   T   sP    
C99aAY'1a

AFFHaffh12 (Jr   c                 n    t        |       }t        |       }t        |      t        |      t        |      fS r   )r   next)r   itit2s      r   	iter_nextrW   Z   s-    	cB
s)C8T"XtCy((r   c                     t        j                  |       }t        j                  |t         j                        }t	        |j
                        D ]
  \  }}|||<    |S Ndtype)r2   arange
zeros_likeintpr   r   sizer;   rI   r   r   s        r   array_flat_premature_freera   i   sH    
		$A
--
)C!&&!1A "Jr   c                     t        j                  |       }t        j                  |t         j                        }t        j                  |      D ]
  \  }}|||<    |S rY   )r2   r\   r]   r^   r3   r_   s        r    array_ndenumerate_premature_freerc   p   sH    
		$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 xZS )TestArrayIteratorsz1
    Test array.flat, np.ndenumerate(), etc.
    c                 *    t         t        |           y r   )superre   setUp)self	__class__s    r   rh   zTestArrayIterators.setUp}   s     $-/r   c                     t         } t        t        |      f      |      } ||      }| j                   ||      |       y r   )r   r   r   assertPreciseEqualri   r   pyfunccfuncexpecteds        r   check_array_iter_1dz&TestArrayIterators.check_array_iter_1d   s;    $fSk^$V,#;c
H5r   c                     t         } t        t        |      f      |      } ||      }| j                   ||      |       y r   )r   r   r   rl   rm   s        r   check_array_iter_itemsz)TestArrayIterators.check_array_iter_items   s;    !$fSk^$V,#;c
H5r   c                     t         } t        t        |      t        |      f      |      } |||      }| j                   |||      |       y r   )r   r   r   rl   )ri   r   indexrn   ro   rp   s         r   check_array_view_iterz(TestArrayIterators.check_array_view_iter   sH     3fSk6%=23F;#u%c5 18<r   c                 "   t        j                  |j                  |j                        }|j	                         }|t        |      } t        |t        |      f      t              }t        ||        |||       | j                  ||       y rY   )	r2   zerosr`   r[   copyr   r   r!   rl   )ri   r   arrtyr    nb_outro   s         r   check_array_flatz#TestArrayIterators.check_array_flat   sq    hhsxxsyy1=3KE+eVC[*+J73c6V,r   c                 d     t        |f      |      }| j                   ||       ||             y r   )r   rl   )ri   r   rz   funcro   s        r   check_array_unaryz$TestArrayIterators.check_array_unary   s,    eXt$c
DI6r   c                 2    | j                  ||t               y r   )r   r5   ri   r   rz   s      r   check_array_ndenumerate_sumz.TestArrayIterators.check_array_ndenumerate_sum   s    sE+@Ar   c                 `   t        j                  d      }| j                  |       | j                  |       |d d d   }| j	                  |j
                  j                         | j	                  |j
                  j                         | j                  |       | j                  |       t        j                  g d      }| j                  |       | j                  |       t        j                  g dg dg dg      }| j                  |       | j                  |j                         y )N      r+   r   r   r+   )r+   r      )      r   )      	   )r2   r\   rq   rs   assertFalseflagsc_contiguousf_contiguousbool_arrayTri   r   s     r   test_array_iterz"TestArrayIterators.test_array_iter   s    iil  %##C(#A#h//0//0  %##C(hh|$  %##C(hh	9i89##C(##CEE*r   c                    t        d      d        }t        j                  d      j                  dd      }|j	                  |      } ||      }| j                  ||       t        j                  d      j                  d	d      d d d
d d d d f   }|j	                  |      } ||      }| j                  ||       t        j                  d      j                  d	d      d d d d d
d d f   }|j	                  |      } ||      }| j                  ||       t        j                  d      j                  d	d      d d d d d d d
f   }|j	                  |      } ||      }| j                  ||       t        d      d        }t        j                  d      j                  dd      }|j	                  |      } ||      }| j                  t        |      t        |             |d   \  }}}|d   \  }	}
}t        j                  j                  ||	       | j                  ||
       | j                  ||       y )NTnopythonc                 d    g }| D ](  }|D ]!  }|j                  |j                                # * |S r   )rF   ravel)r   ty1y2s       r   fooz=TestArrayIterators.test_array_iter_yielded_order.<locals>.foo   s4    ABHHRXXZ(   Hr      )r   r   r   Forder@   )r   r   r   r   c                     g }| D ]>  }|j                  ||j                  j                  |j                  j                  f       @ |S r   )rF   r   r   r   )r   r    subs      r   
flag_checkzDTestArrayIterators.test_array_iter_yielded_order.<locals>.flag_check   sD    C

C!7!7II224 5  Jr   
   )r   r   r   )
r   r2   r\   reshapepy_funcrl   assertEqualr/   testingassert_allclose)ri   r   r   rp   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		 
	 iim##IS#9;;s##h#. iim##IS#9#A#q!)D;;s##h#. iim##IS#9!SqS!)D;;s##h#. iim##IS#9!Q!)D;;s##h#.	d		 
	 iim##F##6%%c*oXC1%-a["(%(V"(


""6628,8,r   c                 L   t        j                  d      j                  d      }| j                  |d       | j                  |j                  d       |d d d   }| j                  |d       t        j
                  g d      j                  d      }| j                  |d       y )N   r   r   r+   r   r   r   r   )r2   r\   r   rv   r   r   r   s     r   test_array_view_iterz'TestArrayIterators.test_array_view_iter   s    iim##F+""3*""355!,#A#h""3*hh|$,,V4""3*r   c                    t        j                  d      j                  ddd      }t        |      }| j	                  |j
                  d       | j	                  |j                  d       | j                  |j                  j                         | j                  |       |j                         }| j                  |j                  j                         | j                  |j                  j                         | j	                  t        |      j                  d       | j                  |       |d d d   }| j                  |j                  j                         | j                  |j                  j                         | j	                  t        |      j                  d       | j                  |       t        j                  g ddz        j                  d	      }| j                  |       y )
Nr   r   r   r   Cr   Ar   )r   r   r   )r2   r\   r   r   r   ndimlayout
assertTruer   r   r|   	transposer   r   r   r   s      r   test_array_flat_3dz%TestArrayIterators.test_array_flat_3d   se   iim##Aq!,sQ's+		../c"mmo//0		../++S1c"#A#h//0//0++S1c"hh|a'(00;c"r   c                      fd}t        j                  dt         j                        }|j                  dd      }t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       |j                  dd      }t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       y )	Nc                      t        |f      t              }|j                  |f   }|j                  |       }|j	                  |       }j                  ||       y r   )r   r-   	overloadsentry_pointr   rl   )r   rz   ro   cresr   rp   ri   s         r   checkz7TestArrayIterators.test_array_flat_empty.<locals>.check  sS    "D%N>2E??E8,D""3'C}}S)H##Hc2r   r   rZ   r   r   r   r   r   r2   rx   int32r   r   Arrayri   r   r   rz   s   `   r   test_array_flat_emptyz(TestArrayIterators.test_array_flat_empty  s    	3 hhq)kk!QEKK37c5EKK37c5EKK37c5kk!QEKK37c5EKK37c5EKK37c5r   c                     t         t               fd}t        j                  d      j	                  ddd      }t        |j                        D ]  } |||        |j                  }t        |j                        D ]  } |||        |d d d   }t        |j                        D ]  } |||        t        j                  dg      j	                  d      }t        |j                        D ]  } |||        t        j                  g d      }t        |j                        D ]  } |||        |d d d   }t        |j                        D ]  } |||        y )	Nc                 J     | |      }j                   | |      |       y r   )r   )r   r$   rp   ro   rn   ri   s      r   r   z9TestArrayIterators.test_array_flat_getitem.<locals>.check1  s%    c3'HU3_h7r   r   r   r   r   *   r7   r   )
r%   r   r2   r\   r   ranger`   r   r   r   ri   r   r   r   ro   rn   s   `   @@r   test_array_flat_getitemz*TestArrayIterators.test_array_flat_getitem-  s#   #V	8 iim##Aq!,sxxA#qM !eesxxA#qM !#A#hsxxA#qM !hhtn$$R(sxxA#qM ! hh|$sxxA#qM !#A#hsxxA#qM !r   c                     t         t               fd}t        j                  d      j	                  ddd      }t        |j                        D ]  } |||        |j                  }t        |j                        D ]  } |||        |d d d   }t        |j                        D ]  } |||        t        j                  dg      j	                  d      }t        |j                        D ]  } |||        t        j                  g d      }t        |j                        D ]  } |||        |d d d   }t        |j                        D ]  } |||        y )	Nc                     t        j                  |       }t        j                  |       } ||d        ||d       j                  ||       y )N{   )r2   ry   rl   )r   r$   rp   r   ro   rn   ri   s       r   r   z9TestArrayIterators.test_array_flat_setitem.<locals>.checkM  sE    wws|H''#,C8S#&#sC ##C2r   r   r   r   r   r   r7   r   )
r(   r   r2   r\   r   r   r`   r   r   r   r   s   `   @@r   test_array_flat_setitemz*TestArrayIterators.test_array_flat_setitemI  s#   #V	3 iim##Aq!,sxxA#qM !eesxxA#qM !#A#hsxxA#qM !hhtn$$R(sxxA#qM ! hh|$sxxA#qM !#A#hsxxA#qM !r   c                 @    t         t        t                fd}t        j                  d      j	                  ddd      } ||       |j
                  } ||       |d d d   } ||       t        j                  dg      j	                  d      } ||       y )Nc                 F     |       }j                   |       |       y r   )rl   )r   rp   ro   rn   ri   s     r   r   z5TestArrayIterators.test_array_flat_len.<locals>.checkm  s     c{H##E#J9r   r   r   r   r   r   r7   )r0   r   r2   r\   r   r   r   )ri   r   r   ro   rn   s   `  @@r   test_array_flat_lenz&TestArrayIterators.test_array_flat_leni  s    ^$	: iim##Aq!,c
eec
#A#hc
hhtn$$R(c
r   c                      t        t        j                  f      t              }t        d      } |d      }| j	                  |j                                | j                  ||       y Nr   )r   r   r^   ra   r   sumrl   ri   ro   expectr   s       r   test_array_flat_premature_freez1TestArrayIterators.test_array_flat_premature_freez  sO    #ejj]#$=>*1-Ah	",r   c                     t        j                  d      j                  dd      }t        |      }| j	                  |j
                  d       | j	                  |j                  d       | j                  |j                  j                         | j                  ||       |j                         }| j                  |j                  j                         | j                  |j                  j                         t        |      }| j	                  |j                  d       | j                  ||       |d d d   }| j                  |j                  j                         | j                  |j                  j                         t        |      }| j	                  |j                  d       | j                  ||       t        j                  g d      j                  d	      }| j                  |t        |             y )
Nr   r   r   r   r   r   r   r   r   )r2   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  sp   iim##Aq)sQ's+		../((e4mmo//0		../ss+((e4#A#h//0//0ss+((e4hh|$,,V4((fSk:r   c                    d }t        j                  dt         j                        }|j                  dd      }t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       |j                  dd      }t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       t	        j
                  t        j                  dd      } |||       y )	Nc                      t        |f      t              }|j                  |f   }|j                  |       }|j	                  |       }t
        j                  j                  ||       y r   )r   r5   r   r   r   r2   r   r   )r   rz   ro   r   r   rp   s         r   r   z>TestArrayIterators.test_array_ndenumerate_empty.<locals>.check  sW    "D%N#89E??E8,D""3'C}}S)HJJ&&x5r   r   rZ   r   r   r   r   r   r   r   s       r   test_array_ndenumerate_emptyz/TestArrayIterators.test_array_ndenumerate_empty  s    	6 hhq)kk!QEKK37c5EKK37c5EKK37c5kk!QEKK37c5EKK37c5EKK37c5r   c                      t        t        j                  f      t              }t        d      } |d      }| j	                  |j                                | j                  ||       y r   )r   r   r^   rc   r   r   rl   r   s       r   %test_array_ndenumerate_premature_freez8TestArrayIterators.test_array_ndenumerate_premature_free  sO    #ejj]#$DE1!4Ah	",r   c                 n   t         } t        t        j                  t        j                  f      |      }| j	                   |dd       |dd             | j	                   |dd       |dd             | j	                   |dd       |dd             | j	                   |dd       |dd             y )Nr   r   r   )r>   r   r   r   rl   ri   r~   ro   s      r   test_np_ndindexz"TestArrayIterators.test_np_ndindex  s    1ekk5;;01$7aT!QZ8aT!QZ8aT!QZ8aT!QZ8r   c                 L   t         }t        j                  dt        j                        dz   }| j	                  |t        |      |       |j                  d      }| j	                  |t        |      |       |j                  d      }| j	                  |t        |      |       y )Nr   rZ   r   )r   r   )r   r   r   )rB   r2   r\   r   r   r   r   ri   r~   r   s      r   test_np_ndindex_arrayz(TestArrayIterators.test_np_ndindex_array  s~    ii"((+b0sF3K6kk&!sF3K6kk)$sF3K6r   c                 j    t         } t        d      |      }| j                   |        |              y )Nr7   )r9   r   rl   r   s      r   test_np_ndindex_emptyz(TestArrayIterators.test_np_ndindex_empty  s*    R	$0r   c                     t         }t        j                  dt        j                        dz   }| j	                  |t        |      |       y )Nr   rZ   r   )rW   r2   r\   r   r   r   r   s      r   test_iter_nextz!TestArrayIterators.test_iter_next  s6    ii"((+b0sF3K6r   r   )__name__
__module____qualname____doc__rh   rq   rs   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rj   s   @r   re   re   x   s~    066=-7B+"3-j+#2<8@"-;46-971
7r   re   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)

TestNdIterz
    Test np.nditer()
    c              #     K   t        j                  d       t        j                  dt         j                         t        j                  d      j                  t         j                         t        j                  d      d d d    t        j                  d      j                  d      }| |j                  d	
       t        j                  d      j                  d      d d d   }| y w)Nd   f   rZ   r   r   r   r   r   r   r   r   )r   r   )	r2   float32r   int16r\   astype	complex64r   ry   ri   rH   s     r   inputszTestNdIter.inputs  s      jjo hhs"((++ iil!!",,//iil3Q3 IIbM!!&)ff3fIIbM!!&)#A#.s   C;C=c              #   &  K   t        j                  d      j                  t         j                         t        j                  d      d d d    t        j                  d      j	                  d      }| |j                  d       y w)Nr   r   r   r   r   r   r   )r2   r\   r   r   r   ry   r   s     r   basic_inputszTestNdIter.basic_inputs  sh     iil!!",,//iil3Q3IIbM!!&)ff3fs   BBc                 R    | j                  t        |      t        |      ||f       y r   )r   set)ri   r   rp   s      r   check_resultzTestNdIter.check_result  s     S3x=3/Br   c                     t         } t        d      |      }| j                         D ]$  } ||      } ||      }| j                  ||       & y NTr   )rK   r   r  r  )ri   rn   ro   rH   rp   r   s         r   test_nditer1zTestNdIter.test_nditer1  sJ    "T"6*AayH(Cc8, r   c                     t         } t        d      |      }t        j                  | j	                         | j	                               D ])  \  }} |||      } |||      }| j                  ||       + y r  )rN   r   	itertoolsproductr  r  )ri   rn   ro   rH   rM   rp   r   s          r   test_nditer2zTestNdIter.test_nditer2  sf    "T"6*%%dkkmT[[]CDAqa|H1+Cc8, Dr   c                     t         } t        d      |      }| j                  }t        j                   |        |        |             D ],  \  }}} ||||      } ||||      }| j                  ||       . y r  )rR   r   r  r  r  r  )	ri   rn   ro   r  rH   rM   rP   rp   r   s	            r   test_nditer3zTestNdIter.test_nditer3  ss    "T"6*"" ((68VXFGAq!aAH1a.Cc8, Gr   c                 F    t         } t        d      |       j                           fd} |t        j                  d      t        j                  d             t        j                  d      j                  d      }t        j                  d      } |||       y )NTr   c                     j                  t              5 } | |       d d d        j                  dt        j                               y # 1 sw Y   /xY w)Nz(operands could not be broadcast together)assertRaises
ValueErrorassertInstr	exception)rH   rM   raisesro   ri   s      r   check_incompatiblez2TestNdIter.test_errors.<locals>.check_incompatible  sG    "":.&a /MMDf../1 /.s   
AAr   r   r   r   )rN   r   disable_leak_checkr2   r\   r   )ri   rn   r  rH   rM   ro   s   `    @r   test_errorszTestNdIter.test_errors  su    "T"6*!	1 	299Q<16IIbM!!&)IIaL1a r   N)r   r   r   r   r  r  r  r	  r  r  r  r7   r   r   r   r     s+    ( C---!r   r   __main__)#r  numpyr2   numbar   r   r   
numba.corer   numba.tests.supportr   r   unittestr   r   r   r!   r%   r(   r-   r0   r5   r9   r>   rB   rK   rN   rR   rW   ra   rc   re   r   r   mainr7   r   r   <module>r"     s      # #  9 )_7( _7DM!( M!` zHMMO r   