
    xKg!                         d dl mZ d dlZd dlmZmZmZ d dlZd dlZd dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlZd Zd	 Zd
 Zd Z G d dee      Zedk(  r ej<                          yy)    )partialN)chainproductstarmap)jit	literallynjittypeofTypingError)utilstypes)TestCaseMemoryLeakMixin)_header_leadc                 H    | j                   | j                  | j                  fS N)startstopstep)sls    [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_slices.pyslice_passingr      s    88RWWbgg%%    c                  X    t        |  }|j                  |j                  |j                  fS r   )slicer   r   r   )argsr   s     r   slice_constructorr      s$    	B88RWWbgg%%r   c                     t        |  }||   S r   )r   )r   lr   s      r   slice_construct_and_user       s    	BR5Lr   c                       | j                   | S r   )indices)sindargss     r   slice_indicesr%      s    199gr   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)
TestSlicesc           	            fd}t         j                  }| dz
  } t        d      t              g d}d|fddg}d	d
g}t	        j
                  |||      D ]  \  \  }}\  }	}
\  }} |||	|||
|        d|fddg}d|fddg}ddg}t	        j
                  |||      D ]  \  \  }}\  }	}
\  }} |||	|||
|         j                  t              5   t        ddd             ddd       y# 1 sw Y   yxY w)zC
        Check passing a slice object to a Numba function.
        c                 Z    t        | ||      } |      }	j                  ||||f       y r   )r   assertPreciseEqual)
abcdefr   gotcfuncselfs
           r   checkz,TestSlices.test_slice_passing.<locals>.check$   s/    q!QB)C##C!Q3r      Tnopython))Nr   *   r9   r;   N)	   r<   )r=   Nr5   )   r?   r8   r:   )r@   g      ?)	sysmaxsizer   r   	itertoolsr   assertRaises	TypeErrorr   )r3   r4   	maxposint	maxnegintstart_cases
stop_cases
step_casesr+   r.   r,   r/   r-   r0   r2   s   `            @r   test_slice_passingzTestSlices.test_slice_passing   s8   
	4
 KK	JN	"T"=1 6Y'<
*
&/&7&78B8B'D"FQFQFQ !Q1a#'D i((H=Y'<

+
&/&7&78B8B'D"FQFQFQ !Q1a#'D y)%Q"# *))s   C44C=c                    t         j                  }| dz
  }t        j                  d      } t	        d      t
              } t	        d      t              }dd|dffddd|dffd	d|dffd
ddd|dffddd|dffdd||dffdd|dffd|ddffdfD ]C  \  }} || }| j                  ||       t        ||      }	 |||      }
| j                  |	|
       E y)zQ
        Test the 'happy path' for slice() constructor in nopython mode.
        r5   
   Tr6   r   r   ))   )r   rN   r5   )NN)r5   N))N   )r   rO   r5   ))r5   rO   )r5   rO   r5   )NN   rP   ))NrO   rP   )r   rO   rP   )r5   NrP   )r5   rO   rP   rQ   )NNr;   r;   )rM   Nr;   )NrN   r;   rN   )rM   rN   r;   rR   N)rA   rB   nparanger   r   r    r*   )r3   rF   rG   r+   r2   	cfunc_user   expectedr1   usagecusages              r   test_slice_constructorz!TestSlices.test_slice_constructorC   s&    KK	JN	IIbM"T"#45&C&'>?	q)Q'(Ay!,-Iq)*"q)Q/0%Ay!,-"	9b9:b)R01Y2./&
ND(  ,C##C2+D!4EtQ'F##E62)
r   c                   
 d
t        j                  
fdt        d      D              }t        j                  d      } t        d      t              }| j                          |D ](  }	 t        ||      }| j                  | |||             * y# t        $ r}t        |      }| j                  t        |      dj                  |             | j                  t              5 } |||       ddd       n# 1 sw Y   nxY w| j!                  t"        t        j$                               | j!                  d	j'                  d
 |D              t        |j$                               Y d}~d}~wt(        $ rr}	| j                  t+        |	            5 } |||       ddd       n# 1 sw Y   nxY w| j!                  t        |	      t        j$                               Y d}	~	d}	~	ww xY w)zW
        Test that slice constructor behaves same in python and compiled code.
        )Nr;   r   r5   c              3   8   K   | ]  }t        |         yw))repeatN)r   ).0noptionss     r   	<genexpr>z:TestSlices.test_slice_constructor_cases.<locals>.<genexpr>g   s      (
081GGA&&s   rN   rM   Tr6   z7slice expected at (most|least) (3|1) arguments?, got {}Nz, c              3   D   K   | ]  }t        t        |              y wr   )strr
   )r]   args     r   r`   z:TestSlices.test_slice_constructor_cases.<locals>.<genexpr>   s     ?$3c&+.$s    )r   from_iterablerangerS   rT   r   r    disable_leak_checkr*   rE   lenassertRegexrb   formatrD   r   assertInr   	exceptionjoin	Exceptiontype)r3   	arg_casesarrayr2   r   rV   	py_type_en_argsnumba_epy_er_   s             @r   test_slice_constructor_casesz'TestSlices.test_slice_constructor_casesb   s    #'' (
