Ë
    ÄÓ^j6#  ã            
       ó  — d dl Z d dlZddlmZmZ ddlmZ d„ Z	 ddedee j                  z  de
d	efd
„Zdee j                  z  dee j                  z  dej                  d	ee j                  e j                  f   fd„Zd„ Zy)é    Né   )Ú	PointwiseÚ	TensorBox)Úopsc                 ól   — t        j                   || g«      |dz   «      } || dz   g«      }||z   }||fS )Nr   )r   Úindirect_indexing)Ú	batch_idxÚseq_idxÚoffsets_loaderÚ
jagged_lenÚ	begin_idxÚend_idxÚ
jagged_idxs          úk/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/jagged_lowerings.pyÚdense_idx_to_jagged_idxr      sL   € ô ×%Ñ%Ù˜	�{Ó#Ø�Q‰ó€Iñ ˜i¨!™m˜_Ó-€GØ˜WÑ$€JØ�wÐÐó    Úoffsetsr   ÚrealizeÚreturnc                 ó  ‡ ‡— t        ‰ d«      r‰ j                  S ‰ j                  «        ‰ j                  «       }‰ j	                  «       Šˆˆ fd„}t        j                  |‰||g¬«      }|r|j                  «        |‰ _        |S )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                 ó&  •— | d   }t        j                  t        j                  |‰«      ‰j                  «       ‰j	                  «       d   ‰j	                  «       d   ‰j                  «       d   z  ‰j                  «       d   fd‰d¬«      }|dz
  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_fnz%get_inverse_offsets.<locals>.inner_fn7   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_offsetsr0      sŒ   ù€ ô" ˆwÐ)Ô*ð ×&Ñ&Ð&ð ‡O�OÔØ"×6Ñ6Ó8€FØ ×*Ñ*Ó,€Eõô$  ×&Ñ&ØØØØˆ|ô	€Oñ à×ÑÔ!ð .€GÔàÐr   Ú
batch_sizeÚmax_seq_lenÚoffsets_dtypec                 ó¾   — t        j                   || g«      |dz   «      } ||g«      }t        j                  | |«      |z
  }t        j                  ||d¬«      }	||	fS )Nr   F)Úcheck)r   r   r    )
r   Úinverse_offsets_loaderr   r1   r2   r3   r	   Úbatch_startÚseqr
   s
             r   Újagged_idx_to_dense_idxr9   Z   sg   € ô ×%Ñ%Ù 
˜|Ó,Ø�Q‰ó€Iñ ! ) Ó-€KÜ
�.‰.˜ ]Ó
3°kÑ
A€Cä×#Ñ# C¨¸EÔB€GØ�gÐÐr   c                  óú  ‡‡‡— ddl mŠmŠm}   | t        j
                  j                  j                  j                  «      	 ddt        dt        t           dt        t           dt        dt        f
ˆˆfd„«       }	 dd	t        dt        t           d
t        d z  dt        fˆˆfd„Š | t        j
                  j                  j                  «      	 dd	t        dt        t           d
t        d z  dt        fˆfd„«       }y )Nr   )Úfallback_handlerÚis_integer_typeÚregister_loweringÚjagged_valuesÚjagged_offsetsÚmax_lengthsÚpadding_valuer   c                 óö  •‡‡‡‡‡— | j                  «       }| j                  «       }| j                  «       }t        |«      dk7  st|j                  dk7  se||d   j                  «       k7  sOt        |«      dk7  sAt        |d   j                  «       «      dk7  s"t        |«      t        |«      k7  s ‰|d   «      s?  ‰t        j                  j                  j                  j                  d¬«      | ||‰«      S |d   }|j                  «       d   }|j                  «       Š|dz
  }	|d   }
