§
    1@Äj	&  ã                   ó8  — d 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
mZmZmZmZmZmZmZmZ d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Z ee ej        ej        ¦  «        ¦  «        d„ ¦   «         Z eej        d¦  «        d„ ¦   «         Z eej        d¦  «        d„ ¦   «         Z  eej        d¦  «        d„ ¦   «         Z! edej        ej"        ¦  «        d„ ¦   «         Z#d„ Z$ eej        ¦  «        d„ ¦   «         Z% eej&        j'        ej        ¦  «        d„ ¦   «         Z(dS )z2
Implement slices and various slice computations.
é    )Úzip_longest)Úir)ÚcgutilsÚtypesÚtypingÚutils)Úimpl_ret_borrowedÚimpl_ret_new_refÚimpl_ret_untrackedÚiternext_implÚlower_builtinÚ
lower_castÚlower_constantÚlower_getattrc                 óº   — |                       d|t          j        |j        d¦  «        ¦  «        }|                      ||¦  «        }|                      |||¦  «        S )z^
    Fix negative index by adding *size* to it.  Positive
    indices are left untouched.
    ú<r   )Úicmp_signedr   ÚConstantÚtypeÚaddÚselect)ÚbuilderÚidxÚsizeÚis_negativeÚwrapped_indexs        úFC:\Projects\Historical\venv\Lib\site-packages\numba/cpython/slicing.pyÚ	fix_indexr      sR   € ð
 ×%Ò% c¨3µ´¸D¼IÀqÑ0IÔ0IÑJÔJ€KØ—K’K  TÑ*Ô*€MØ�>Š>˜+ }°cÑ:Ô:Ð:ó    c                 ó  ‡ ‡‡‡	— t          j        ‰j        d¦  «        Š	t          j        ‰j        d¦  «        }ˆ ˆˆˆ	fd„}‰                      t	          j        ‰ ‰j        ¦  «        ¦  «        5 \  }}|5   |d‰	‰¦  «          |d‰	‰¦  «         ddd¦  «         n# 1 swxY w Y   |5  |}‰                      ‰|¦  «        } |d||¦  «          |d||¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zˆ
    Fix *slice* start and stop to be valid (inclusive and exclusive, resp)
    indexing bounds for a sequence of the given *size*.
    r   éÿÿÿÿc                 óÊ  •— t          ‰| ¦  «        }t          ‰|‰¦  «        }t          ‰| |¦  «         ‰                     d|‰	¦  «        }‰                     |d¬¦  «        5  t          ‰| |¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                     d|‰¦  «        }‰                     |d¬¦  «        5  t          ‰| |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   F©Úlikelyú>=)Úgetattrr   Úsetattrr   Úif_then)
Ú
bound_nameÚ
lower_replÚ
upper_replÚboundÚ	underflowÚoverflowr   r   ÚsliceÚzeros
         €€€€r   Ú	fix_boundzfix_slice.<locals>.fix_bound"   sn  ø€ Ý˜˜zÑ*Ô*ˆÝ˜' 5¨$Ñ/Ô/ˆå��z 5Ñ)Ô)Ð)à×'Ò'¨¨U°DÑ9Ô9ˆ	Ø�_Š_˜Y¨uˆ_Ñ5Ô5ð 	3ð 	3Ý�E˜: zÑ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð ×&Ò& t¨U°DÑ9Ô9ˆØ�_Š_˜X¨eˆ_Ñ4Ô4ð 	3ð 	3Ý�E˜: zÑ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð 	3ð 	3s$   Á"B Â BÂBÂ9CÃCÃCÚstartÚstopN)r   r   r   Úif_elser   Ú
