Ë
    g^(h#  ã            
       ó4  — d dl mZmZ d dlZd dlZddlmZmZ ddlm	Z	m
Z
mZ ddlmZ d„ Z	 dded	eeej                   f   d
edefd„Zdeeej                   f   deeej                   f   dej&                  deej                   ej                   f   fd„Zd„ Zy)é    )ÚOptionalÚUnionNé   )Ú	PointwiseÚ	TensorBox)Úfallback_handlerÚis_integer_typeÚregister_lowering)Ú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          ú^/var/www/skyplay_api_hub/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_fn9   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_offsetsr5      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   r6   r7   r8   r   Úbatch_startÚseqr   s
             r   Újagged_idx_to_dense_idxr>   \   sg   € ô ×%Ñ%Ù 
˜|Ó,Ø�Q‰ó€Iñ ! ) Ó-€KÜ
�.‰.˜ ]Ó
3°kÑ
A€Cä×#Ñ# C¨¸EÔB€GØ�gÐÐr   c                  óò  ‡— t        t        j                  j                  j                  j
                  «      	 ddt        dt        t           dt        t           dt        dt        f
d„«       } 	 ddt        dt        t           dt        t           dt        fd	„Št        t        j                  j                  j                  «      	 ddt        dt        t           dt        t           dt        fˆfd
„«       }y )NÚjagged_valuesÚjagged_offsetsÚmax_lengthsÚpadding_valuer   c                 ó   ‡‡‡‡‡— | j                  «       }| j                  «       }| j                  «       }t        |«      dk7  sw|j                  dk7  sh||d   j                  «       k7  sRt        |«      dk7  sDt        |d   j                  «       «      dk7  s%t        |«      t        |«      k7  st        |d   «      sB t        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   rM   r   r   r8   r   rC   rN   s       @@€€€€€r   r-   zNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fnŸ   sb   ú€ à*/Ñ'ˆI�w Ü"9Ø#ØØ-Ø%ô	#ÑˆJ˜ô —:‘:Ü—‘Ü—N‘N :¨}Ó=Øóõ =Øóð r   r.   )r2   r3   r'   ÚlenÚtypeÚ
get_devicer	   r   Útorchr   ÚatenÚ_jagged_to_padded_dense_forwardÚdefaultÚmake_loaderr   r4   )r@   rA   rB   rC   r/   r,   Újagged_values_sizer   Úoffsets_lenr6   r7   Úembedding_lenÚoutput_sizer-   r   r8   r   rN   s      `          @@@@r   rW   z<register_jagged_ops.<locals>._jagged_to_padded_dense_forwardq   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  sb|j                  dk7  sS||d   j                  «       k7  s=t        |d   j                  «       «      dk7  st        |«      dk7  s|�t        |d   «      s t        | d¬«      |||«      S |d   }|j                  «       Š|d   Š|d   Š|d   }||g}	|j                  «       Š|j                  «       Št        ||¬«      }
|
j                  «       Šˆˆˆˆˆˆfd	„}t        j                  ||||	¬
«      S )Nr   rE   r   é   FrG   r   )r   r   c           	      óî   •‡‡‡— | \  }Št        |‰
‰‰‰‰	¬«      \  ŠŠt        j                  t        j                  t        j                  ‰‰	«      t        j                  ‰‰	«      «      ˆˆˆˆfd„d«      S )N)r   r   r;   r6   r7   r8   c                  ó   •—  ‰‰ ‰‰g«      S rK   rL   )r   Údense_loaderrM   r   s   €€€€r   rO   z^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>õ   s   ø€ ™ i°¸'Ð%BÓC€ r   ç        )r>   r   rP   rQ   r%   )r)   r   r   rM   r   r6   rc   r;   r7   r8   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.   )r2   r3   r'   rR   rS   rT   r	   r   rY   r5   r   r4   )Úfallback_opr^   rA   r   r/   r,   Ú
dense_sizer   r\   r]   r   r-   r6   rc   r;   r7   r8   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)re   r^   rA   r   )rU   r   rV   Ú_padded_dense_to_jagged_forwardrX   )r^   rA   r   rg   s      €r   Ú_dense_to_jagged_forwardz5register_jagged_ops.<locals>._dense_to_jagged_forward  s2   ø€ ñ -ÜŸ	™	Ÿ™×FÑF×NÑNØØ)Ø!ô	
ð 	
r   )rd   rK   )r
   rU   r   rV   rW   rX   r   ÚlistÚintÚfloatr   ri   )rW   rj   rg   s     @r   Úregister_jagged_opsrn   o   s	  ø€ ä”u—y‘y—~‘~×EÑE×MÑMÓNð
  #ñ	D
Ü ðD
äœY™ðD
ô œ#‘YðD
ô ð	D
ô
 
òD
ó OðD
ðT %)ñ	F
äðF
ô œY™ðF
ô œS‘Mð	F
ô
 
óF
ôR ”u—y‘y—~‘~×EÑEÓFð %)ñ

Üð

äœY™ð

ô œS‘Mð

ô 
ô	

ó Gñ

r   )T)Útypingr   r   ÚsympyrU   Úirr   r   Úloweringr   r	   r
   Úvirtualizedr   r   rl   ÚExprÚboolr5   r,   Útupler>   rn   rL   r   r   ú<module>rw      s¾   ðç "ã ã ç $ß JÑ JÝ ò	ð ñ?Øð?à�c˜5Ÿ:™:�oÑ&ð?ð ð?ð ó	?ðDð �c˜5Ÿ:™:�oÑ&ð	ð
 �s˜EŸJ™J�Ñ'ðð —;‘;ðð ˆ5�:‰:�u—z‘zÐ!Ñ"óó&]
r   