§
    ƒÛg	!  ã                   óò   — 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    úM/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_slices.pyÚslice_passingr      s   € ØŒ8�R”W˜bœgÐ%Ð%ó    c                  ó<   — t          | Ž }|j        |j        |j        fS r   )Úslicer   r   r   )Úargsr   s     r   Úslice_constructorr      s   € Ý	�ˆ€BØŒ8�R”W˜bœgÐ%Ð%r   c                 ó$   — t          | Ž }||         S r   )r   )r   Úlr   s      r   Úslice_construct_and_user       s   € Ý	�ˆ€BØˆRŒ5€Lr   c                 ó   —  | j         |Ž S r   )Úindices)ÚsÚindargss     r   Úslice_indicesr%      s   € Øˆ1Œ9�gÐÐ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¸Ø8BØ8Bñ'Dô 'Dð 	$ð 	$Ñ"‰FˆQ�‘F�Q˜™F˜Q ð ˆE�!�Q˜˜1˜a Ñ#Ô#Ð#Ð#ð ˜iÐ(¨(°HÐ=ˆØ˜YÐ'¨°Ð<ˆ
Ø 
Ð+ˆ
Ý&/Ô&7¸Ø8BØ8Bñ'Dô 'Dð 	$ð 	$Ñ"‰FˆQ�‘F�Q˜™F˜Q ð ˆE�!�Q˜˜1˜a Ñ#Ô#Ð#Ð#ð ×Ò�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ˆ	ÝŒI�b‰MŒMˆØ"•˜TÐ"Ñ"Ô"Õ#4Ñ5Ô5ˆØ&•C Ð&Ñ&Ô&Õ'>Ñ?Ô?ˆ	à�q˜) QÐ'Ð(ØØ˜A˜y¨!Ð,Ð-Ø˜˜I qÐ)Ð*Ø"ØØ˜q )¨QÐ/Ð0Ø%Ø˜A˜y¨!Ð,Ð-Ø"Ø 	¨9°bÐ9Ð:Ø˜b )¨RÐ0Ð1Ø˜Y¨¨2Ð.Ð/Ø&ð
ð 	3ð 	3‰NˆD�(ð  �%˜�,ˆCØ×#Ò# C¨Ñ2Ô2Ð2Ý+¨D°!Ñ4Ô4ˆEØ�Y˜t QÑ'Ô'ˆFØ×#Ò# E¨6Ñ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   øè è € ð (
ð (
Ø+,�G�G AÐ&Ñ&Ô&ð(
ð (
ð (
ð (
ð (
ð (
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   è è € Ð?Ð?°3�c¥&¨¡+¤+Ñ.Ô.Ð?Ð?Ð?Ð?Ð?Ð?r   )r   Úfrom_iterableÚrangerS   rT   r   r    Údisable_leak_checkr*   rE   ÚlenÚassertRegexpMatchesrb   Ú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  ø€ ð #ˆÝÔ'ð (
ð (
ð (
ð (
Ý05°a±´ð(
ñ (
ô (
ñ 
ô 
ˆ	õ ”	˜"‘”ˆà"•˜TÐ"Ñ"Ô"Õ#:Ñ;Ô;ˆà×ÒÑ!Ô!Ð!Øð 	Fñ 	FˆDðFÝ2°4¸Ñ?Ô?�ð8 ×'Ò'¨°%°%¸¸eÑ2DÔ2DÑEÔEÐEÐEøõ7 ð ñ ð õ ˜T™œ�Ø×(Ò(Ý˜	‘N”NØNß’V˜F‘^”^ñô ð ð
 ×&Ò&¥{Ñ3Ô3ð '°wØ�E˜$ Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'à—’Ý Ý˜Ô)Ñ*Ô*ñô ð ð —’Ø—I’IÐ?Ð?¸$Ð?Ñ?Ô?Ñ?Ô?Ý˜Ô)Ñ*Ô*ñô ð ð ð ð ð ñ øøøøõ ð ð ð Ø×&Ò&¥t¨D¡z¤zÑ2Ô2ð '°gØ�E˜$ Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'à—’Ý˜‘I”IÝ˜Ô)Ñ*Ô*ñô ð ð ð ð ð ñ øøøøðøøøð-	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Ë  € åÝÝÝ•e˜B ‘l”l GÑ,Ô,Ý•e˜B ‘l”l GÑ,Ô,Ý•e˜B ‘l”l GÑ,Ô,ñô ñ
ô 
ˆõ ˜˜A‘,”,ˆà"•˜TÐ"Ñ"Ô"¥=Ñ1Ô1ˆå˜F GÑ,Ô,ð 	?ð 	?‰DˆAˆqð
?Ý(¨¨AÑ.Ô.�ð ×'Ò'¨°%°%¸¸1±+´+Ñ>Ô>Ð>Ð>øõ ð ð ð Ø×&Ò&¥t¨D¡z¤zÑ2Ô2ð  °gØ�E˜!˜Q‘K”K�Kð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  à—’Ý˜‘I”IÝ˜Ô)Ñ*Ô*ñô ð ð ð ð ð ð øøøøðøøøð	?ð 	?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Ñ:Ô:ˆà×Ò�{Ñ+Ô+ð 	1¨qØˆN�5 ™;œ;¨¨1¨aÑ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1à�ŠØ=Ý�”ÑÔñ	
ô 	
ð 	
ð
 ×Ò�{Ñ+Ô+ð 	6¨qØˆN�5  t¨QÑ/Ô/°Ñ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¯   øø€ Ø!ˆ
åÔ#ØˆOˆO˜_˜_˜_Ð.BÐ.BÐ.Bñ
ô 
ð 		;ð 		;ˆBõ ˜�ˆBå˜$ÐÑÔð&ð &ð &ð &ð &ñ  Ôð&ð ×Ò˜W˜W™YœY¨¯ªÑ(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×%Ò%¥e¨A¨t°TÑ&:Ô&:Ñ;Ô;ˆÝŒj×%Ò%¥e¨D°$¸Ñ&=Ô&=Ñ>Ô>ˆÝŒj×%Ò%¥e¨A¨t°TÑ&:Ô&:Ñ;Ô;ˆà×Ò˜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˜‰NŒNÝ�!�Q‰KŒKÝ�!‰HŒHÝ�$˜˜1ÑÔÝ�!�T˜1ÑÔÝ�$˜˜aÑ Ô Ý�$‰KŒKÝ�$˜˜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˜‰NŒNˆÝ	ð	ð 	ð 	ð 	ñ 
Œð	ð 	×Ò˜˜C˜C™EœEÑ"Ô"Ð"Ð"Ð"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•�d˜D 6 '¨!¡)Ñ,Ô,Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.à�ŠØ$Ý�”ÑÔñ	
ô 	
ð 	
ð 	
ð 	
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ÒÐØ€H„M�O„O€O€O€Oð Ðr   