is_neg_intÚstepr   )
r   r/   r   Ú	minus_oner1   Úif_neg_stepÚif_pos_stepÚlowerÚupperr0   s
   ```      @r   Ú	fix_slicer<      s   øøøø€ õ Œ;�t”y !Ñ$Ô$€DÝ”˜DœI rÑ*Ô*€Ið3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 
�Š�Ô+¨G°U´ZÑ@Ô@Ñ	AÔ	Að 
,ÑE_ÀkÐS^Øð 	*ð 	*àˆI�g˜t TÑ*Ô*Ð*ØˆI�f˜d DÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð ð 	,ð 	,àˆEØ—K’K  iÑ0Ô0ˆEØˆI�g˜u eÑ,Ô,Ð,ØˆI�f˜e UÑ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð
,ð 
,ð 
,ñ 
,ô 
,ð 
,ð 
,ð 
,ð 
,ð 
,ð 
,ð 
,øøøð 
,ð 
,ð 
,ð 
,ð 
,ð 
,sZ   Á.C?Á4BÂC?ÂB	ÂC?Â"B	Â#C?Â(3C'ÃC?Ã'C+	Ã+C?Ã.C+	Ã/C?Ã?DÄDc           	      ót  — |j         }|j        }|j        }t          j        |j        d¦  «        }t          j        |j        d¦  «        }t          j        | |¦  «        }|                      ||¦  «        }|                      ||¦  «        }	|  	                    ||¦  «        }
|  
                    ||
|	¦  «        }|  	                    ||                      ||¦  «        ¦  «        }|  
                    ||                      d||¦  «        |                      d||¦  «        ¦  «        }|  
                    |||¦  «        S )a   
    Given a slice, compute the number of indices it spans, i.e. the
    number of iterations that for_range_slice() will execute.

    Pseudo-code:
        assert step != 0
        if step > 0:
            if stop <= start:
                return 0
            else:
                return (stop - start - 1) // step + 1
        else:
            if stop >= start:
                return 0
            else:
                return (stop - start + 1) // step + 1

    (see PySlice_GetIndicesEx() in CPython)
    é   r   r%   z<=)r2   r3   r6   r   r   r   r   r5   Úsubr   r   Úsdivr   )r   Úslicestructr2   r3   r6   Úoner0   Úis_step_negativeÚdeltaÚpos_dividendÚneg_dividendÚdividendÚnominal_lengthÚis_zero_lengths                 r   Úget_slice_lengthrJ   =   s#  € ð( Ô€EØÔ€DØÔ€DÝ
Œ+�e”j !Ñ
$Ô
$€CÝŒ;�u”z 1Ñ%Ô%€DåÔ)¨'°4Ñ8Ô8ÐØ�KŠK˜˜eÑ$Ô$€Eð —;’;˜u cÑ*Ô*€LØ—;’;˜u cÑ*Ô*€LØ—’Ð/°¸|ÑLÔL€HØ—[’[  g§l¢l°8¸TÑ&BÔ&BÑCÔC€Nð —^’^Ð$4Ø$+×$7Ò$7¸¸eÀTÑ$JÔ$JØ$+×$7Ò$7¸¸eÀTÑ$JÔ$JñLô L€Nð
 �>Š>˜.¨$°Ñ?Ô?Ð?r   c                 ó^  — |j         }|j        }|                     d¦  «        }|                     d¦  «        }|                      d|j        |¦  «        }|                      ||                      ||¦  «        |¦  «        }|                      ||                      ||¦  «        |¦  «        }||fS )z?
    Return the [lower, upper) indexing bounds of a slice.
    r   r>   r   )r2   r3   r   r   r6   r   r   )	r   rA   r2   r3   r0   rB   rC   r:   r;   s	            r   Úget_slice_boundsrL   i   s«   € ð Ô€EØÔ€DØ�:Š:�a‰=Œ=€DØ
�*Š*�Q‰-Œ-€Cð ×*Ò*¨3°Ô0@À$ÑGÔGÐØ�NŠNÐ+Ø"Ÿ;š; t¨SÑ1Ô1°5ñ:ô :€Eà�NŠNÐ+Ø"Ÿ;š; u¨cÑ2Ô2°Dñ:ô :€Eà�%ˆ<Ðr   c                 ó8   — |                       |j        |¦  «        S )z4
    Fix the given stride for the slice's step.
    )Úmulr6   )r   r/   Ústrides      r   Ú
fix_striderP   {   s   € ð �;Š;�u”z 6Ñ*Ô*Ð*r   c                 ó^   — |j         r%t          j        | ||j        t          df¦  «         dS dS )zP
    Guard against *slicestruct* having a zero step (and raise ValueError).
    úslice step cannot be zeroN)Úhas_stepr   Ú
guard_nullr6   Ú
ValueError)Úcontextr   ÚtyprA   s       r   Úguard_invalid_slicerX   �   sQ   € ð „|ð FÝÔ˜7 G¨[Ô-=Ý&Ð(CÐDñ	Fô 	Fð 	Fð 	Fð 	FðFð Fr   c                 ó8   — d| j         dz
  z  dz
  }d||| dz
  dfS )z©
    Get the default values for a slice's members:
    (start for positive step, start for negative step,
     stop for positive step, stop for negative step, step)
    r>   r   )Úaddress_size)rV   Úmaxints     r   Úget_defaultsr\   Š   s2   € ð �GÔ(¨1Ñ,Ñ-°Ñ2€FØˆv�v ˜x¨!™|¨QÐ/Ð/r   c                 ó  ‡ ‡— ˆ fd„t          ‰ ¦  «        D ¦   «         \  }}}}}d gdz  Št          |¦  «        dk    r%|j        d         t          j        ur|d         ‰d<   n>t          t          |j        |¦  «        ¦  «        D ]\  }	\  }
}|
t          j        ur|‰|	<   Œˆfd„} |d|¦  «        }|                     d|‰                      t          j	        d¦  «        ¦  «        }| 
                    |||¦  «        }| 
                    |||¦  «        } |d|¦  «        } |d|¦  «        }|j        }
‰                      ||j        ¦  «        }||_        ||_        ||_        |                     ¦   «         }t#          ‰ ||j        |¦  «        S )Nc                 óP   •— g | ]"}‰                      t          j        |¦  «        ‘Œ#S © ©Úget_constantr   Úintp©Ú.0ÚxrV   s     €r   ú
<listcomp>z*slice_constructor_impl.<locals>.<listcomp>Ÿ   ó+   ø€ ÐLÐLÐL°ˆ×	Ò	�eœj¨!Ñ	,Ô	,ÐLÐLÐLr   é   r>   r   c                 ó    •— ‰|          }|€|S |S ©Nr_   )ÚiÚdefaultÚvalÚ
slice_argss      €r   Úget_arg_valuez-slice_constructor_impl.<locals>.get_arg_value¬   s   ø€ Ø˜ŒmˆØˆ;ØˆNàˆJr   é   r   )r\   ÚlenÚargsr   ÚnoneÚ	enumerateÚzipr   ra   rb   r   Úreturn_typeÚmake_helperr2   r3   r6   Ú	_getvaluer   )rV   r   Úsigrr   Údefault_start_posÚdefault_start_negÚdefault_stop_posÚdefault_stop_negÚdefault_steprk   Útyrm   ro   r6   rC   Údefault_stopÚdefault_startr3   r2   ÚsliÚresrn   s   `                    @r   Úslice_constructor_implr„   —   sÌ  øø€ ð 	MÐLÐLÐLµlÀ7Ñ6KÔ6KÐLÑLÔLñØØØØØð �˜!‘€Jõ ˆ4�y„y�A‚~€~˜#œ( 1œ+­U¬ZÐ7Ð7Ø˜Qœˆ
�1‰ˆå%¥c¨#¬(°DÑ&9Ô&9Ñ:Ô:ð 	$ð 	$‰LˆA‰y��CØ�œÐ#Ð#Ø #�
˜1‘øðð ð ð ð ð ˆ=˜˜LÑ)Ô)€DØ×*Ò*¨3°Ø+2×+?Ò+?ÅÄ
ÈAÑ+NÔ+NñPô PÐà—>’>Ð"2Ø"2Ð4DñFô F€Là—N’NÐ#3Ø#4Ð6GñIô I€Màˆ=˜˜LÑ)Ô)€DØˆM˜!˜]Ñ+Ô+€Eà	Œ€BØ
×
Ò
˜g s¤Ñ
7Ô
7€CØ€C„IØ€C„HØ€C„Hà
�-Š-‰/Œ/€CÝ˜g w°´ÀÑEÔEÐEr   r2   c                 ó>   — |                       |||¦  «        }|j        S rj   )rw   r2   ©rV   r   rW   Úvaluer‚   s        r   Úslice_start_implrˆ   Ç   s!   € à
×
Ò
˜g s¨EÑ
2Ô
2€CØŒ9Ðr   r3   c                 ó>   — |                       |||¦  «        }|j        S rj   )rw   r3   r†   s        r   Úslice_stop_implrŠ   Ì   s    € à
×
Ò
˜g s¨EÑ
2Ô
2€CØŒ8€Or   r6   c                 óŒ   — |j         r|                      |||¦  «        }|j        S |                      t          j        d¦  «        S )Nr>   )rS   rw   r6   ra   r   rb   r†   s        r   Úslice_step_implrŒ   Ñ   sB   € à
„|ð 3Ø×!Ò! '¨3°Ñ6Ô6ˆØŒxˆà×#Ò#¥E¤J°Ñ2Ô2Ð2r   zslice.indicesc                 óv  — |d         }|                       ||j        d         |d         ¦  «        }|                     t          j        ||¦  «        d¬¦  «        5  | j                             |t          d¦  «         d d d ¦  «         n# 1 swxY w Y   |                     t          j        ||j	        ¦  «        d¬¦  «        5  | j                             |t          d¦  «         d d d ¦  «         n# 1 swxY w Y   t          |||¦  «         |                      ||j        |j        |j        |j	        f¦  «        S )Nr>   r   Fr#   )zlength should not be negative)rR   )rw   rr   r(   r   r5   Ú	call_convÚreturn_user_excrU   Úis_scalar_zeror6   r<   Ú
make_tuplerv   r2   r3   )rV   r   ry   rr   Úlengthr‚   s         r   Úslice_indicesr“   Ú   sª  € à�!ŒW€FØ
×
Ò
˜g s¤x°¤{°D¸´GÑ
<Ô
<€Cà	�Š�Ô+¨G°VÑ<Ô<ÀUˆÑ	KÔ	Kð 
ð 
ØÔ×)Ò)Ø•ZØ.ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð
 
