
    J/Ph!                         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                     dS dS )    )partialN)chainproductstarmap)jit	literallynjittypeofTypingError)utilstypes)TestCaseMemoryLeakMixin)_header_leadc                 *    | j         | j        | j        fS N)startstopstep)sls    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_slices.pyslice_passingr      s    8RWbg%%    c                  <    t          |  }|j        |j        |j        fS r   )slicer   r   r   )argsr   s     r   slice_constructorr      s    	B8RWbg%%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    19gr   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )
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 ]\  \  }}\  }	}
\  }} |||	|||
|                                 t                    5   t          ddd                     ddd           dS # 1 swxY w Y   dS )zC
        Check passing a slice object to a Numba function.
        c                 r    t          | ||          } |          }	                    ||||f           d S r   )r   assertPreciseEqual)
abcdefr   gotcfuncselfs
           r   checkz,TestSlices.test_slice_passing.<locals>.check$   sA    q!QB%))C##C!Q3333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   s   
	4 	4 	4 	4 	4 	4
 K	JN	"T"""=11 655Y'<
*
&/&78B8B'D 'D 	$ 	$"FQFQFQ E!Q1a#### i((H=Y'<

+
&/&78B8B'D 'D 	$ 	$"FQFQFQ E!Q1a#### y)) 	$ 	$E%Q""###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s    DDD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 ]R\  }} || }|                     ||           t          ||          }	 |||          }
|                     |	|
           SdS )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^    K	JN	IbMM"T"""#455&C&&&'>??	q)Q'(Ay!,-Iq)*"q)Q/0%Ay!,-"	9b9:b)R01Y2./&
 	3 	3ND(  %,C##C222+D!44EYtQ''F##E62222)	3 	3r   c                   
 d
t          j        
fdt          d          D                       }t          j        d          } t          d          t                    }|                                  |D ]}	 t          ||          }|                     | |||                     5# t          $ r }t          |          }|                     t          |          d                    |                     |                     t                    5 } |||           ddd           n# 1 swxY w Y   |                     t"          t          |j                             |                     d	                    d
 |D                       t          |j                             Y d}~;d}~wt(          $ r}	|                     t+          |	                    5 } |||           ddd           n# 1 swxY w Y   |                     t          |	          t          |j                             Y d}	~	d}	~	ww xY wdS )zW
        Test that slice constructor behaves same in python and compiled code.
        )Nr;   r   r5   c              3   :   K   | ]}t          |           V  dS ))repeatN)r   ).0noptionss     r   	<genexpr>z:TestSlices.test_slice_constructor_cases.<locals>.<genexpr>g   sA       (
 (
+,GGA&&&(
 (
 (
 (
 (
 (
r   rN   rM   Tr6   z7slice expected at (most|least) (3|1) arguments?, got {}Nz, c              3   N   K   | ] }t          t          |                    V  !d S r   )strr
   )r]   args     r   r`   z:TestSlices.test_slice_constructor_cases.<locals>.<genexpr>   s0      ??3c&++..??????r   )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"""#:;;!!! 	F 	FDF24??8 ''%%e2D2DEEEE7     T  	NNNVF^^  
 &&{33 'wE$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' )**   II??$?????)**           &&tDzz22 'gE$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'II)**       -	F 	Fsn   =B..I9AF4D1%F41D55F48D59A5F44I"I#G<0I<H  IH 8IIc                    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          ||          }|                     | |||                     7# t          $ r}| 	                    t          |                    5 } |||           ddd           n# 1 swxY w Y   |                     t          |          t          |j                             Y d}~d}~ww xY wdS )	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llG,,eBllG,,eBllG,, 
 
 A,,"T"""=11FG,, 	? 	?DAq
?(A.. ''%%1++>>>>    &&tDzz22  gE!QKKK                             II)**       	? 	?s<   =C..
E=8"E8D3'E83D77E8:D7;8E88E=c                 6    t          d          t                    }|                     t                    5 } |t	          d          ddd           ddd           n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 } |t	          ddd          d	           ddd           n# 1 swxY w Y   |                     d
t          d	          z  t          |j                             dS )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::{++ 	1qN5;;1a000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1=	
 	
 	

 {++ 	6qN5tQ//555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6=sK	
 	
 	
 	
 	
s#   A!!A%(A%.CCCc                     dt          j        g dg dg d          D ]Wt           t          d          fd            }|                      |            |                                           Xd S )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   s    !
#OO___.B.B.B
 
 		; 		;B B$& & & & &  & WWYY(9(9::::		; 		;r   c                 r   t           j                            t          dd d                     }t           j                            t          d d d                     }t           j                            t          dd d                     }|                     ||           |                     ||           d S r>   )r   miscSliceLiteralr   assertNotEqualr   )r3   sl1sl2sl3s       r   test_literal_slice_distinctz&TestSlices.test_literal_slice_distinct   s    j%%eAtT&:&:;;j%%eD$&=&=>>j%%eAtT&:&:;;C%%%c"""""r   c                 h   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 ]!}|                     | ||                     "d S )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NN!QKK!HH$1!T1$a  $KK$d##	
  	( 	(BR2''''	( 	(r   c                     t          ddd          t          fd            }|                      |                       d S )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   s[     !QNN		 	 	 	 
	 	CCEE"""""r   c           	      B   t                      d             }t          d          }|                     t                    5 } |t	          d d | dz
                       d d d            n# 1 swxY w Y   |                     dt          |j                             d S )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   s     
	  	  
	  Uz** 	.aCdD6'!),,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.$	
 	
 	
 	
 	
s   A,,A03A0N)__name__
__module____qualname__rK   rY   ru   r{   r~   r   r   r   r   r   r   r   r   r'   r'      s        "$ "$ "$H3 3 3>+F +F +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      sb             - - - - - - - - - - 



     ; ; ; ; ; ; ; ; ; ; ; ; ; ; # # # # # # # # 9 9 9 9 9 9 9 9 3 3 3 3 3 3 & & && & &    b
 b
 b
 b
 b
( b
 b
 b
J zHMOOOOO r   