05a(
 
	 		""T"#:;!DF24?8 ''%e2DE=    T  	NNVF^
 &&{3w$& 433 ))* II?$??))*   &&tDz2g$& 322I))* sV   ,B	G.A
E0'
C:1	E0:D?A+E00G.<G)
F) 	G))F2.5G))G.c                 d   t        t        t        t        t	        dd      d      t        t	        dd      d      t        t	        dd      d                  }t	        dd      } t        d      t              }t        ||      D ]+  \  }}	 t        ||      }| j                  | |||             - y# t        $ rq}| j                  t        |            5 } |||       ddd       n# 1 sw Y   nxY w| j                  t        |      t        j                               Y d}~d}~ww xY w)	zITest that a numba slice returns same result for .indices as a python one.rN   r   rP   Tr6   N)r   r   r   r   re   r   r%   r*   rm   rD   rn   rj   rb   rk   )	r3   sliceslengthsr2   r#   r   rV   rt   rs   s	            r   test_slice_indiceszTestSlices.test_slice_indices   s   eBlG,eBlG,eBlG,
 A,"T"=1FG,DAq
?(A. ''%1+> -  &&tDz2g!QK 322I))* s0   B55	D/>D*
C+"	D*+C405D**D/c                     t        d      t              }| j                  t              5 } |t	        d      ddd       ddd       | j                  dt        j                               | j                  t              5 } |t	        ddd      d	       ddd       | j                  d
t        d	      z  t        |j                               y# 1 sw Y   xY w# 1 sw Y   GxY w)zTests for specific error cases.Tr6   Nr5   rO   rP   z.indices() takes exactly one argument (3 given)r   g333333?z/'%s' object cannot be interpreted as an integer)	r   r%   rD   r   r   rj   rb   rk   r
   )r3   cslice_indicesr/   s      r   test_slice_indices_examplesz&TestSlices.test_slice_indices_examples   s    +d+M:{+q5;1a0 ,=	

 {+q5tQ/5 ,=sK	
 ,+ ,+s   CCCC'c                     dt        j                  g dg dg d      D ]D  t         t        d      fd       }| j	                   |       |j                                F y )N)r5   rO   rP      )Nr5   rO   rP   )Nr5   rO   r;   rx   Tr6   c                          S r    )
test_tupletss   r   test_fnz4TestSlices.test_slice_from_constant.<locals>.test_fn   s    !"~%r   )rC   r   r   r   assertEqualpy_func)r3   r   r   r   s     @@r   test_slice_from_constantz#TestSlices.test_slice_from_constant   sb    !
##_.B
B B$&  & WY(9:
r   c                 H   t         j                  j                  t        dd d             }t         j                  j                  t        d d d             }t         j                  j                  t        dd d             }| j	                  ||       | j                  ||       y r>   )r   miscSliceLiteralr   assertNotEqualr   )r3   sl1sl2sl3s       r   test_literal_slice_distinctz&TestSlices.test_literal_slice_distinct   sy    jj%%eAtT&:;jj%%eD$&=>jj%%eAtT&:;C%c"r   c                    t         d        }t        ddd      t        dd      t        d      t        d dd      t        dd d      t        d d d      t        d       t        d d d       f}|D ]  }| j                  | ||              y )Nc                     t        |       S r   r   )xs    r   r0   z/TestSlices.test_literal_slice_boxing.<locals>.f       Q<r   r5   r   rO   )r	   r   r   )r3   r0   ry   r   s       r   test_literal_slice_boxingz$TestSlices.test_literal_slice_boxing   s     
	  
	  !QN!QK!H$1!T1$a $K$d#	
 BR2' r   c                 j    t        ddd      t        fd       }| j                   |              y )Nr5   rO   rP   c                       S r   r   zs   r   fooz2TestSlices.test_literal_slice_freevar.<locals>.foo   s    Hr   )r   r	   r   )r3   r   r   s     @r   test_literal_slice_freevarz%TestSlices.test_literal_slice_freevar   s8     !QN		 
	 	CE"r   c           	         t               d        }t        d      }| j                  t              5 } |t	        d d | dz
               d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nc                     t        |       S r   r   r   s    r   r   z1TestSlices.test_literal_slice_maxint.<locals>.foo   r   r   l            r5   zInt value is too large)r	   intrD   
ValueErrorr   rj   rb   rk   )r3   r   maxvalr/   s       r   test_literal_slice_maxintz$TestSlices.test_literal_slice_maxint   ss     
	  
	  Uz*adD6'!),- +$	
 +*s   A77B N)__name__
__module____qualname__rK   rY   ru   r{   r~   r   r   r   r   r   r   r   r   r'   r'      s7    "$H3>+FZ?6
$;#(*#
r   r'   __main__)	functoolsr   rC   r   r   r   rA   numpyrS   numbar   r   r	   r
   r   
numba.corer   r   numba.tests.supportr   r   numba.core.types.functionsr   unittestr   r   r    r%   r'   r   mainr   r   r   <module>r      sh      - - 
  ; ; # 9 3 &&b
( b
J zHMMO r   