�Š�Ô/°¸¼ÑBÔBÈ5ˆÑ	QÔ	Qð 
ð 
ØÔ×)Ò)Ø•ZØ*ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ ˆg�s˜FÑ#Ô#Ð#à×ÒØØŒØ	Œ�C”H˜cœhÐ'ñô ð s$   Á"B	Â	BÂBÃ"C1Ã1C5Ã8C5c                 ó°  ‡ — ‰                       ||¦  «        }‰                      t          j        ¦  «        }ˆ fd„t	          ‰ ¦  «        D ¦   «         \  }}}}	}
|j        }|€d}|
}n|dk     } ||¦  «        }|j        }|€|r|}n|}n ||¦  «        }|j        }|€|r|	}n|}n ||¦  «        }||_        ||_        ||_        |                     ¦   «         S )Nc                 óP   •— g | ]"}‰                      t          j        |¦  «        ‘Œ#S r_   r`   rc   s     €r   rf   z,make_slice_from_constant.<locals>.<listcomp>ý   rg   r   Fr   )	rw   Úget_value_typer   rb   r\   r6   r2   r3   rx   )rV   r   r   Úpyvalr‚   Últyrz   r{   r|   r}   r~   r6   Ústep_is_negr2   r3   s   `              r   Úmake_slice_from_constantrš   ó   s  ø€ Ø
×
Ò
˜g rÑ
*Ô
*€CØ
×
 Ò
 ¥¤Ñ
