ó
    Eñiq#  ã            
       ó&  • S SK JrJr  S SKrS SKrSSKJrJr  SSKJ	r	  S r
 SS\S\\\R                  4   S	\S
\4S jjrS\\\R                  4   S\\\R                  4   S\R                  S
\\R                  \R                  4   4S jrS rg)é    )ÚOptionalÚUnionNé   )Ú	PointwiseÚ	TensorBox)Úopsc                 ój   • [         R                  " U" U /5      US-   5      nU" U S-   /5      nXA-   nXe4$ )Nr   )r   Úindirect_indexing)Ú	batch_idxÚseq_idxÚoffsets_loaderÚ
jagged_lenÚ	begin_idxÚend_idxÚ
jagged_idxs          Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/jagged_lowerings.pyÚdense_idx_to_jagged_idxr      sH   € ô ×%Ò%Ù˜	�{Ó#Ø�Q‰ó€Iñ ˜i¨!™m˜_Ó-€GØÑ$€JØÐÐó    Úoffsetsr   ÚrealizeÚreturnc                 ó  ^ ^• [        T S5      (       a  T R                  $ T R                  5         T R                  5       nT R	                  5       mUU 4S jn[
        R                  " UTUU/S9nU(       a  UR                  5         UT l        U$ )aœ  
Returns "inverse_offsets" - the inverse of the offsets array.
offsets maps batch index (dense) to jagged index (i.e. offset into jagged tensor).
inverse_offsets maps jagged index to batch index.

e.g. for offsets [0, 3, 4, 9, 10] this will return
inverse_offsets = [0, 0, 0, 1, 2, 2, 2, 2, 2, 3]

For the given offsets, the computed inverse_offsets are cached
on the first call and reused in the further calls.
Úinverse_offsetsc                 ó$  >• U S   n[         R                  " [         R                  " UT5      TR                  5       TR	                  5       S   TR	                  5       S   TR                  5       S   -  TR                  5       S   4STSS9nUS-
  $ )Nr   éÿÿÿÿT)ÚvaluesÚ
boundariesÚboundary_indicesÚindexing_dtypeÚrightr   )r   Ú	bucketizeÚ
index_exprÚget_nameÚget_sizeÚ
get_stride)ÚindexÚidxÚbucketÚdtyper   s      €€r   Úinner_fnÚ%get_inverse_offsets.<locals>.inner_fn8   s–   ø€ Ø�A‰hˆÜ—’Ü—>’> # uÓ-à× Ñ Ó"Ø× Ñ Ó" 2Ñ&Ø× Ñ Ó" 1Ñ%¨×(:Ñ(:Ó(<¸QÑ(?Ñ?Ø×"Ñ"Ó$ RÑ(ð	ð Ø Øñ
ˆð ˜‰zÐr   ©Údevicer)   r*   Úranges)Úhasattrr   r   Úget_device_or_errorÚ	get_dtyper   Úcreate)r   r   r   r-   r*   r   r)   s   `     @r   Úget_inverse_offsetsr3      s�   ù€ ô" ˆwÐ)×*Ñ*ð ×&Ñ&Ð&ð ‡O�OÔØ"×6Ñ6Ó8€FØ ×*Ñ*Ó,€Eöô$  ×&Ò&ØØØØˆ|ñ	€Oö à×ÑÔ!ð .€GÔàÐr   Ú
batch_sizeÚmax_seq_lenÚoffsets_dtypec                 ó¸   • [         R                  " U" U /5      US-   5      nU" U/5      n[         R                  " X5      U-
  n[         R                  " X„SS9n	Xi4$ )Nr   F)Úcheck)r   r
   r"   )
r   Úinverse_offsets_loaderr   r4   r5   r6   r   Úbatch_startÚseqr   s
             r   Újagged_idx_to_dense_idxr<   [   sa   € ô ×%Ò%Ù 
˜|Ó,Ø�Q‰ó€Iñ ! ) Ó-€KÜ
�.Š.˜Ó
3°kÑ
A€Cä×#Ò# C¸EÑB€GØÐÐr   c                  ó  ^^^• SSK JmJmJn   U " [        R
                  R                  R                  R                  5       SS[        S[        [           S[        [           S[        S[        4
UU4S jjj5       n SS	[        S[        [           S
[        [           S[        4UU4S jjjmU " [        R
                  R                  R                  5       SS	[        S[        [           S
[        [           S[        4U4S jjj5       ng )Nr   )Úfallback_handlerÚis_integer_typeÚregister_loweringÚjagged_valuesÚjagged_offsetsÚmax_lengthsÚpadding_valuer   c                 ó   >^^^^^• U R                  5       nU R                  5       nU R                  5       n[        U5      S:w  d}  UR                  S:w  dm  XAS   R                  5       :w  dW  [        U5      S:w  dH  [        US   R                  5       5      S:w  d(  [        U5      [        U5      :w  d  T" US   5      (       d<  T" [        R                  R                  R                  R                  SS9" U UUT5      $ US   nUR                  5       S   nUR                  5       mUS-
  n	US   n
US   nUS   mXšU/nU R                  5       mUR                  5       mUUUUU4S jn[        R                  " UUUUS9$ )	Nr   Úcudar   é   F©Úadd_to_fallback_setc                 óÀ   >^^• U u  pm[        UUTTS9u  mn[        R                  " [        R                  " [        R                  " TT5      U5      UUU
4S jT	5      $ )N)r   r   r   r   c                  ó   >• T" TT /5      $ ©N© )Úemb_idxr   Úvalues_loaders   €€€r   Ú<lambda>Ú`register_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn.<locals>.<lambda>¯   s   ø€ ™ z°7Ð&;Ô<r   )r   r   ÚmaskedÚltr"   )r&   r   r   r   rN   r   r   r6   r   rD   rO   s       @@€€€€€r   r*   ÚNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn¡   s`   ú€ à*/Ñ'ˆI Ü"9Ø#ØØ-Ø%ñ	#ÑˆJ˜ô —:’:Ü—’Ü—N’N :¨}Ó=Øóö =Øóð r   r,   )r0   r1   r$   ÚlenÚtypeÚ
get_deviceÚtorchr   ÚatenÚ_jagged_to_padded_dense_forwardÚdefaultÚmake_loaderr   r2   )rA   rB   rC   rD   r-   r)   Újagged_values_sizer   Úoffsets_lenr4   r5   Úembedding_lenÚoutput_sizer*   r   r6   r   rO   r>   r?   s      `          @@@@€€r   rZ   Ú<register_jagged_ops.<locals>._jagged_to_padded_dense_forwards   sˆ  ý€ ð ×2Ñ2Ó4ˆØ×'Ñ'Ó)ˆà*×3Ñ3Ó5Ðô �Ó 1Ó$Ø�{‰{˜fÓ$Ø¨Ñ*×5Ñ5Ó7Ó7ÜÐ%Ó&¨!Ó+Ü�> !Ñ$×-Ñ-Ó/Ó0°AÓ5Ü�;Ó¤3 ~Ó#6Ó6Ù" >°!Ñ#4×5Ñ5á#Ü—	‘	—‘×>Ñ>×FÑFØ$)òð ØØØóð ð ,¨AÑ.ˆØ×&Ñ&Ó(¨Ñ+ˆØ×)Ñ)Ó+ˆØ  1‘_ˆ
Ø! !‘nˆØ*¨1Ñ-ˆØ'¨Ñ*ˆ
à!°Ð>ˆà%×1Ñ1Ó3ˆØ ×,Ñ,Ó.ˆ÷	ñ 	ô$ ×ÒØØØØñ	
ð 	
r   Údenser   c                 ó‚  >^^^^^^• UR                  5       nUR                  5       nUR                  5       n[        U5      S:w  dh  UR                  S:w  dX  XBS   R                  5       :w  dB  [        US   R                  5       5      S:w  d"  [        U5      S:w  d  Ub  T" US   5      (       d  T" U SS9" UUU5      $ US   nUR                  5       mUS   mUS   mUS   nX8/n	UR                  5       mUR                  5       m[        UUS9n
U
R                  5       mUUUUUU4S	 jn[        R                  " UUUU	S
9$ )Nr   rF   r   é   FrH   r   )r   r   c           	      óò   >^^^• U u  nm[        UT
TTTT	S9u  mm[        R                  " [        R                  " [        R                  " TT	5      [        R                  " TT	5      5      UUUU4S jS5      $ )N)r   r   r9   r4   r5   r6   c                  ó   >• T" T TT/5      $ rL   rM   )r   Údense_loaderrN   r   s   €€€€r   rP   Ú^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>÷   s   ø€ ™ i°¸'Ð%BÔCr   ç        )r<   r   rR   rS   r"   )r&   r   r   rN   r   r4   rg   r9   r5   r6   r   s     @@@€€€€€€r   r*   ÚLregister_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fnç   sr   û€ à"'ÑˆJ˜Ü!8Ø%Ø-Ø'=Ø%Ø'Ø+ñ"ÑˆI�wô —:’:Ü—’Ü—N’N 7¨MÓ:Ü—N’N ;°Ó>ó÷ DØóð r   r,   )
r0   r1   r$   rU   rV   rW   r\   r3   r   r2   )Úfallback_oprb   rB   r   r-   r)   Ú
dense_sizer   r_   r`   r   r*   r4   rg   r9   r5   r6   r   r>   r?   s               @@@@@@€€r   Ú_dense_to_jagged_forward_implÚ:register_jagged_ops.<locals>._dense_to_jagged_forward_implº   sY  þ€ ð ×*Ñ*Ó,ˆØ—‘Ó!ˆà—^‘^Ó%ˆ
ô �Ó 1Ó$Ø�{‰{˜fÓ$Ø¨Ñ*×5Ñ5Ó7Ó7Ü�> !Ñ$×-Ñ-Ó/Ó0°AÓ5Ü�:‹ !Ó#ØÑ!Ù" >°!Ñ#4×5Ñ5á# KÀUÒKØØØóð ð ,¨AÑ.ˆØ×)Ñ)Ó+ˆØ ‘]ˆ
Ø  ‘mˆØ" 2™ˆà!Ð1ˆà×(Ñ(Ó*ˆØ ×,Ñ,Ó.ˆä-ØØ!ñ
ˆð "1×!<Ñ!<Ó!>Ð÷	ò 	ô( ×ÒØØØØñ	
ð 	
r   c                 ón   >• T" [         R                  R                  R                  R                  U UUS9$ )N)rk   rb   rB   r   )rX   r   rY   Ú_padded_dense_to_jagged_forwardr[   )rb   rB   r   rm   s      €r   Ú_dense_to_jagged_forwardÚ5register_jagged_ops.<locals>._dense_to_jagged_forward  s2   ø€ ñ -ÜŸ	™	Ÿ™×FÑF×NÑNØØ)Ø!ñ	
ð 	
r   )ri   rL   )Úloweringr>   r?   r@   rX   r   rY   rZ   r[   r   ÚlistÚintÚfloatr   rp   )r@   rZ   rq   rm   r>   r?   s      @@@r   Úregister_jagged_opsrw   n   s  ú€ çNÑNñ ”u—y‘y—~‘~×EÑE×MÑMÓNð
  #ñ	D
Ü ðD
äœY™ðD
ô œ#‘YðD
ô ð	D
ô
 
÷D
ð D
ó OðD
ðT %)ñ	F
äðF
ô œY™ðF
ô œS‘Mð	F
ô
 
÷F
ñ F
ñR ”u—y‘y—~‘~×EÑEÓFð %)ñ

Üð

äœY™ð

ô œS‘Mð

ô 
÷	

ó Gñ

r   )T)Útypingr   r   ÚsympyrX   Úirr   r   Úvirtualizedr   r   ru   ÚExprÚboolr3   r)   Útupler<   rw   rM   r   r   Ú<module>r      s¸   ðç "ã ã ç $Ý ò	ð ñ?Øð?à�c˜5Ÿ:™:�oÑ&ð?ð ð?ð õ	?ðDð �c˜5Ÿ:™:�oÑ&ð	ð
 �s˜EŸJ™J�Ñ'ðð —;‘;ðð ˆ5�:‰:�u—z‘zÐ!Ñ"ôó&`
r   