Ë
    èÿæiÛ$  ã                   óJ  — 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j6                  ej8                  «      «      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jD                  «      d„ «       Z#d„ Z$ eej<                  «      d„ «       Z% eejL                  jN                  ej<                  «      d„ «       Z(y)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                 ó®   — | j                  d|t        j                  |j                  d«      «      }| j	                  ||«      }| j                  |||«      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        új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/cpython/slicing.pyÚ	fix_indexr      sJ   € ð
 ×%Ñ% c¨3´·±¸D¿I¹IÀqÓ0IÓJ€KØ—K‘K  TÓ*€MØ�>‰>˜+ }°cÓ:Ð:ó    c                 óþ  ‡ ‡‡‡	— t        j                  ‰j                  d«      Š	t        j                  ‰j                  d«      }ˆ ˆˆˆ	fd„}‰ j                  t	        j
                  ‰ ‰j                  «      «      5 \  }}|5   |d‰	‰«        |d‰	‰«       ddd«       |5  |}‰ j                  ‰|«      } |d||«        |d||«       ddd«       ddd«       y# 1 sw Y   ŒExY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zˆ
    Fix *slice* start and stop to be valid (inclusive and exclusive, resp)
    indexing bounds for a sequence of the given *size*.
    r   éÿÿÿÿc                 ór  •— t        ‰| «      }t        ‰|‰«      }t        ‰| |«       ‰j                  d|‰	«      }‰j	                  |d¬«      5  t        ‰| |«       d d d «       ‰j                  d|‰«      }‰j	                  |d¬«      5  t        ‰| |«       d d d «       y # 1 sw Y   ŒFxY w# 1 sw Y   y xY w)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"   sª   ø€ Ü˜˜zÓ*ˆÜ˜' 5¨$Ó/ˆä��z 5Ô)à×'Ñ'¨¨U°DÓ9ˆ	Ø�_‰_˜Y¨uˆ_Õ5Ü�E˜: zÔ2÷ 6ð ×&Ñ& t¨U°DÓ9ˆØ�_‰_˜X¨eˆ_Õ4Ü�E˜: zÔ2÷ 5Ð4÷	 6Ð5ú÷ 5Ð4ús   ÁB!Â
B-Â!B*Â-B6Ú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‘y !Ó$€DÜ—‘˜DŸI™I rÓ*€I÷3ð 
�‰œ×+Ñ+¨G°U·Z±ZÓ@Ô	AÑE_ÀkÐS^Úá�g˜t TÔ*Ù�f˜d DÔ)÷ ò àˆEØ—K‘K  iÓ0ˆEÙ�g˜u eÔ,Ù�f˜e UÔ+÷ ÷ 
BÐ	Aßˆ[ú÷ ˆ[ú÷ 
BÐ	Aús<   Á<C3ÂCÂ
C3Â!)C'Ã
C3ÃC$	Ã C3Ã'C0	Ã,C3Ã3C<c           	      ó\  — |j                   }|j                  }|j                  }t        j                  |j
                  d«      }t        j                  |j
                  d«      }t        j                  | |«      }| j                  ||«      }| j                  ||«      }	| j                  ||«      }
| j                  ||
|	«      }| j                  || j                  ||«      «      }| j                  || j                  d||«      | j                  d||«      «      }| j                  |||«      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‘j !Ó
$€CÜ�;‰;�u—z‘z 1Ó%€Dä×)Ñ)¨'°4Ó8ÐØ�K‰K˜˜eÓ$€Eð —;‘;˜u cÓ*€LØ—;‘;˜u cÓ*€LØ—‘Ð/°¸|ÓL€HØ—[‘[  g§l¡l°8¸TÓ&BÓC€Nð —^‘^Ð$4Ø$+×$7Ñ$7¸¸eÀTÓ$JØ$+×$7Ñ$7¸¸eÀTÓ$JóL€Nð
 �>‰>˜.¨$°Ó?Ð?r   c                 óD  — |j                   }|j                  }|j                  d«      }|j                  d«      }| j                  d|j                  |«      }| j                  || j                  ||«      |«      }| j                  || 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@Ñ0@À$ÓGÐØ�N‰NÐ+Ø"Ÿ;™; t¨SÓ1°5ó:€Eà�N‰NÐ+Ø"Ÿ;™; u¨cÓ2°Dó:€Eà�%ˆ<Ðr   c                 ó:   — | j                  |j                  |«      S )z4
    Fix the given stride for the slice's step.
    )Úmulr6   )r   r/   Ústrides      r   Ú