,Ô
,€Cð 	MÐLÐLÐLµlÀ7Ñ6KÔ6KÐLÑLÔLñØØØØØð Œ:€DØ€|ØˆØˆˆà˜Q’hˆØˆs�4‰yŒyˆàŒK€EØ€}Øð 	&Ø%ˆEˆEà%ˆEˆEà��E‘
”
ˆàŒ:€DØ€|Øð 	$Ø#ˆDˆDà#ˆDˆDàˆs�4‰yŒyˆà€C„IØ€C„HØ€C„Hà�=Š=‰?Œ?Ðr   c                 ón   — t          |t          j        ¦  «        r|j        }n|}t	          | |||¦  «        S rj   )Ú
isinstancer   ÚLiteralÚliteral_typerš   )rV   r   r   r—   rW   s        r   Úconstant_slicerŸ      s8   € å�"•e”mÑ$Ô$ð ØŒoˆˆàˆå# G¨W°c¸5ÑAÔAÐAr   c                 ó0   — t          | |||j        ¦  «        S rj   )rš   Úliteral_value)rV   r   ÚfromtyÚtotyrm   s        r   Úcast_from_literalr¤   *  s    € å#Ø�˜$ Ô 4ñô ð r   N))Ú__doc__Ú	itertoolsr   Úllvmliter   Ú
numba.corer   r   r   r   Únumba.core.imputilsr	   r
   r   r   r   r   r   r   r   r<   rJ   rL   rP   rX   r\   r/   ÚVarArgÚAnyr„   Ú	SliceTyperˆ   rŠ   rŒ   ÚIntegerr“   rš   rŸ   ÚmiscÚSliceLiteralr¤   r_   r   r   ú<module>r°      s‰  ððð ð "Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð;ð ;ð ;ð!,ð !,ð !,ðH)@ð )@ð )@ðXð ð ð$+ð +ð +ðFð Fð Fð0ð 0ð 0ð €ˆu�l�e”l 5¤9Ñ-Ô-Ñ.Ô.ð,Fð ,Fñ /Ô.ð,Fð^ €ˆuŒ Ñ(Ô(ðð ñ )Ô(ðð €ˆuŒ Ñ'Ô'ðð ñ (Ô'ðð €ˆuŒ Ñ'Ô'ð3ð 3ñ (Ô'ð3ð €ˆ ¤°´Ñ?Ô?ðð ñ @Ô?ðð0*ð *ð *ðZ €�”Ñ Ô ðBð Bñ !Ô ðBð €ˆEŒJÔ# U¤_Ñ5Ô5ðð ñ 6Ô5ðð ð r   