|d   }|d   Š|	|
|g}| j                  «       Š|j                  «       Šˆˆˆˆˆfd„}t        j                  ||||¬«      S )	Nr   Úcudar   é   F©Úadd_to_fallback_setc                 óÀ   •‡‡— | \  }}Št        ||‰‰¬«      \  Š}t        j                  t        j                  t        j                  ‰‰«      |«      ˆˆˆ
fd„‰	«      S )N)r	   r
   r   r   c                  ó   •—  ‰‰‰ g«      S ©N© )Úemb_idxr   Úvalues_loaders   €€€r   ú<lambda>z`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   rK   r   r   r3   r   rA   rL   s       @@€€€€€r   r(   zNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn    sb   ú€ à*/Ñ'ˆI�w Ü"9Ø#ØØ-Ø%ô	#ÑˆJ˜ô —:‘:Ü—‘Ü—N‘N :¨}Ó=Øóõ =Øóð r   r)   )r-   r.   r"   ÚlenÚtypeÚ
get_deviceÚtorchr   ÚatenÚ_jagged_to_padded_dense_forwardÚdefaultÚmake_loaderr   r/   )r>   r?   r@   rA   r*   r'   Újagged_values_sizer   Úoffsets_lenr1   r2   Úembedding_lenÚoutput_sizer(   r   r3   r   rL   r;   r<   s      `          @@@@€€r   rU   z<register_jagged_ops.<locals>._jagged_to_padded_dense_forwardr   sŽ  ý€ ð ×2Ñ2Ó4ˆØ×'Ñ'Ó)ˆà*×3Ñ3Ó5Ðô �Ó 1Ò$Ø�{‰{˜fÒ$Ø˜¨Ñ*×5Ñ5Ó7Ò7ÜÐ%Ó&¨!Ò+Ü�> !Ñ$×-Ñ-Ó/Ó0°AÒ5Ü�;Ó¤3 ~Ó#6Ò6Ù" >°!Ñ#4Ô5ðÑ#Ü—	‘	—‘×>Ñ>×FÑFØ$)ôð ØØØóð ð ,¨AÑ.ˆØ×&Ñ&Ó(¨Ñ+ˆØ×)Ñ)Ó+ˆØ  1‘_ˆ
Ø! !‘nˆØ*¨1Ñ-ˆØ'¨Ñ*ˆ
à! ;°Ð>ˆà%×1Ñ1Ó3ˆØ ×,Ñ,Ó.ˆ÷	ð 	ô$ ×ÑØØØØô	
ð 	
r   Údenser   c                 ó~  •‡‡‡‡‡‡— |j                  «       }|j                  «       }|j                  «       }t        |«      dk7  s_|j                  dk7  sP||d   j                  «       k7  s:t        |d   j                  «       «      dk7  st        |«      dk7  s|� ‰|d   «      s  ‰| d¬«      |||«      S |d   }|j                  «       Š|d   Š|d   Š|d   }||g}	|j                  «       Š|j                  «       Št        ||¬«      }
|
j                  «       Šˆˆˆˆˆˆfd	„}t        j                  ||||	¬
«      S )Nr   rC   r   é   FrE   r   )r   r   c           	      óî   •‡‡‡— | \  }Št        |‰
‰‰‰‰	¬«      \  ŠŠt        j                  t        j                  t        j                  ‰‰	«      t        j                  ‰‰	«      «      ˆˆˆˆfd„d«      S )N)r   r   r6   r1   r2   r3   c                  ó   •—  ‰‰ ‰‰g«      S rI   rJ   )r	   Údense_loaderrK   r
   s   €€€€r   rM   z^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>ö   s   ø€ ™ i°¸'Ð%BÓC€ r   ç        )r9   r   rN   rO   r    )r$   r   r	   rK   r
   r1   ra   r6   r2   r3   r   s     @@@€€€€€€r   r(   zLregister_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)   )
r-   r.   r"   rP   rQ   rR   rW   r0   r   r/   )Úfallback_opr\   r?   r   r*   r'   Ú
dense_sizer   rZ   r[   r   r(   r1   ra   r6   r2   r3   r   r;   r<   s               @@@@@@€€r   Ú_dense_to_jagged_forward_implz:register_jagged_ops.<locals>._dense_to_jagged_forward_impl¹   s]  þ€ ð ×*Ñ*Ó,ˆØ—‘Ó!ˆà—^‘^Ó%ˆ
ô �Ó 1Ò$Ø�{‰{˜fÒ$Ø˜¨Ñ*×5Ñ5Ó7Ò7Ü�> !Ñ$×-Ñ-Ó/Ó0°AÒ5Ü�:‹ !Ò#ØÐ!Ù" >°!Ñ#4Ô5àKÑ# KÀUÔKØØØóð ð ,¨AÑ.ˆØ×)Ñ)Ó+ˆØ ‘]ˆ
Ø  ‘mˆØ" 2™ˆà! =Ð1ˆà×(Ñ(Ó*ˆØ ×,Ñ,Ó.ˆä-ØØ!ô
ˆð "1×!<Ñ!<Ó!>Ð÷	ñ 	ô( ×ÑØØØØô	
ð 	
r   c                 ót   •—  ‰t         j                  j                  j                  j                  | ||¬«      S )N)rc   r\   r?   r   )rS   r   rT   Ú_padded_dense_to_jagged_forwardrV   )r\   r?   r   re   s      €r   Ú_dense_to_jagged_forwardz5register_jagged_ops.<locals>._dense_to_jagged_forward  s2   ø€ ñ -ÜŸ	™	Ÿ™×FÑF×NÑNØØ)Ø!ô	
ð 	
r   )rb   rI   )Úloweringr;   r<   r=   rS   r   rT   rU   rV   r   ÚlistÚintÚfloatrg   )r=   rU   rh   re   r;   r<   s      @@@r   Úregister_jagged_opsrm   m   s  ú€ çNÑNñ ”u—y‘y—~‘~×EÑE×MÑMÓNð
  #ñ	D
Ü ðD
äœY™ðD
ô œ#‘YðD
ô ð	D
ô
 
õD
ó OðD
ðT "&ñ	F
äðF
ô œY™ðF
ô ˜$‘Jð	F
ô
 
öF
ñR ”u—y‘y—~‘~×EÑEÓFð "&ñ

Üð

äœY™ð

ô ˜$‘Jð

ô 
ô	

ó Gñ

r   )T)ÚsympyrS   Úirr   r   Úvirtualizedr   r   rk   ÚExprÚboolr0   r'   Útupler9   rm   rJ   r   r   ú<module>rt      s«   ðó ã ç $Ý ò	ð ñ?Øð?à�e—j‘jÑ ð?ð ð?ð ó	?ðDð �e—j‘jÑ ð	ð
 �u—z‘zÑ!ðð —;‘;ðð ˆ5�:‰:�u—z‘zÐ!Ñ"óó&`
r   