fix_striderP   {   s   € ð �;‰;�u—z‘z 6Ó*Ð*r   c                 ón   — |j                   r)t        j                  | ||j                  t        df«       yy)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   �   s4   € ð ‡|‚|Ü×Ñ˜7 G¨[×-=Ñ-=Ü&Ð(CÐDõ	Fð r   c                 óB   — 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\   Š   s5   € ð �G×(Ñ(¨1Ñ,Ñ-°Ñ2€FØˆv�v ˜x¨!™|¨QÐ/Ð/r   c                 ó<  ‡— t        | «      D �cg c]"  }| j                  t        j                  |«      ‘Œ$ c}\  }}}}}	d gdz  Št	        |«      dk(  r(|j
                  d   t        j                  ur	|d   ‰d<   nBt        t        |j
                  |«      «      D ]   \  }
\  }}|t        j                  usŒ|‰|
<   Œ" ˆfd„} |d|	«      }|j                  d|| j                  t        j                  d«      «      }|j                  |||«      }|j                  |||«      } |d|«      } |d|«      }|j                  }| j                  ||j                  «      }||_        ||_        ||_        |j!                  «       }t#        | ||j                  |«      S c c}w )Né   r>   r   c                 ó   •— ‰|    }|€|S |S ©N© )ÚiÚdefaultÚvalÚ
slice_argss      €r   Úget_arg_valuez-slice_constructor_impl.<locals>.get_arg_value¬   s   ø€ Ø˜‰mˆØˆ;ØˆNàˆJr   é   r   )r\   Úget_constantr   ÚintpÚlenÚargsÚnoneÚ	enumerateÚzipr   r   Úreturn_typeÚmake_helperr2   r3   r6   Ú	_getvaluer   )rV   r   Úsigrk   ÚxÚdefault_start_posÚdefault_start_negÚdefault_stop_posÚdefault_stop_negÚdefault_steprb   Útyrd   rf   r6   rC   Údefault_stopÚdefault_startr3   r2   ÚsliÚresre   s                         @r   Úslice_constructor_implr~   —   s•  ø€ ô 7CÀ7Ô6KÓLÑ6K°ˆ×	Ñ	œeŸj™j¨!Õ	,Ð6KÑLñØØØØØð �˜!‘€Jô ˆ4ƒy�A‚~˜#Ÿ(™( 1™+¬U¯Z©ZÑ7Ø˜Q™ˆ
�1Šä%¤c¨#¯(©(°DÓ&9Ö:‰LˆA‰y��CØœŸ™Ò#Ø #�
˜1’ð ;ô
ñ ˜˜LÓ)€DØ×*Ñ*¨3°Ø+2×+?Ñ+?ÄÇ
Á
ÈAÓ+NóPÐà—>‘>Ð"2Ø"2Ð4DóF€Là—N‘NÐ#3Ø#4Ð6GóI€Má˜˜LÓ)€DÙ˜!˜]Ó+€Eà	�‰€BØ
×
Ñ
˜g s§¡Ó
7€CØ€C„IØ€C„HØ€C„Hà
�-‰-‹/€CÜ˜g w°·±ÀÓEÐEùòK 	Ms   �'Fr2   c                 ó@   — | j                  |||«      }|j                  S r`   )rp   r2   ©rV   r   rW   Úvaluer|   s        r   Úslice_start_implr‚   Ç   s    € à
×
Ñ
˜g s¨EÓ
2€CØ�9‰9Ðr   r3   c                 ó@   — | j                  |||«      }|j                  S r`   )rp   r3   r€   s        r   Úslice_stop_implr„   Ì   s   € à
×
Ñ
˜g s¨EÓ
2€CØ�8‰8€Or   r6   c                 ó˜   — |j                   r| j                  |||«      }|j                  S | j                  t        j
                  d«      S )Nr>   )rS   rp   r6   rh   r   ri   r€   s        r   Úslice_step_implr†   Ñ   s=   € à
‡|‚|Ø×!Ñ! '¨3°Ó6ˆØ�x‰xˆà×#Ñ#¤E§J¡J°Ó2Ð2r   zslice.indicesc                 óp  — |d   }| j                  ||j                  d   |d   «      }|j                  t        j                  ||«      d¬«      5  | j
                  j                  |t        d«       d d d «       |j                  t        j                  ||j                  «      d¬«      5  | j
                  j                  |t        d«       d d d «       t        |||«       | j                  ||j                  |j                  |j                  |j                  f«      S # 1 sw Y   Œ¯xY w# 1 sw Y   Œ`xY w)Nr>   r   Fr#   )zlength should not be negative)rR   )rp   rk   r(   r   r5   Ú	call_convÚreturn_user_excrU   Úis_scalar_zeror6   r<   Ú
make_tuplero   r2   r3   )rV   r   rr   rk   Úlengthr|   s         r   Úslice_indicesr�   Ú   s  € à�!‰W€FØ
×
Ñ
˜g s§x¡x°¡{°D¸±GÓ
<€Cà	�‰œ×+Ñ+¨G°VÓ<ÀUˆÕ	KØ×Ñ×)Ñ)Ø”ZØ.ô	
÷ 
Lð
 
�‰œ×/Ñ/°¸¿¹ÓBÈ5ˆÕ	QØ×Ñ×)Ñ)Ø”ZØ*ô	
÷ 
Rô ˆg�s˜FÔ#à×ÑØØ�‰Ø	�‰�C—H‘H˜cŸh™hÐ'óð ÷ 
LÐ	Kú÷
 
RÐ	Qús   Á"D Â+"D,Ä D)Ä,D5c                 óê  — | j                  ||«      }| j                  t        j                  «      }t	        | «      D �cg c]"  }| j                  t        j                  |«      ‘Œ$ c}\  }}}	}
}|j                  }|€d}|}n|dk  } ||«      }|j                  }|€|r|}n|}n ||«      }|j                  }|€|r|
}n|	}n ||«      }||_        ||_        ||_        |j                  «       S c c}w )NFr   )
rp   Úget_value_typer   ri   r\   rh   r6   r2   r3   rq   )rV   r   ry   Úpyvalr|   Últyrs   rt   ru   rv   rw   rx   r6   Ústep_is_negr2   r3   s                   r   Úmake_slice_from_constantr“   ó   s  € Ø
×
Ñ
˜g rÓ
*€CØ
×
 Ñ
 ¤§¡Ó
,€Cô 7CÀ7Ô6KÓLÑ6K°ˆ×	Ñ	œeŸj™j¨!Õ	,Ð6KÑLñØØØØØð �:‰:€DØ€|ØˆØ‰à˜Q‘hˆÙ�4‹yˆà�K‰K€EØ€}ÙØ%‰Eà%‰Eá�E“
ˆà�:‰:€DØ€|ÙØ#‰Dà#‰Dá�4‹yˆà€C„IØ€C„HØ€C„Hà�=‰=‹?ÐùòA 	Ms   ¿'C0c                 óp   — t        |t        j                  «      r|j                  }n|}t	        | |||«      S r`   )Ú
isinstancer   ÚLiteralÚliteral_typer“   )rV   r   ry   r�   rW   s        r   Úconstant_slicer˜      s/   € ä�"”e—m‘mÔ$Ø�o‰o‰àˆä# G¨W°c¸5ÓAÐAr   c                 ó2   — t        | |||j                  «      S r`   )r“   Úliteral_value)rV   r   ÚfromtyÚtotyrd   s        r   Úcast_from_literalr�   *  s   € ä#Ø�˜$ × 4Ñ 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�   ra   r   r   Ú<module>r©      sL  ðñõ "å ß 4Ó 4÷0÷ 0ó 0ò;ò!,òH)@òXò$+òFò0ñ ˆu�l�e—l‘l 5§9¡9Ó-Ó.ñ,Fó /ð,Fñ^ ˆu�‰ Ó(ñó )ðñ ˆu�‰ Ó'ñó (ðñ ˆu�‰ Ó'ñ3ó (ð3ñ ˆ §¡°·±Ó?ñó @ðò0*ñZ �—‘Ó ñBó !ðBñ ˆE�J‰J×#Ñ# U§_¡_Ó5ñó 6ñr   